Bug 587523: update test_referrer.js to include pbmode tests draft
authorLuke Crouch <lcrouch@mozilla.com>
Tue, 16 Jan 2018 15:25:09 -0600
changeset 721673 e33097c207540b23be8fad6d4b65d56fa11d9cc4
parent 721173 30d4f604fc4c5620188596496a58fe87c980edf1
child 721674 daea9211ad97da8483ed88887b113d0e3ae8903e
push id95928
push userbmo:lcrouch@mozilla.com
push dateWed, 17 Jan 2018 18:46:43 +0000
bugs587523
milestone59.0a1
Bug 587523: update test_referrer.js to include pbmode tests MozReview-Commit-ID: FXUMi9Q3S3P
netwerk/protocol/http/HttpBaseChannel.cpp
netwerk/test/unit/test_referrer.js
--- a/netwerk/protocol/http/HttpBaseChannel.cpp
+++ b/netwerk/protocol/http/HttpBaseChannel.cpp
@@ -1562,16 +1562,19 @@ HttpBaseChannel::GetReferrer(nsIURI **re
   *referrer = mReferrer;
   NS_IF_ADDREF(*referrer);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 HttpBaseChannel::SetReferrer(nsIURI *referrer)
 {
+  if (mLoadInfo->GetOriginAttributes().mPrivateBrowsingId > 0) {
+    return SetReferrerWithPolicy(referrer, NS_GetDefaultReferrerPolicy(true));
+  }
   return SetReferrerWithPolicy(referrer, NS_GetDefaultReferrerPolicy());
 }
 
 NS_IMETHODIMP
 HttpBaseChannel::GetReferrerPolicy(uint32_t *referrerPolicy)
 {
   NS_ENSURE_ARG_POINTER(referrerPolicy);
   *referrerPolicy = mReferrerPolicy;
--- a/netwerk/test/unit/test_referrer.js
+++ b/netwerk/test/unit/test_referrer.js
@@ -1,19 +1,18 @@
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
-function getTestReferrer(server_uri, referer_uri) {
+function getTestReferrer(server_uri, referer_uri, isPrivate=false) {
   var uri = NetUtil.newURI(server_uri)
   let referrer = NetUtil.newURI(referer_uri);
-  let triggeringPrincipal = Services.scriptSecurityManager.createCodebasePrincipal(referrer, {});
+  let principal = Services.scriptSecurityManager.createCodebasePrincipal(referrer, {privateBrowsingId: isPrivate ? 1 : 0});
   var chan = NetUtil.newChannel({
     uri: uri,
-    loadingPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
-    triggeringPrincipal: triggeringPrincipal,
+    loadingPrincipal: principal,
     contentPolicyType: Ci.nsIContentPolicy.TYPE_OTHER
   });
 
   chan.QueryInterface(Components.interfaces.nsIHttpChannel);
   chan.referrer = referrer;
   var header = null;
   try {
     header = chan.getRequestHeader("Referer");
@@ -58,16 +57,32 @@ function run_test() {
   Assert.equal(getTestReferrer(server_uri_https, referer_uri_https), referer_uri_https);
   Assert.equal(getTestReferrer(server_uri_https, referer_uri_2_https), "https://bar.examplesite.com/");
   Assert.equal(getTestReferrer(server_uri, referer_uri_2), referer_uri_2);
   Assert.equal(getTestReferrer(server_uri, referer_uri), "http://foo.example.com/");
   prefs.setIntPref("network.http.referer.defaultPolicy", 3);
   Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);
   Assert.equal(null, getTestReferrer(server_uri_2, referer_uri_https));
 
+  // tests for referer.defaultPolicy
+  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 0);
+  Assert.equal(null, getTestReferrer(server_uri, referer_uri, true));
+  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 1);
+  Assert.equal(null, getTestReferrer(server_uri, referer_uri, true));
+  Assert.equal(getTestReferrer(server_uri, referer_uri_2, true), referer_uri_2);
+  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 2);
+  Assert.equal(null, getTestReferrer(server_uri, referer_uri_https, true));
+  Assert.equal(getTestReferrer(server_uri_https, referer_uri_https, true), referer_uri_https);
+  Assert.equal(getTestReferrer(server_uri_https, referer_uri_2_https, true), "https://bar.examplesite.com/");
+  Assert.equal(getTestReferrer(server_uri, referer_uri_2, true), referer_uri_2);
+  Assert.equal(getTestReferrer(server_uri, referer_uri, true), "http://foo.example.com/");
+  prefs.setIntPref("network.http.referer.defaultPolicy.pbmode", 3);
+  Assert.equal(getTestReferrer(server_uri, referer_uri, true), referer_uri);
+  Assert.equal(null, getTestReferrer(server_uri_2, referer_uri_https, true));
+
   // tests for referer.spoofSource
   prefs.setBoolPref("network.http.referer.spoofSource", true);
   Assert.equal(getTestReferrer(server_uri, referer_uri), server_uri);
   prefs.setBoolPref("network.http.referer.spoofSource", false);
   Assert.equal(getTestReferrer(server_uri, referer_uri), referer_uri);
 
   // tests for referer.XOriginPolicy
   prefs.setIntPref("network.http.referer.XOriginPolicy", 2);