Bug 1345433 - Bring back assertion that history entries need a valid triggeringPrincipal
MozReview-Commit-ID: 9GfGIxkqfhM
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -13023,18 +13023,20 @@ nsDocShell::LoadHistoryEntry(nsISHEntry*
if (isSrcdoc) {
aEntry->GetSrcdocData(srcdoc);
aEntry->GetBaseURI(getter_AddRefs(baseURI));
flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
} else {
srcdoc = VoidString();
}
+ // If there is no valid triggeringPrincipal, we deny the load
+ MOZ_ASSERT(triggeringPrincipal, "need a valid triggeringPrincipal to load from history");
if (!triggeringPrincipal) {
- triggeringPrincipal = nsContentUtils::GetSystemPrincipal();
+ return NS_ERROR_FAILURE;
}
// Passing nullptr as aSourceDocShell gives the same behaviour as before
// aSourceDocShell was introduced. According to spec we should be passing
// the source browsing context that was used when the history entry was
// first created. bug 947716 has been created to address this issue.
Maybe<nsCOMPtr<nsIURI>> emplacedResultPrincipalURI;
emplacedResultPrincipalURI.emplace(Move(resultPrincipalURI));
--- a/docshell/shistory/nsSHEntry.cpp
+++ b/docshell/shistory/nsSHEntry.cpp
@@ -545,16 +545,21 @@ nsSHEntry::GetTriggeringPrincipal(nsIPri
{
NS_IF_ADDREF(*aTriggeringPrincipal = mShared->mTriggeringPrincipal);
return NS_OK;
}
NS_IMETHODIMP
nsSHEntry::SetTriggeringPrincipal(nsIPrincipal* aTriggeringPrincipal)
{
+ MOZ_ASSERT(aTriggeringPrincipal, "need a valid triggeringPrincipal");
+ if (!aTriggeringPrincipal) {
+ return NS_ERROR_FAILURE;
+ }
+
mShared->mTriggeringPrincipal = aTriggeringPrincipal;
return NS_OK;
}
NS_IMETHODIMP
nsSHEntry::GetPrincipalToInherit(nsIPrincipal** aPrincipalToInherit)
{
NS_IF_ADDREF(*aPrincipalToInherit = mShared->mPrincipalToInherit);
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -110,16 +110,18 @@ XPCOMUtils.defineLazyModuleGetter(this,
XPCOMUtils.defineLazyModuleGetter(this, "WebsiteMetadata", "resource://gre/modules/WebsiteMetadata.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch", "resource://gre/modules/TelemetryStopwatch.jsm");
XPCOMUtils.defineLazyServiceGetter(this, "FontEnumerator",
"@mozilla.org/gfx/fontenumerator;1",
"nsIFontEnumerator");
+XPCOMUtils.defineLazyModuleGetter(this, "Utils", "resource://gre/modules/sessionstore/Utils.jsm");
+
var GlobalEventDispatcher = EventDispatcher.instance;
var WindowEventDispatcher = EventDispatcher.for(window);
var lazilyLoadedBrowserScripts = [
["MasterPassword", "chrome://browser/content/MasterPassword.js"],
["OfflineApps", "chrome://browser/content/OfflineApps.js"],
["Linkifier", "chrome://browser/content/Linkify.js"],
["CastingApps", "chrome://browser/content/CastingApps.js"],
@@ -3684,17 +3686,18 @@ Tab.prototype = {
Services.obs.addObserver(this, "before-first-paint");
Services.obs.addObserver(this, "media-playback");
// Always initialise new tabs with basic session store data to avoid
// problems with functions that always expect it to be present
this.browser.__SS_data = {
entries: [{
url: uri,
- title: truncate(title, MAX_TITLE_LENGTH)
+ title: truncate(title, MAX_TITLE_LENGTH),
+ triggeringPrincipal_base64: Utils.SERIALIZED_SYSTEMPRINCIPAL
}],
index: 1,
desktopMode: this.desktopMode,
isPrivate: isPrivate,
tabId: this.id,
parentId: this.parentId
};