Line data Source code
1 : /* This Source Code Form is subject to the terms of the Mozilla Public
2 : * License, v. 2.0. If a copy of the MPL was not distributed with this
3 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 :
5 : template<class T>
6 : nsPIDOMWindowInner*
7 2057 : nsPIDOMWindow<T>::AsInner()
8 : {
9 2057 : MOZ_ASSERT(IsInnerWindow());
10 2057 : return reinterpret_cast<nsPIDOMWindowInner*>(this);
11 : }
12 :
13 : template<class T>
14 : const nsPIDOMWindowInner*
15 588 : nsPIDOMWindow<T>::AsInner() const
16 : {
17 588 : MOZ_ASSERT(IsInnerWindow());
18 588 : return reinterpret_cast<const nsPIDOMWindowInner*>(this);
19 : }
20 :
21 : template<class T>
22 : nsPIDOMWindowOuter*
23 3412 : nsPIDOMWindow<T>::AsOuter()
24 : {
25 3412 : MOZ_ASSERT(IsOuterWindow());
26 3412 : return reinterpret_cast<nsPIDOMWindowOuter*>(this);
27 : }
28 :
29 : template<class T>
30 : const nsPIDOMWindowOuter*
31 0 : nsPIDOMWindow<T>::AsOuter() const
32 : {
33 0 : MOZ_ASSERT(IsOuterWindow());
34 0 : return reinterpret_cast<const nsPIDOMWindowOuter*>(this);
35 : }
36 :
37 : template <class T>
38 : bool
39 0 : nsPIDOMWindow<T>::IsLoading() const
40 : {
41 0 : if (IsOuterWindow()) {
42 0 : auto* win = AsOuter()->GetCurrentInnerWindow();
43 :
44 0 : if (!win) {
45 0 : NS_ERROR("No current inner window available!");
46 :
47 0 : return false;
48 : }
49 :
50 0 : return win->IsLoading();
51 : }
52 :
53 0 : if (!mOuterWindow) {
54 0 : NS_ERROR("IsLoading() called on orphan inner window!");
55 :
56 0 : return false;
57 : }
58 :
59 0 : return !mIsDocumentLoaded;
60 : }
61 :
62 : template <class T>
63 : bool
64 0 : nsPIDOMWindow<T>::IsHandlingResizeEvent() const
65 : {
66 0 : if (IsOuterWindow()) {
67 0 : auto* win = AsOuter()->GetCurrentInnerWindow();
68 :
69 0 : if (!win) {
70 0 : NS_ERROR("No current inner window available!");
71 :
72 0 : return false;
73 : }
74 :
75 0 : return win->IsHandlingResizeEvent();
76 : }
77 :
78 0 : if (!mOuterWindow) {
79 0 : NS_ERROR("IsHandlingResizeEvent() called on orphan inner window!");
80 :
81 0 : return false;
82 : }
83 :
84 0 : return mIsHandlingResizeEvent;
85 : }
86 :
87 : bool
88 588 : nsPIDOMWindowInner::IsCurrentInnerWindow() const
89 : {
90 588 : return mOuterWindow && mOuterWindow->GetCurrentInnerWindow() == AsInner();
91 : }
92 :
93 : bool
94 568 : nsPIDOMWindowInner::HasActiveDocument()
95 : {
96 1136 : return IsCurrentInnerWindow() ||
97 0 : (mOuterWindow &&
98 0 : mOuterWindow->GetCurrentInnerWindow() &&
99 568 : mOuterWindow->GetCurrentInnerWindow()->GetDoc() == mDoc);
100 : }
101 :
102 : template <class T>
103 : nsIDocShell*
104 550 : nsPIDOMWindow<T>::GetDocShell() const
105 : {
106 550 : if (mOuterWindow) {
107 196 : return mOuterWindow->GetDocShell();
108 : }
109 :
110 354 : return mDocShell;
111 : }
112 :
113 : template <class T>
114 : nsIContent*
115 116 : nsPIDOMWindow<T>::GetFocusedNode() const
116 : {
117 116 : if (IsOuterWindow()) {
118 58 : return mInnerWindow ? mInnerWindow->GetFocusedNode() : nullptr;
119 : }
120 :
121 58 : return mFocusedNode;
122 : }
|