author | Boris Zbarsky <bzbarsky@mit.edu> |
Wed, 21 Mar 2018 22:43:16 -0400 | |
changeset 409422 | d53bbd9451038541d7341704739b10a0d1381db3 |
parent 409421 | 1695972ec05715543b778c1cdcc11585e2741e4f |
child 409423 | d5a965739c17d562d1ea79b967f329a59bc98938 |
push id | 33687 |
push user | apavel@mozilla.com |
push date | Thu, 22 Mar 2018 09:31:48 +0000 |
treeherder | mozilla-central@7771df14ea18 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mystor |
bugs | 1444143 |
milestone | 61.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/nsFrameLoader.cpp +++ b/dom/base/nsFrameLoader.cpp @@ -231,28 +231,21 @@ nsFrameLoader::Create(Element* aOwner, n ((!doc->IsLoadedAsData() && aOwner->IsInComposedDoc()) || doc->IsStaticDocument()), nullptr); return new nsFrameLoader(aOwner, aOpener, aNetworkCreated, aJSPluginId); } void -nsFrameLoader::LoadFrame(bool aOriginalSrc, ErrorResult& aRv) -{ - nsresult rv = LoadFrame(aOriginalSrc); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - } -} - -NS_IMETHODIMP nsFrameLoader::LoadFrame(bool aOriginalSrc) { - NS_ENSURE_TRUE(mOwnerContent, NS_ERROR_NOT_INITIALIZED); + if (NS_WARN_IF(!mOwnerContent)) { + return; + } nsAutoString src; nsCOMPtr<nsIPrincipal> principal; bool isSrcdoc = mOwnerContent->IsHTMLElement(nsGkAtoms::iframe) && mOwnerContent->HasAttr(kNameSpaceID_None, nsGkAtoms::srcdoc); if (isSrcdoc) { src.AssignLiteral("about:srcdoc"); @@ -264,30 +257,30 @@ nsFrameLoader::LoadFrame(bool aOriginalS if (src.IsEmpty()) { // If the frame is a XUL element and has the attribute 'nodefaultsrc=true' // then we will not use 'about:blank' as fallback but return early without // starting a load if no 'src' attribute is given (or it's empty). if (mOwnerContent->IsXULElement() && mOwnerContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::nodefaultsrc, nsGkAtoms::_true, eCaseMatters)) { - return NS_OK; + return; } src.AssignLiteral("about:blank"); } } nsIDocument* doc = mOwnerContent->OwnerDoc(); if (doc->IsStaticDocument()) { - return NS_OK; + return; } if (doc->IsLoadedAsInteractiveData()) { // XBL bindings doc shouldn't load sub-documents. - return NS_OK; + return; } nsCOMPtr<nsIURI> base_uri = mOwnerContent->GetBaseURI(); auto encoding = doc->GetDocumentCharacterSet(); nsCOMPtr<nsIURI> uri; nsresult rv = NS_NewURI(getter_AddRefs(uri), src, encoding, base_uri); @@ -298,21 +291,17 @@ nsFrameLoader::LoadFrame(bool aOriginalS } if (NS_SUCCEEDED(rv)) { rv = LoadURI(uri, principal, aOriginalSrc); } if (NS_FAILED(rv)) { FireErrorEvent(); - - return rv; } - - return NS_OK; } void nsFrameLoader::FireErrorEvent() { if (!mOwnerContent) { return; }
--- a/dom/base/nsFrameLoader.h +++ b/dom/base/nsFrameLoader.h @@ -111,17 +111,21 @@ public: // WebIDL methods nsIDocShell* GetDocShell(mozilla::ErrorResult& aRv); already_AddRefed<nsITabParent> GetTabParent(); already_AddRefed<nsILoadContext> LoadContext(); - void LoadFrame(bool aOriginalSrc, mozilla::ErrorResult& aRv); + /** + * Start loading the frame. This method figures out what to load + * from the owner content in the frame loader. + */ + void LoadFrame(bool aOriginalSrc); void LoadURI(nsIURI* aURI, bool aOriginalSrc, mozilla::ErrorResult& aRv); /** * Triggers a load of the given URI. * * @param aURI The URI to load. * @param aTriggeringPrincipal The triggering principal for the load. May be
--- a/dom/base/nsIFrameLoader.idl +++ b/dom/base/nsIFrameLoader.idl @@ -16,22 +16,16 @@ interface nsITabParent; interface nsILoadContext; interface nsIPrintSettings; interface nsIWebProgressListener; [builtinclass, uuid(1645af04-1bc7-4363-8f2c-eb9679220ab1)] interface nsIFrameLoader : nsISupports { /** - * Start loading the frame. This method figures out what to load - * from the owner content in the frame loader. - */ - void loadFrame(in boolean originalSrc); - - /** * Loads the specified URI in this frame. Behaves identically to loadFrame, * except that this method allows specifying the URI to load. */ void loadURI(in nsIURI aURI, in boolean originalSrc); }; %{C++ class nsFrameLoader;
--- a/dom/html/nsGenericHTMLFrameElement.cpp +++ b/dom/html/nsGenericHTMLFrameElement.cpp @@ -227,35 +227,28 @@ nsGenericHTMLFrameElement::SwapFrameLoad if (!loader || !otherLoader) { rv.Throw(NS_ERROR_NOT_IMPLEMENTED); return; } rv = loader->SwapWithOtherLoader(otherLoader, this, aOtherLoaderOwner); } -nsresult +void nsGenericHTMLFrameElement::LoadSrc() { EnsureFrameLoader(); if (!mFrameLoader) { - return NS_OK; + return; } bool origSrc = !mSrcLoadHappened; mSrcLoadHappened = true; - nsresult rv = mFrameLoader->LoadFrame(origSrc); -#ifdef DEBUG - if (NS_FAILED(rv)) { - NS_WARNING("failed to load URL"); - } -#endif - - return rv; + mFrameLoader->LoadFrame(origSrc); } nsresult nsGenericHTMLFrameElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent, nsIContent* aBindingParent, bool aCompileEventHandlers) {
--- a/dom/html/nsGenericHTMLFrameElement.h +++ b/dom/html/nsGenericHTMLFrameElement.h @@ -101,17 +101,17 @@ public: } protected: virtual ~nsGenericHTMLFrameElement(); // This doesn't really ensure a frame loader in all cases, only when // it makes sense. void EnsureFrameLoader(); - nsresult LoadSrc(); + void LoadSrc(); nsIDocument* GetContentDocument(nsIPrincipal& aSubjectPrincipal); nsresult GetContentDocument(nsIDOMDocument** aContentDocument); already_AddRefed<nsPIDOMWindowOuter> GetContentWindow(); virtual nsresult AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName, const nsAttrValue* aValue, const nsAttrValue* aOldValue, nsIPrincipal* aSubjectPrincipal,
--- a/dom/webidl/FrameLoader.webidl +++ b/dom/webidl/FrameLoader.webidl @@ -29,23 +29,16 @@ interface FrameLoader { /** * Get an nsILoadContext for the top-level docshell. For remote * frames, a shim is returned that contains private browsing and app * information. */ readonly attribute LoadContext loadContext; /** - * Start loading the frame. This method figures out what to load - * from the owner content in the frame loader. - */ - [Throws] - void loadFrame(optional boolean originalSrc = false); - - /** * Loads the specified URI in this frame. Behaves identically to loadFrame, * except that this method allows specifying the URI to load. */ [Throws] void loadURI(URI aURI, optional boolean originalSrc = false); /** * Adds a blocking promise for the current cross process navigation.
--- a/dom/xul/nsXULElement.cpp +++ b/dom/xul/nsXULElement.cpp @@ -1492,30 +1492,30 @@ nsXULElement::GetControllers(ErrorResult already_AddRefed<BoxObject> nsXULElement::GetBoxObject(ErrorResult& rv) { // XXX sXBL/XBL2 issue! Owner or current document? return OwnerDoc()->GetBoxObjectFor(this, rv); } -nsresult +void nsXULElement::LoadSrc() { // Allow frame loader only on objects for which a container box object // can be obtained. if (!IsAnyOfXULElements(nsGkAtoms::browser, nsGkAtoms::editor, nsGkAtoms::iframe)) { - return NS_OK; + return; } if (!IsInUncomposedDoc() || !OwnerDoc()->GetRootElement() || OwnerDoc()->GetRootElement()-> NodeInfo()->Equals(nsGkAtoms::overlay, kNameSpaceID_XUL)) { - return NS_OK; + return; } RefPtr<nsFrameLoader> frameLoader = GetFrameLoader(); if (!frameLoader) { // Check if we have an opener we need to be setting nsExtendedDOMSlots* slots = ExtendedDOMSlots(); nsCOMPtr<nsPIDOMWindowOuter> opener = do_QueryInterface(slots->mFrameLoaderOrOpener); if (!opener) { // If we are a primary xul-browser, we want to take the opener property! @@ -1527,24 +1527,26 @@ nsXULElement::LoadSrc() } // false as the last parameter so that xul:iframe/browser/editor // session history handling works like dynamic html:iframes. // Usually xul elements are used in chrome, which doesn't have // session history at all. frameLoader = nsFrameLoader::Create(this, opener, false); slots->mFrameLoaderOrOpener = static_cast<nsIFrameLoader*>(frameLoader); - NS_ENSURE_TRUE(frameLoader, NS_OK); + if (NS_WARN_IF(!frameLoader)) { + return; + } (new AsyncEventDispatcher(this, NS_LITERAL_STRING("XULFrameLoaderCreated"), /* aBubbles */ true))->RunDOMEventWhenSafe(); } - return frameLoader->LoadFrame(false); + frameLoader->LoadFrame(false); } nsresult nsXULElement::GetFrameLoaderXPCOM(nsIFrameLoader **aFrameLoader) { *aFrameLoader = GetFrameLoader().take(); return NS_OK; }
--- a/dom/xul/nsXULElement.h +++ b/dom/xul/nsXULElement.h @@ -690,17 +690,17 @@ protected: static nsresult ExecuteJSCode(nsIDOMElement* anElement, mozilla::WidgetEvent* aEvent); // Helper routine that crawls a parent chain looking for a tree element. NS_IMETHOD GetParentTree(nsIDOMXULMultiSelectControlElement** aTreeElement); nsresult AddPopupListener(nsAtom* aName); - nsresult LoadSrc(); + void LoadSrc(); /** * The nearest enclosing content node with a binding * that created us. [Weak] */ nsIContent* mBindingParent; /**