summaryrefslogtreecommitdiffstats
path: root/dom/security/test/general/test_bug1277803.xhtml
blob: 482dd6b916ec481bf69e88a4a19e2fed657ff080 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?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 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 makeURI = ChromeUtils.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.createContentPrincipal(makeURI(LOADING_URI), {});
    let systemPrincipal = Cc["@mozilla.org/systemprincipal;1"].createInstance();

    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;

          ok(loadingPrincipal.equals(expectedPrincipal), "Should be loading with the expected principal.");
          ok(triggeringPrincipal.equals(expectedPrincipal), "Should be triggered with the expected principal.");

          os.removeObserver(this, "http-on-modify-request");
          SimpleTest.finish();
        }
      }
      os.addObserver(observer, "http-on-modify-request");

      // 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="true" flex="1" id="content" src="about:blank"/>
</window>