Bug 1598516 - Enable DocumentChannel for all protocols, except for list of known issues. r=kmag

Differential Revision: https://phabricator.services.mozilla.com/D54246
This commit is contained in:
Matt Woodrow
2019-12-03 20:43:17 +00:00
parent 2bf5279b18
commit 8fc22f4047

View File

@@ -9512,9 +9512,11 @@ static bool IsConsideredSameOriginForUIR(nsIPrincipal* aTriggeringPrincipal,
} }
static bool SchemeUsesDocChannel(nsIURI* aURI) { static bool SchemeUsesDocChannel(nsIURI* aURI) {
return SchemeIsHTTP(aURI) || SchemeIsHTTPS(aURI) || aURI->SchemeIs("moz") || return !SchemeIsJavascript(aURI) && !SchemeIsViewSource(aURI) &&
SchemeIsData(aURI) || SchemeIsFile(aURI) || SchemeIsFTP(aURI) || !NS_IsAboutBlank(aURI) &&
SchemeIsBlob(aURI); !aURI->GetSpecOrDefault().EqualsLiteral("about:printpreview") &&
!aURI->GetSpecOrDefault().EqualsLiteral("about:privatebrowsing") &&
!aURI->GetSpecOrDefault().EqualsLiteral("about:crashcontent");
} }
/* static */ bool nsDocShell::CreateChannelForLoadState( /* static */ bool nsDocShell::CreateChannelForLoadState(
@@ -9523,8 +9525,16 @@ static bool SchemeUsesDocChannel(nsIURI* aURI) {
const nsString* aInitiatorType, nsLoadFlags aLoadFlags, uint32_t aLoadType, const nsString* aInitiatorType, nsLoadFlags aLoadFlags, uint32_t aLoadType,
uint32_t aCacheKey, bool aIsActive, bool aIsTopLevelDoc, uint32_t aCacheKey, bool aIsActive, bool aIsTopLevelDoc,
bool aHasNonEmptySandboxingFlags, nsresult& aRv, nsIChannel** aChannel) { bool aHasNonEmptySandboxingFlags, nsresult& aRv, nsIChannel** aChannel) {
nsAutoString srcdoc;
bool isSrcdoc = aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_IS_SRCDOC);
if (isSrcdoc) {
srcdoc = aLoadState->SrcdocData();
} else {
srcdoc = VoidString();
}
if (StaticPrefs::browser_tabs_documentchannel() && XRE_IsContentProcess() && if (StaticPrefs::browser_tabs_documentchannel() && XRE_IsContentProcess() &&
SchemeUsesDocChannel(aLoadState->URI())) { SchemeUsesDocChannel(aLoadState->URI()) && !isSrcdoc) {
RefPtr<DocumentChannelChild> child = new DocumentChannelChild( RefPtr<DocumentChannelChild> child = new DocumentChannelChild(
aLoadState, aLoadInfo, aInitiatorType, aLoadFlags, aLoadType, aCacheKey, aLoadState, aLoadInfo, aInitiatorType, aLoadFlags, aLoadType, aCacheKey,
aIsActive, aIsTopLevelDoc, aHasNonEmptySandboxingFlags); aIsActive, aIsTopLevelDoc, aHasNonEmptySandboxingFlags);
@@ -9535,14 +9545,6 @@ static bool SchemeUsesDocChannel(nsIURI* aURI) {
} }
nsCOMPtr<nsIChannel> channel; nsCOMPtr<nsIChannel> channel;
nsAutoString srcdoc;
bool isSrcdoc = aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_IS_SRCDOC);
if (isSrcdoc) {
srcdoc = aLoadState->SrcdocData();
} else {
srcdoc = VoidString();
}
nsIURI* baseURI = aLoadState->BaseURI(); nsIURI* baseURI = aLoadState->BaseURI();
if (!isSrcdoc) { if (!isSrcdoc) {
aRv = NS_NewChannelInternal(getter_AddRefs(channel), aLoadState->URI(), aRv = NS_NewChannelInternal(getter_AddRefs(channel), aLoadState->URI(),