summaryrefslogtreecommitdiffstats
path: root/dom/security/test/general/test_bug1277803.xul
diff options
context:
space:
mode:
Diffstat (limited to 'dom/security/test/general/test_bug1277803.xul')
-rw-r--r--dom/security/test/general/test_bug1277803.xul99
1 files changed, 99 insertions, 0 deletions
diff --git a/dom/security/test/general/test_bug1277803.xul b/dom/security/test/general/test_bug1277803.xul
new file mode 100644
index 000000000..a62285f8a
--- /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>