diff --git a/content/html/content/src/HTMLFrameElement.cpp b/content/html/content/src/HTMLFrameElement.cpp index 6a7262fb6967..ba8e463bd40d 100644 --- a/content/html/content/src/HTMLFrameElement.cpp +++ b/content/html/content/src/HTMLFrameElement.cpp @@ -116,33 +116,6 @@ HTMLFrameElement::GetAttributeMappingFunction() const return &MapAttributesIntoRule; } -already_AddRefed -HTMLFrameElement::GetContentDocument(ErrorResult& aRv) -{ - nsCOMPtr doc; - nsresult rv = nsGenericHTMLFrameElement::GetContentDocument(getter_AddRefs(doc)); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - return nullptr; - } - - nsCOMPtr ret = do_QueryInterface(doc); - return ret.forget(); -} - -already_AddRefed -HTMLFrameElement::GetContentWindow(ErrorResult& aRv) -{ - nsCOMPtr win; - nsresult rv = nsGenericHTMLFrameElement::GetContentWindow(getter_AddRefs(win)); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - return nullptr; - } - - return win.forget(); -} - JSObject* HTMLFrameElement::WrapNode(JSContext* aCx, JSObject* aScope, bool* aTriedToWrap) diff --git a/content/html/content/src/HTMLFrameElement.h b/content/html/content/src/HTMLFrameElement.h index 0391a410d3c3..c6ff2f8002cc 100644 --- a/content/html/content/src/HTMLFrameElement.h +++ b/content/html/content/src/HTMLFrameElement.h @@ -102,9 +102,8 @@ public: SetAttrHelper(nsGkAtoms::src, aSrc); } - already_AddRefed GetContentDocument(ErrorResult& aRv); - - already_AddRefed GetContentWindow(ErrorResult& aRv); + using nsGenericHTMLFrameElement::GetContentDocument; + using nsGenericHTMLFrameElement::GetContentWindow; protected: virtual JSObject* WrapNode(JSContext* aCx, JSObject* aScope, diff --git a/content/html/content/src/nsGenericHTMLFrameElement.cpp b/content/html/content/src/nsGenericHTMLFrameElement.cpp index c3f29a628205..ad5f8eb121e2 100644 --- a/content/html/content/src/nsGenericHTMLFrameElement.cpp +++ b/content/html/content/src/nsGenericHTMLFrameElement.cpp @@ -51,69 +51,71 @@ nsresult nsGenericHTMLFrameElement::GetContentDocument(nsIDOMDocument** aContentDocument) { NS_PRECONDITION(aContentDocument, "Null out param"); - *aContentDocument = nullptr; + nsIDocument* document = GetContentDocument(); + nsIDOMDocument* domDocument = + static_cast(document->AsDOMNode()); + NS_ADDREF(*aContentDocument = domDocument); + return NS_OK; +} - nsCOMPtr win; - GetContentWindow(getter_AddRefs(win)); - - if (!win) { - return NS_OK; - } - - return win->GetDocument(aContentDocument); +nsIDocument* +nsGenericHTMLFrameElement::GetContentDocument() +{ + nsCOMPtr win = GetContentWindow(); + return win ? win->GetDoc() : nullptr; } nsresult nsGenericHTMLFrameElement::GetContentWindow(nsIDOMWindow** aContentWindow) { NS_PRECONDITION(aContentWindow, "Null out param"); - *aContentWindow = nullptr; + nsCOMPtr window = GetContentWindow(); + window.forget(aContentWindow); + return NS_OK; +} - nsresult rv = EnsureFrameLoader(); - NS_ENSURE_SUCCESS(rv, rv); +already_AddRefed +nsGenericHTMLFrameElement::GetContentWindow() +{ + EnsureFrameLoader(); if (!mFrameLoader) { - return NS_OK; + return nullptr; } bool depthTooGreat = false; mFrameLoader->GetDepthTooGreat(&depthTooGreat); if (depthTooGreat) { // Claim to have no contentWindow - return NS_OK; + return nullptr; } nsCOMPtr doc_shell; mFrameLoader->GetDocShell(getter_AddRefs(doc_shell)); - nsCOMPtr win(do_GetInterface(doc_shell)); + nsCOMPtr win = do_GetInterface(doc_shell); if (!win) { - return NS_OK; + return nullptr; } NS_ASSERTION(win->IsOuterWindow(), "Uh, this window should always be an outer window!"); - return CallQueryInterface(win, aContentWindow); + return win.forget(); } -nsresult +void nsGenericHTMLFrameElement::EnsureFrameLoader() { if (!GetParent() || !IsInDoc() || mFrameLoader || mFrameLoaderCreationDisallowed) { // If frame loader is there, we just keep it around, cached - return NS_OK; + return; } + // Strangely enough, this method doesn't actually ensure that the + // frameloader exists. It's more of a best-effort kind of thing. mFrameLoader = nsFrameLoader::Create(this, mNetworkCreated); - if (!mFrameLoader) { - // Strangely enough, this method doesn't actually ensure that the - // frameloader exists. It's more of a best-effort kind of thing. - return NS_OK; - } - - return NS_OK; } nsresult @@ -150,14 +152,13 @@ nsGenericHTMLFrameElement::SwapFrameLoaders(nsIFrameLoaderOwner* aOtherOwner) nsresult nsGenericHTMLFrameElement::LoadSrc() { - nsresult rv = EnsureFrameLoader(); - NS_ENSURE_SUCCESS(rv, rv); + EnsureFrameLoader(); if (!mFrameLoader) { return NS_OK; } - rv = mFrameLoader->LoadFrame(); + nsresult rv = mFrameLoader->LoadFrame(); #ifdef DEBUG if (NS_FAILED(rv)) { NS_WARNING("failed to load URL"); diff --git a/content/html/content/src/nsGenericHTMLFrameElement.h b/content/html/content/src/nsGenericHTMLFrameElement.h index 78b6f19ab2f6..cef2f8254eee 100644 --- a/content/html/content/src/nsGenericHTMLFrameElement.h +++ b/content/html/content/src/nsGenericHTMLFrameElement.h @@ -90,9 +90,11 @@ protected: // This doesn't really ensure a frame loade in all cases, only when // it makes sense. - nsresult EnsureFrameLoader(); + void EnsureFrameLoader(); nsresult LoadSrc(); + nsIDocument* GetContentDocument(); nsresult GetContentDocument(nsIDOMDocument** aContentDocument); + already_AddRefed GetContentWindow(); nsresult GetContentWindow(nsIDOMWindow** aContentWindow); nsRefPtr mFrameLoader; diff --git a/dom/webidl/HTMLFrameElement.webidl b/dom/webidl/HTMLFrameElement.webidl index a2b369c152e0..727baf8662d8 100644 --- a/dom/webidl/HTMLFrameElement.webidl +++ b/dom/webidl/HTMLFrameElement.webidl @@ -24,9 +24,7 @@ interface HTMLFrameElement : HTMLElement { attribute DOMString longDesc; [SetterThrows] attribute boolean noResize; - [GetterThrows] readonly attribute Document? contentDocument; - [GetterThrows] readonly attribute WindowProxy? contentWindow; [TreatNullAs=EmptyString, SetterThrows] attribute DOMString marginHeight;