summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug408415.js
blob: d8f80f8be42f91214a098f35e6bb15757143511c (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
add_task(function* test() {
  let testPath = getRootDirectory(gTestPath);

  yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" },
    function* (tabBrowser) {
      const URI = testPath + "file_with_favicon.html";
      const expectedIcon = testPath + "file_generic_favicon.ico";

      let got_favicon = Promise.defer();
      let listener = {
        onLinkIconAvailable(browser, iconURI) {
          if (got_favicon && iconURI && browser === tabBrowser) {
            got_favicon.resolve(iconURI);
            got_favicon = null;
          }
        }
      };
      gBrowser.addTabsProgressListener(listener);

      BrowserTestUtils.loadURI(tabBrowser, URI);

      let iconURI = yield got_favicon.promise;
      is(iconURI, expectedIcon, "Correct icon before pushState.");

      got_favicon = Promise.defer();
      got_favicon.promise.then(() => { ok(false, "shouldn't be called"); }, (e) => e);
      yield ContentTask.spawn(tabBrowser, null, function() {
        content.location.href += "#foo";
      });

      // We've navigated and shouldn't get a call to onLinkIconAvailable.
      TestUtils.executeSoon(() => {
        got_favicon.reject(gBrowser.getIcon(gBrowser.getTabForBrowser(tabBrowser)));
      });
      try {
        yield got_favicon.promise;
      } catch (e) {
        iconURI = e;
      }
      is(iconURI, expectedIcon, "Correct icon after pushState.");

      gBrowser.removeTabsProgressListener(listener);
    });
});