From 00db6e6eedf63d972a91f42f08b562ea7fc1f1dd Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Wed, 20 Apr 2016 18:04:29 -0400 Subject: [PATCH] Bug 1265072 part 1. Add GetWindowIfCurrent and GetDocumentIfCurrent helpers to DOMEventTargetHelper. r=smaug --- dom/events/DOMEventTargetHelper.cpp | 21 +++++++++++++++++++++ dom/events/DOMEventTargetHelper.h | 9 ++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/dom/events/DOMEventTargetHelper.cpp b/dom/events/DOMEventTargetHelper.cpp index 76cdb0bb632e..27bbc6cdd752 100644 --- a/dom/events/DOMEventTargetHelper.cpp +++ b/dom/events/DOMEventTargetHelper.cpp @@ -160,6 +160,27 @@ DOMEventTargetHelper::DisconnectFromOwner() } } +nsPIDOMWindowInner* +DOMEventTargetHelper::GetWindowIfCurrent() const +{ + if (NS_FAILED(CheckInnerWindowCorrectness())) { + return nullptr; + } + + return GetOwner(); +} + +nsIDocument* +DOMEventTargetHelper::GetDocumentIfCurrent() const +{ + nsPIDOMWindowInner* win = GetWindowIfCurrent(); + if (!win) { + return nullptr; + } + + return win->GetDoc(); +} + NS_IMETHODIMP DOMEventTargetHelper::RemoveEventListener(const nsAString& aType, nsIDOMEventListener* aListener, diff --git a/dom/events/DOMEventTargetHelper.h b/dom/events/DOMEventTargetHelper.h index 0c802a020b03..4b3c0b763171 100644 --- a/dom/events/DOMEventTargetHelper.h +++ b/dom/events/DOMEventTargetHelper.h @@ -20,6 +20,7 @@ #include "mozilla/dom/EventTarget.h" struct JSCompartment; +class nsIDocument; namespace mozilla { @@ -126,7 +127,7 @@ public: return nsPIDOMWindowOuter::GetFromCurrentInner(GetOwner()); } - nsresult CheckInnerWindowCorrectness() + nsresult CheckInnerWindowCorrectness() const { NS_ENSURE_STATE(!mHasOrHasHadOwnerWindow || mOwnerWindow); if (mOwnerWindow && !mOwnerWindow->IsCurrentInnerWindow()) { @@ -136,6 +137,12 @@ public: } nsPIDOMWindowInner* GetOwner() const { return mOwnerWindow; } + // Like GetOwner, but only returns non-null if the window being returned is + // current (in the "current document" sense of the HTML spec). + nsPIDOMWindowInner* GetWindowIfCurrent() const; + // Returns the document associated with this event target, if that document is + // the current document of its browsing context. Will return null otherwise. + nsIDocument* GetDocumentIfCurrent() const; void BindToOwner(nsIGlobalObject* aOwner); void BindToOwner(nsPIDOMWindowInner* aOwner); void BindToOwner(DOMEventTargetHelper* aOther);