diff --git a/dom/base/test/referrer_helper.js b/dom/base/test/referrer_helper.js index 5615b038ddba..14836995fe2b 100644 --- a/dom/base/test/referrer_helper.js +++ b/dom/base/test/referrer_helper.js @@ -76,6 +76,10 @@ var tests = (function*() { var iframe = document.getElementById("testframe"); for (var j = 0; j < testCases.length; j++) { + if (testCases[j].PREFS) { + yield SpecialPowers.pushPrefEnv({"set": testCases[j].PREFS}, advance); + } + var actions = testCases[j].ACTION; var tests = testCases[j].TESTS; for (var k = 0; k < actions.length; k++) { diff --git a/dom/base/test/referrer_testserver.sjs b/dom/base/test/referrer_testserver.sjs index 484680a15740..6fcc86f2ecc5 100644 --- a/dom/base/test/referrer_testserver.sjs +++ b/dom/base/test/referrer_testserver.sjs @@ -191,6 +191,25 @@ function createLinkPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttribut `; } +function createFetchUserControlRPTestCase(aName, aSchemeFrom, aSchemeTo) { + var srcUrl = createTestUrl("", "test", aName, "iframe", aSchemeFrom, aSchemeTo); + + return ` + + + + Test user control referrer policies + + + + + `; +} + function buildLinkString(aPolicy, aName, aRelString, aSchemeFrom, aSchemeTo, aTestType) { var result; var href = ''; @@ -213,6 +232,8 @@ function handleRequest(request, response) { var schemeFrom = params.get("SCHEME_FROM") || "http"; var schemeTo = params.get("SCHEME_TO") || "http"; + response.setHeader("Access-Control-Allow-Origin", "*", false); + if (action === "resetState") { setSharedState(SHARED_KEY, "{}"); response.write(""); @@ -386,6 +407,11 @@ function handleRequest(request, response) { return; } + if (action === "generate-fetch-user-control-policy-test") { + response.write(createFetchUserControlRPTestCase(name, schemeFrom, schemeTo)); + return; + } + response.write("I don't know action " + action); return; } diff --git a/dom/fetch/FetchDriver.cpp b/dom/fetch/FetchDriver.cpp index feb303898fa1..39aefb7efac2 100644 --- a/dom/fetch/FetchDriver.cpp +++ b/dom/fetch/FetchDriver.cpp @@ -108,6 +108,8 @@ FetchDriver::Fetch(FetchDriverObserver* aObserver) nsresult FetchDriver::HttpFetch() { + MOZ_ASSERT(NS_IsMainThread()); + // Step 1. "Let response be null." mResponse = nullptr; nsresult rv; @@ -277,7 +279,9 @@ FetchDriver::HttpFetch() // If request’s referrer policy is the empty string, // then set request’s referrer policy to "no-referrer-when-downgrade". if (mRequest->ReferrerPolicy_() == ReferrerPolicy::_empty) { - mRequest->SetReferrerPolicy(net::RP_No_Referrer_When_Downgrade); + net::ReferrerPolicy referrerPolicy = + static_cast(NS_GetDefaultReferrerPolicy()); + mRequest->SetReferrerPolicy(referrerPolicy); } rv = FetchUtil::SetRequestReferrer(mPrincipal, diff --git a/dom/fetch/InternalRequest.cpp b/dom/fetch/InternalRequest.cpp index f0328a3590fb..b916538b1b91 100644 --- a/dom/fetch/InternalRequest.cpp +++ b/dom/fetch/InternalRequest.cpp @@ -82,7 +82,7 @@ InternalRequest::InternalRequest(const nsACString& aURL, , mContentPolicyType(nsIContentPolicy::TYPE_FETCH) , mReferrer(NS_LITERAL_STRING(kFETCH_CLIENT_REFERRER_STR)) , mReferrerPolicy(ReferrerPolicy::_empty) - , mEnvironmentReferrerPolicy(net::RP_Default) + , mEnvironmentReferrerPolicy(net::RP_Unset) , mMode(RequestMode::No_cors) , mCredentialsMode(RequestCredentials::Omit) , mResponseTainting(LoadTainting::Basic) @@ -121,7 +121,7 @@ InternalRequest::InternalRequest(const nsACString& aURL, , mContentPolicyType(aContentPolicyType) , mReferrer(aReferrer) , mReferrerPolicy(aReferrerPolicy) - , mEnvironmentReferrerPolicy(net::RP_Default) + , mEnvironmentReferrerPolicy(net::RP_Unset) , mMode(aMode) , mCredentialsMode(aRequestCredentials) , mResponseTainting(LoadTainting::Basic) diff --git a/dom/tests/mochitest/fetch/mochitest.ini b/dom/tests/mochitest/fetch/mochitest.ini index 4047bac298b9..d678924ac4e4 100644 --- a/dom/tests/mochitest/fetch/mochitest.ini +++ b/dom/tests/mochitest/fetch/mochitest.ini @@ -31,6 +31,8 @@ support-files = !/dom/xhr/tests/temporaryFileBlob.sjs !/dom/html/test/form_submit_server.sjs !/dom/security/test/cors/file_CrossSiteXHR_server.sjs + !/dom/base/test/referrer_helper.js + !/dom/base/test/referrer_testserver.sjs [test_headers.html] [test_headers_sw_reroute.html] @@ -47,6 +49,7 @@ skip-if = toolkit == 'android' && debug # Bug 1210282 skip-if = toolkit == 'android' && debug # Bug 1210282 [test_fetch_cors_sw_empty_reroute.html] skip-if = toolkit == 'android' && debug # Bug 1210282 +[test_fetch_user_control_rp.html] [test_formdataparsing.html] [test_formdataparsing_sw_reroute.html] [test_request.html] diff --git a/dom/tests/mochitest/fetch/test_fetch_user_control_rp.html b/dom/tests/mochitest/fetch/test_fetch_user_control_rp.html new file mode 100644 index 000000000000..e24e873732e0 --- /dev/null +++ b/dom/tests/mochitest/fetch/test_fetch_user_control_rp.html @@ -0,0 +1,97 @@ + + + + + Test fetch user control referrer policy Bug 1304623 + + + + + + + + + + diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp index bab9bd192389..8b2634f39d7e 100644 --- a/dom/workers/ScriptLoader.cpp +++ b/dom/workers/ScriptLoader.cpp @@ -206,7 +206,7 @@ ChannelFromScriptURL(nsIPrincipal* principal, if (nsCOMPtr httpChannel = do_QueryInterface(channel)) { mozilla::net::ReferrerPolicy referrerPolicy = parentDoc ? - parentDoc->GetReferrerPolicy() : mozilla::net::RP_Default; + parentDoc->GetReferrerPolicy() : mozilla::net::RP_Unset; rv = nsContentUtils::SetFetchReferrerURIWithPolicy(principal, parentDoc, httpChannel, referrerPolicy); if (NS_WARN_IF(NS_FAILED(rv))) { @@ -1233,7 +1233,7 @@ private: // Set ReferrerPolicy, default value is set in GetReferrerPolicy bool hasReferrerPolicy = false; - uint32_t rp = mozilla::net::RP_Default; + uint32_t rp = mozilla::net::RP_Unset; rv = csp->GetReferrerPolicy(&rp, &hasReferrerPolicy); NS_ENSURE_SUCCESS(rv, rv); diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index 4c109049c3a1..10a2792f3b94 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -1611,7 +1611,7 @@ NS_IMPL_ISUPPORTS(TimerThreadEventTarget, nsIEventTarget) WorkerLoadInfo::WorkerLoadInfo() : mWindowID(UINT64_MAX) , mServiceWorkerID(0) - , mReferrerPolicy(net::RP_Default) + , mReferrerPolicy(net::RP_Unset) , mFromWindow(false) , mEvalAllowed(false) , mReportCSPViolations(false) @@ -3501,7 +3501,7 @@ WorkerPrivateParent::SetPrincipal(nsIPrincipal* aPrincipal, &mLoadInfo.mEvalAllowed); // Set ReferrerPolicy bool hasReferrerPolicy = false; - uint32_t rp = mozilla::net::RP_Default; + uint32_t rp = mozilla::net::RP_Unset; nsresult rv = mLoadInfo.mCSP->GetReferrerPolicy(&rp, &hasReferrerPolicy); NS_ENSURE_SUCCESS_VOID(rv);