Bug 1277803 - Part 5: Add a test to verify the loadingPrincipal of favicon loads. r=ckerschb
☠☠ backed out by ae8e64903b30 ☠ ☠
authorSteven Englehardt <senglehardt@mozilla.com>
Tue, 13 Sep 2016 00:33:00 -0400
changeset 316906 76788d4f83cef726fa5300ac6cda13481faf495e
parent 316905 d17370e68325526884325c71d9fb6086d0f22918
child 316907 f173e3210edf84139e7e0df9959ab5e9f4421817
push id30787
push userryanvm@gmail.com
push dateFri, 07 Oct 2016 13:42:34 +0000
treeherdermozilla-central@ea8624a9b11e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersckerschb
bugs1277803
milestone52.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
Bug 1277803 - Part 5: Add a test to verify the loadingPrincipal of favicon loads. r=ckerschb
dom/security/test/general/bug1277803.html
dom/security/test/general/chrome.ini
dom/security/test/general/favicon_bug1277803.ico
dom/security/test/general/test_bug1277803.xul
dom/security/test/moz.build
new file mode 100644
--- /dev/null
+++ b/dom/security/test/general/bug1277803.html
@@ -0,0 +1,11 @@
+<html>
+
+<head>
+  <link rel='icon' href='favicon_bug1277803.ico'>
+</head>
+
+<body>
+Nothing to see here...
+</body>
+
+</html>
new file mode 100644
--- /dev/null
+++ b/dom/security/test/general/chrome.ini
@@ -0,0 +1,6 @@
+[DEFAULT]
+support-files =
+    favicon_bug1277803.ico
+    bug1277803.html
+
+[test_bug1277803.xul]
new file mode 100644
index 0000000000000000000000000000000000000000..d44438903b751f4732f5365783eb0229b0501f9a
GIT binary patch
literal 1406
zc${sNu}d656o=n};bd8o)56N#Jtc-%Pi19LTfxTKZb)No6UbH8fq*bwiX@OCjeo&a
zDdN=H#L7bO4x$jyCB@74W-i8r?B3hk_q&<*`*z;kiWHpvzNF*jBasEZpA#kxh(c!b
zkA?g>iii0yePlSyUv_dc8jWQ1Z6w!UKg!I^jLgo?N>x=dH#a8>3k$NixG2lZ%d)z<
zD!aS8vc0`68yg$4wzek2S1LO@DsSafbQ0yu>32E3yp%VeKI7mBPXr?7)NyfW4$YaS
zd5A~%+<0`4?ln&f=m9;D1oWV(ltlE19?>I0L|1Yp*O;x+>4`v?rrDm0gTcYzU~n)b
zBp4hF4h9E<gCSwU;9zhtI2arZ2^|IpgM-1r;9ziy28V;g8HZ|qyhLJWAR?jpkzw(e
zdyG6qJuGP%_|bFYVezn}Wr4%P;o<PXG|fu|hljz#;9;<(^Kf_=JPZ*p<(ifdpM1vY
z^14J6oaLIA8t(v8z%*bGU<!B#ehd@|!D?x4NAgC;Kj0tmw-yEbgXu5?7=mhQTkeEU
z?nY+qjW9&~B5V<kh+k^0aj*svj%XY_SZX(uA}kS>2t>p%Z2?#!6C;BnLWIS(MKl(A
z5@Ct99*M<vgLNUKt)wt03<`t7pfIHE1Ve;DVNe(%3~7tOpfD&53WLHxX#yPvg+XCZ
z02Kd7F=e7M$b0J%eN^+X+BU|^l6;W8y*)WNIFQ4`LpeG+l9Q7YIX*s?v$HcfKR=g?
ziwn8Bx{{ll8@ao?lk1-<@87-Se{BC~O&_tkDYLqks+9jZdPPy~Pwz!~n{79!=kH$}
z<GSmLr_<Msl#^avbPO2hT+6EM$RF49<MriRDSK7X4Z4C$(Ttb&wO_ZL%_!=6ywx`4
zgyE!JUClFXORIXNvkFB!=(@IFPD&fltZ*GPJq*jH8?3a&i}`+QhPP$YHpR1|=~tQH
w$7Vff2Tfh~eiKjn_2%S0`}?qUxPHyMZW^-w&wKL0`*KK);S<IY*Xw!iFYO$~&;S4c
new file mode 100644
--- /dev/null
+++ b/dom/security/test/general/test_bug1277803.xul
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+
+<window title="Bug 1277803 test"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        width="600"
+        height="600"
+        onload="runTest();">
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
+
+  <body xmlns="http://www.w3.org/1999/xhtml">
+  </body>
+
+  <script type="application/javascript"><![CDATA[
+    SimpleTest.requestCompleteLog();
+    let Ci = Components.interfaces;
+    let Cc = Components.classes;
+    let Cu = Components.utils;
+    let makeURI = Cu.import("resource://gre/modules/BrowserUtils.jsm", {}).BrowserUtils.makeURI;
+
+    const BASE_URI = "http://mochi.test:8888/chrome/dom/security/test/general/";
+    const FAVICON_URI = BASE_URI + "favicon_bug1277803.ico";
+    const LOADING_URI = BASE_URI + "bug1277803.html";
+    let testWindow; //will be used to trigger favicon load
+
+    let securityManager = Cc["@mozilla.org/scriptsecuritymanager;1"].
+                          getService(Ci.nsIScriptSecurityManager);
+    let expectedPrincipal = securityManager.createCodebasePrincipal(makeURI(LOADING_URI), {});
+    let systemPrincipal = Cc["@mozilla.org/systemprincipal;1"].createInstance();
+
+    // We expect 2 favicon loads, one from PlacesUIUtils.loadFavicon and one
+    // from XUL:image loads.
+    let requestXUL = false;
+    let requestPlaces = false;
+
+    function runTest() {
+      // Register our observer to intercept favicon requests.
+      let os = Cc["@mozilla.org/observer-service;1"].
+               getService(Ci.nsIObserverService);
+      let observer = {
+        observe: function(aSubject, aTopic, aData)
+        {
+          // Make sure this is a favicon request.
+          let httpChannel = aSubject.QueryInterface(Ci.nsIHttpChannel);
+          if (FAVICON_URI != httpChannel.URI.spec) {
+            return;
+          }
+
+          // Ensure the topic is the one we set an observer for.
+          is(aTopic, "http-on-modify-request", "Expected observer topic");
+
+          // Check for the correct loadingPrincipal, triggeringPrincipal.
+          let triggeringPrincipal = httpChannel.loadInfo.triggeringPrincipal;
+          let loadingPrincipal = httpChannel.loadInfo.loadingPrincipal;
+
+          if (loadingPrincipal.equals(systemPrincipal)) {
+            // This is the favicon loading from XUL, which will have the system
+            // principal as its loading principal and have a content principal
+            // as its triggering principal.
+            ok(triggeringPrincipal.equals(expectedPrincipal),
+              "Correct triggeringPrincipal for favicon from XUL.");
+            requestXUL = true;
+          } else if (loadingPrincipal.equals(expectedPrincipal)) {
+            // This is the favicon loading from Places, which will have a
+            // content principal as its loading principal and triggering
+            // principal.
+            ok(triggeringPrincipal.equals(expectedPrincipal),
+              "Correct triggeringPrincipal for favicon from Places.");
+            requestPlaces = true;
+          } else {
+            ok(false, "An unexpected favicon request.")
+          }
+
+          // Cleanup after ourselves...
+          if (requestXUL && requestPlaces) {
+            os.removeObserver(this, "http-on-modify-request");
+            SimpleTest.finish();
+          }
+        }
+      }
+      os.addObserver(observer, "http-on-modify-request", false);
+
+      // Now that the observer is set up, trigger a favicon load with navigation
+      testWindow = window.open(LOADING_URI);
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    SimpleTest.registerCleanupFunction(function() {
+      if (testWindow) {
+        testWindow.close();
+      }
+    });
+  ]]></script>
+
+  <browser type="content-primary" flex="1" id="content" src="about:blank"/>
+</window>
--- a/dom/security/test/moz.build
+++ b/dom/security/test/moz.build
@@ -17,15 +17,16 @@ MOCHITEST_MANIFESTS += [
     'csp/mochitest.ini',
     'general/mochitest.ini',
     'mixedcontentblocker/mochitest.ini',
     'sri/mochitest.ini',
 ]
 
 MOCHITEST_CHROME_MANIFESTS += [
     'csp/chrome.ini',
+    'general/chrome.ini',
 ]
 
 BROWSER_CHROME_MANIFESTS += [
     'contentverifier/browser.ini',
     'csp/browser.ini',
     'hsts/browser.ini',
 ]