author | Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com> |
Tue, 25 Apr 2017 12:22:25 +0200 | |
changeset 354821 | fb4dc8b2f6afe64b321f0cd86326b5f57b5b270a |
parent 354820 | 9fc5b61248399a3ece1b1065cf8a25489388fdaf |
child 354822 | 40ebe09b467823ca4053d856f6261b54a9aaea0f |
push id | 31714 |
push user | kwierso@gmail.com |
push date | Tue, 25 Apr 2017 20:53:09 +0000 |
treeherder | mozilla-central@2c497462f25e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bz |
bugs | 1359092 |
milestone | 55.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/docshell/base/nsDSURIContentListener.cpp +++ b/docshell/base/nsDSURIContentListener.cpp @@ -17,16 +17,17 @@ #include "nsIHttpChannel.h" #include "nsIScriptSecurityManager.h" #include "nsError.h" #include "nsCharSeparatedTokenizer.h" #include "nsIConsoleService.h" #include "nsIScriptError.h" #include "nsDocShellLoadTypes.h" #include "nsIMultiPartChannel.h" +#include "nsContentUtils.h" using namespace mozilla; nsDSURIContentListener::nsDSURIContentListener(nsDocShell* aDocShell) : mDocShell(aDocShell) , mExistingJPEGRequest(nullptr) , mParentContentListener(nullptr) { @@ -443,18 +444,23 @@ nsDSURIContentListener::CheckFrameOption while (tokenizer.hasMoreTokens()) { const nsSubstring& tok = tokenizer.nextToken(); if (!CheckOneFrameOptionsPolicy(httpChannel, tok)) { // cancel the load and display about:blank httpChannel->Cancel(NS_BINDING_ABORTED); if (mDocShell) { nsCOMPtr<nsIWebNavigation> webNav(do_QueryObject(mDocShell)); if (webNav) { + nsCOMPtr<nsILoadInfo> loadInfo = httpChannel->GetLoadInfo(); + nsCOMPtr<nsIPrincipal> triggeringPrincipal = loadInfo + ? loadInfo->TriggeringPrincipal() + : nsContentUtils::GetSystemPrincipal(); webNav->LoadURI(u"about:blank", - 0, nullptr, nullptr, nullptr); + 0, nullptr, nullptr, nullptr, + triggeringPrincipal); } } return false; } } return true; }
--- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -4741,21 +4741,22 @@ nsDocShell::GotoIndex(int32_t aIndex) return rv; } NS_IMETHODIMP nsDocShell::LoadURI(const char16_t* aURI, uint32_t aLoadFlags, nsIURI* aReferringURI, nsIInputStream* aPostStream, - nsIInputStream* aHeaderStream) + nsIInputStream* aHeaderStream, + nsIPrincipal* aTriggeringPrincipal) { return LoadURIWithOptions(aURI, aLoadFlags, aReferringURI, mozilla::net::RP_Unset, aPostStream, - aHeaderStream, nullptr, nullptr); + aHeaderStream, nullptr, aTriggeringPrincipal); } NS_IMETHODIMP nsDocShell::LoadURIWithOptions(const char16_t* aURI, uint32_t aLoadFlags, nsIURI* aReferringURI, uint32_t aReferrerPolicy, nsIInputStream* aPostStream, @@ -7921,21 +7922,26 @@ nsDocShell::EndPageLoad(nsIWebProgress* nsAutoCString newSpec; newURI->GetSpec(newSpec); NS_ConvertUTF8toUTF16 newSpecW(newSpec); // This notification is meant for Firefox Health Report so it // can increment counts from the search engine MaybeNotifyKeywordSearchLoading(keywordProviderName, keywordAsSent); - return LoadURI(newSpecW.get(), // URI string - LOAD_FLAGS_NONE, // Load flags - nullptr, // Referring URI - newPostData, // Post data stream - nullptr); // Headers stream + nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr<nsIPrincipal> triggeringPrincipal = loadInfo + ? loadInfo->TriggeringPrincipal() + : nsContentUtils::GetSystemPrincipal(); + return LoadURI(newSpecW.get(), // URI string + LOAD_FLAGS_NONE, // Load flags + nullptr, // Referring URI + newPostData, // Post data stream + nullptr, // Headers stream + triggeringPrincipal); // TriggeringPrincipal } } } // Well, fixup didn't work :-( // It is time to throw an error dialog box, and be done with it... // Errors to be shown only on top-level frames
--- a/docshell/base/nsDocShellTreeOwner.cpp +++ b/docshell/base/nsDocShellTreeOwner.cpp @@ -4,16 +4,17 @@ * 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/. */ // Local Includes #include "nsDocShellTreeOwner.h" #include "nsWebBrowser.h" // Helper Classes +#include "nsContentUtils.h" #include "nsStyleCoord.h" #include "nsSize.h" #include "mozilla/ReflowInput.h" #include "nsIServiceManager.h" #include "nsComponentManagerUtils.h" #include "nsXPIDLString.h" #include "nsIAtom.h" #include "nsReadableUtils.h" @@ -999,17 +1000,18 @@ nsDocShellTreeOwner::HandleEvent(nsIDOME } free(links); return rv; } } nsAutoString url; if (NS_SUCCEEDED(links[0]->GetUrl(url))) { if (!url.IsEmpty()) { - webnav->LoadURI(url.get(), 0, nullptr, nullptr, nullptr); + webnav->LoadURI(url.get(), 0, nullptr, nullptr, nullptr, + nsContentUtils::GetSystemPrincipal()); } } for (uint32_t i = 0; i < linksCount; i++) { NS_RELEASE(links[i]); } free(links); }
--- a/docshell/base/nsIWebNavigation.idl +++ b/docshell/base/nsIWebNavigation.idl @@ -231,22 +231,28 @@ interface nsIWebNavigation : nsISupports * sequence separating any HTTP headers from the HTTP request body. * This parameter is optional and may be null. * @param aHeaders * If the URI corresponds to a HTTP request, then any HTTP headers * contained in this stream are set on the HTTP request. The HTTP * header stream is formatted as: * ( HEADER "\r\n" )* * This parameter is optional and may be null. + * @param aTriggeringPrincipal + * The principal that initiated the load of aURI. If omitted docShell + * tries to create a codeBasePrincipal from aReferrer if not null. If + * aReferrer is also null docShell peforms a load using the + * SystemPrincipal as the triggeringPrincipal. */ - void loadURI(in wstring aURI, - in unsigned long aLoadFlags, - in nsIURI aReferrer, - in nsIInputStream aPostData, - in nsIInputStream aHeaders); + void loadURI(in wstring aURI, + in unsigned long aLoadFlags, + in nsIURI aReferrer, + in nsIInputStream aPostData, + in nsIInputStream aHeaders, + [optional] in nsIPrincipal aTriggeringPrincipal); /** * Loads a given URI. This will give priority to loading the requested URI * in the object implementing this interface. If it can't be loaded here * however, the URI dispatcher will go through its normal process of content * loading. * * Behaves like loadURI, but allows passing of additional parameters.
--- a/docshell/shistory/nsSHistory.cpp +++ b/docshell/shistory/nsSHistory.cpp @@ -1619,17 +1619,18 @@ nsSHistory::SetOriginAttributesBeforeLoa return NS_OK; } NS_IMETHODIMP nsSHistory::LoadURI(const char16_t* aURI, uint32_t aLoadFlags, nsIURI* aReferringURI, nsIInputStream* aPostStream, - nsIInputStream* aExtraHeaderStream) + nsIInputStream* aExtraHeaderStream, + nsIPrincipal* aTriggeringPrincipal) { return NS_OK; } NS_IMETHODIMP nsSHistory::GotoIndex(int32_t aGlobalIndex) { // We provide abstraction of grouped session history for nsIWebNavigation
--- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -7827,17 +7827,17 @@ nsGlobalWindow::ForwardOuter(ErrorResult void nsGlobalWindow::Forward(ErrorResult& aError) { FORWARD_TO_OUTER_OR_THROW(ForwardOuter, (aError), aError, ); } void -nsGlobalWindow::HomeOuter(ErrorResult& aError) +nsGlobalWindow::HomeOuter(nsIPrincipal& aSubjectPrincipal, ErrorResult& aError) { MOZ_RELEASE_ASSERT(IsOuterWindow()); if (!mDocShell) { return; } nsAdoptingString homeURL = @@ -7875,23 +7875,24 @@ nsGlobalWindow::HomeOuter(ErrorResult& a aError.Throw(NS_ERROR_FAILURE); return; } aError = webNav->LoadURI(homeURL.get(), nsIWebNavigation::LOAD_FLAGS_NONE, nullptr, nullptr, - nullptr); -} - -void -nsGlobalWindow::Home(ErrorResult& aError) -{ - FORWARD_TO_OUTER_OR_THROW(HomeOuter, (aError), aError, ); + nullptr, + &aSubjectPrincipal); +} + +void +nsGlobalWindow::Home(nsIPrincipal& aSubjectPrincipal, ErrorResult& aError) +{ + FORWARD_TO_OUTER_OR_THROW(HomeOuter, (aSubjectPrincipal, aError), aError, ); } void nsGlobalWindow::StopOuter(ErrorResult& aError) { MOZ_RELEASE_ASSERT(IsOuterWindow()); nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell));
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -1178,18 +1178,18 @@ public: bool GetFullScreen() override; void SetFullScreenOuter(bool aFullScreen, mozilla::ErrorResult& aError); void SetFullScreen(bool aFullScreen, mozilla::ErrorResult& aError); nsresult SetFullScreen(bool aFullScreen) override; void BackOuter(mozilla::ErrorResult& aError); void Back(mozilla::ErrorResult& aError); void ForwardOuter(mozilla::ErrorResult& aError); void Forward(mozilla::ErrorResult& aError); - void HomeOuter(mozilla::ErrorResult& aError); - void Home(mozilla::ErrorResult& aError); + void HomeOuter(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); + void Home(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); bool FindOuter(const nsAString& aString, bool aCaseSensitive, bool aBackwards, bool aWrapAround, bool aWholeWord, bool aSearchInFrames, bool aShowDialog, mozilla::ErrorResult& aError); bool Find(const nsAString& aString, bool aCaseSensitive, bool aBackwards, bool aWrapAround, bool aWholeWord, bool aSearchInFrames, bool aShowDialog, mozilla::ErrorResult& aError); uint64_t GetMozPaintCountOuter(); uint64_t GetMozPaintCount(mozilla::ErrorResult& aError);
--- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -1166,17 +1166,17 @@ TabChild::RecvLoadURL(const nsCString& a ApplyShowInfo(aInfo); } nsresult rv = WebNavigation()->LoadURI(NS_ConvertUTF8toUTF16(aURI).get(), nsIWebNavigation::LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP | nsIWebNavigation::LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL, - nullptr, nullptr, nullptr); + nullptr, nullptr, nullptr, nsContentUtils::GetSystemPrincipal()); if (NS_FAILED(rv)) { NS_WARNING("WebNavigation()->LoadURI failed. Eating exception, what else can I do?"); } #ifdef MOZ_CRASHREPORTER CrashReporter::AnnotateCrashReport(NS_LITERAL_CSTRING("URL"), aURI); #endif
--- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl @@ -273,21 +273,21 @@ partial interface Window { /* The maximum offset that the window can be scrolled to (i.e., the document width/height minus the scrollport width/height) */ [ChromeOnly, Throws] readonly attribute long scrollMinX; [ChromeOnly, Throws] readonly attribute long scrollMinY; [Replaceable, Throws] readonly attribute long scrollMaxX; [Replaceable, Throws] readonly attribute long scrollMaxY; - [Throws, UnsafeInPrerendering] attribute boolean fullScreen; + [Throws, UnsafeInPrerendering] attribute boolean fullScreen; - [Throws, ChromeOnly, UnsafeInPrerendering] void back(); - [Throws, ChromeOnly, UnsafeInPrerendering] void forward(); - [Throws, ChromeOnly, UnsafeInPrerendering] void home(); + [Throws, ChromeOnly, UnsafeInPrerendering] void back(); + [Throws, ChromeOnly, UnsafeInPrerendering] void forward(); + [Throws, ChromeOnly, UnsafeInPrerendering, NeedsSubjectPrincipal] void home(); // XXX Should this be in nsIDOMChromeWindow? void updateCommands(DOMString action, optional Selection? sel = null, optional short reason = 0); /* Find in page. * @param str: the search pattern
--- a/editor/composer/nsEditingSession.cpp +++ b/editor/composer/nsEditingSession.cpp @@ -7,16 +7,17 @@ #include <string.h> // for nullptr, strcmp #include "imgIContainer.h" // for imgIContainer, etc #include "mozilla/FlushType.h" // for FlushType::Frames #include "mozilla/mozalloc.h" // for operator new #include "nsAString.h" #include "nsComponentManagerUtils.h" // for do_CreateInstance #include "nsComposerCommandsUpdater.h" // for nsComposerCommandsUpdater +#include "nsContentUtils.h" #include "nsDebug.h" // for NS_ENSURE_SUCCESS, etc #include "nsEditingSession.h" #include "nsError.h" // for NS_ERROR_FAILURE, NS_OK, etc #include "nsIChannel.h" // for nsIChannel #include "nsICommandManager.h" // for nsICommandManager #include "nsIContentViewer.h" // for nsIContentViewer #include "nsIController.h" // for nsIController #include "nsIControllerContext.h" // for nsIControllerContext @@ -987,17 +988,18 @@ nsEditingSession::EndDocumentLoad(nsIWeb void nsEditingSession::TimerCallback(nsITimer* aTimer, void* aClosure) { nsCOMPtr<nsIDocShell> docShell = do_QueryReferent(static_cast<nsIWeakReference*> (aClosure)); if (docShell) { nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(docShell)); if (webNav) { - webNav->LoadURI(u"about:blank", 0, nullptr, nullptr, nullptr); + webNav->LoadURI(u"about:blank", 0, nullptr, nullptr, nullptr, + nsContentUtils::GetSystemPrincipal()); } } } /*--------------------------------------------------------------------------- StartPageLoad
--- a/toolkit/components/browser/nsWebBrowser.cpp +++ b/toolkit/components/browser/nsWebBrowser.cpp @@ -668,22 +668,24 @@ nsWebBrowser::SetOriginAttributesBeforeL { return mDocShellAsNav->SetOriginAttributesBeforeLoading(aOriginAttributes); } NS_IMETHODIMP nsWebBrowser::LoadURI(const char16_t* aURI, uint32_t aLoadFlags, nsIURI* aReferringURI, nsIInputStream* aPostDataStream, - nsIInputStream* aExtraHeaderStream) + nsIInputStream* aExtraHeaderStream, + nsIPrincipal* aTriggeringPrincipal) { NS_ENSURE_STATE(mDocShell); - return mDocShellAsNav->LoadURI( - aURI, aLoadFlags, aReferringURI, aPostDataStream, aExtraHeaderStream); + return mDocShellAsNav->LoadURI(aURI, aLoadFlags, aReferringURI, + aPostDataStream, aExtraHeaderStream, + aTriggeringPrincipal); } NS_IMETHODIMP nsWebBrowser::Reload(uint32_t aReloadFlags) { NS_ENSURE_STATE(mDocShell); return mDocShellAsNav->Reload(aReloadFlags);
--- a/xpfe/appshell/nsWebShellWindow.cpp +++ b/xpfe/appshell/nsWebShellWindow.cpp @@ -252,17 +252,18 @@ nsresult nsWebShellWindow::Initialize(ns NS_ConvertUTF8toUTF16 urlString(tmpStr); nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(mDocShell)); NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE); rv = webNav->LoadURI(urlString.get(), nsIWebNavigation::LOAD_FLAGS_NONE, nullptr, nullptr, - nullptr); + nullptr, + nsContentUtils::GetSystemPrincipal()); NS_ENSURE_SUCCESS(rv, rv); } return rv; } nsIPresShell* nsWebShellWindow::GetPresShell()