/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ template nsPIDOMWindowInner* nsPIDOMWindow::AsInner() { MOZ_ASSERT(IsInnerWindow()); return reinterpret_cast(this); } template const nsPIDOMWindowInner* nsPIDOMWindow::AsInner() const { MOZ_ASSERT(IsInnerWindow()); return reinterpret_cast(this); } template nsPIDOMWindowOuter* nsPIDOMWindow::AsOuter() { MOZ_ASSERT(IsOuterWindow()); return reinterpret_cast(this); } template const nsPIDOMWindowOuter* nsPIDOMWindow::AsOuter() const { MOZ_ASSERT(IsOuterWindow()); return reinterpret_cast(this); } template bool nsPIDOMWindow::IsLoadingOrRunningTimeout() const { if (IsOuterWindow()) { return AsOuter()->GetCurrentInnerWindow()->IsLoadingOrRunningTimeout(); } return !mIsDocumentLoaded || mRunningTimeout; } template bool nsPIDOMWindow::IsLoading() const { if (IsOuterWindow()) { auto* win = AsOuter()->GetCurrentInnerWindow(); if (!win) { NS_ERROR("No current inner window available!"); return false; } return win->IsLoading(); } if (!mOuterWindow) { NS_ERROR("IsLoading() called on orphan inner window!"); return false; } return !mIsDocumentLoaded; } template bool nsPIDOMWindow::IsHandlingResizeEvent() const { if (IsOuterWindow()) { auto* win = AsOuter()->GetCurrentInnerWindow(); if (!win) { NS_ERROR("No current inner window available!"); return false; } return win->IsHandlingResizeEvent(); } if (!mOuterWindow) { NS_ERROR("IsHandlingResizeEvent() called on orphan inner window!"); return false; } return mIsHandlingResizeEvent; } bool nsPIDOMWindowInner::IsCurrentInnerWindow() const { return mOuterWindow && mOuterWindow->GetCurrentInnerWindow() == AsInner(); } bool nsPIDOMWindowInner::HasActiveDocument() { return IsCurrentInnerWindow() || (mOuterWindow && mOuterWindow->GetCurrentInnerWindow() && mOuterWindow->GetCurrentInnerWindow()->GetDoc() == mDoc); } template nsIDocShell* nsPIDOMWindow::GetDocShell() const { if (mOuterWindow) { return mOuterWindow->GetDocShell(); } return mDocShell; } template nsIContent* nsPIDOMWindow::GetFocusedNode() const { if (IsOuterWindow()) { return mInnerWindow ? mInnerWindow->GetFocusedNode() : nullptr; } return mFocusedNode; }