forked from mirrors/gecko-dev
		
	Summary: This moves the load of favicons into the content process. We use the same logic for finding favicons (based on waiting until none have shown up for a short time) but then load the favicon and convert it to a data uri which we then dispatch to the parent process. Along the way this fixes asssociating the load with the tab for WebExtension and devtools, fixes CSP usage for the load, fixes expiry detection of the favicon and stops us from loading the same resource twice. This change also merges the prefs browser.chrome.site_icons and browser.chrome.favicons leaving just the former controlling favicon loading. It adds the pref browser.chrome.guess_favicon to allow disabling guessing where a favicon might be located for a site (at <hostname>/favicon.ico). This is mainly to allow disabling this in tests where those additional yet automatic requests are uninteresting for the test. There are multiple clean-ups that can follow this but this is a first step along that path. MozReview-Commit-ID: E0Cs59UnxaF Reviewers: mak Tags: #secure-revision Bug #: 1453751 Differential Revision: https://phabricator.services.mozilla.com/D1672 Differential Revision: https://phabricator.services.mozilla.com/D1673 Differential Revision: https://phabricator.services.mozilla.com/D1674 Differential Revision: https://phabricator.services.mozilla.com/D1850 Differential Revision: https://phabricator.services.mozilla.com/D1869 --HG-- rename : browser/base/content/test/general/browser_bug408415.js => browser/base/content/test/favicons/browser_bug408415.js rename : browser/base/content/test/general/browser_bug550565.js => browser/base/content/test/favicons/browser_bug550565.js rename : browser/base/content/test/general/browser_favicon_change.js => browser/base/content/test/favicons/browser_favicon_change.js rename : browser/base/content/test/general/browser_favicon_change_not_in_document.js => browser/base/content/test/favicons/browser_favicon_change_not_in_document.js rename : browser/base/content/test/general/browser_subframe_favicons_not_used.js => browser/base/content/test/favicons/browser_subframe_favicons_not_used.js rename : browser/base/content/test/general/file_bug970276_favicon1.ico => browser/base/content/test/favicons/file_bug970276_favicon1.ico rename : browser/base/content/test/general/file_bug970276_favicon1.ico => browser/base/content/test/favicons/file_bug970276_favicon2.ico rename : browser/base/content/test/general/file_bug970276_popup1.html => browser/base/content/test/favicons/file_bug970276_popup1.html rename : browser/base/content/test/general/file_bug970276_popup2.html => browser/base/content/test/favicons/file_bug970276_popup2.html rename : browser/base/content/test/general/file_favicon_change.html => browser/base/content/test/favicons/file_favicon_change.html rename : browser/base/content/test/general/file_favicon_change_not_in_document.html => browser/base/content/test/favicons/file_favicon_change_not_in_document.html rename : browser/base/content/test/general/file_bug970276_favicon1.ico => browser/base/content/test/favicons/file_generic_favicon.ico rename : browser/base/content/test/general/file_with_favicon.html => browser/base/content/test/favicons/file_with_favicon.html extra : rebase_source : 6372b2681a59d267f966e9fa2ca9a54e3ff0cea0 extra : intermediate-source : b11aa832c41ac5beef9065f804d11fb7c9887990 extra : source : 638eb8a41245f6d9932861afda21edd5e0b2618a
		
			
				
	
	
		
			33 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
add_task(async function test() {
 | 
						|
  let testPath = getRootDirectory(gTestPath);
 | 
						|
 | 
						|
  await BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" },
 | 
						|
    async function(tabBrowser) {
 | 
						|
      const URI = testPath + "file_with_favicon.html";
 | 
						|
      const expectedIcon = testPath + "file_generic_favicon.ico";
 | 
						|
      let faviconPromise = waitForLinkAvailable(tabBrowser);
 | 
						|
 | 
						|
      BrowserTestUtils.loadURI(tabBrowser, URI);
 | 
						|
 | 
						|
      let iconURI = await faviconPromise;
 | 
						|
      is(iconURI, expectedIcon, "Correct icon before pushState.");
 | 
						|
 | 
						|
      faviconPromise = waitForLinkAvailable(tabBrowser);
 | 
						|
 | 
						|
      await ContentTask.spawn(tabBrowser, null, function() {
 | 
						|
        content.history.pushState("page2", "page2", "page2");
 | 
						|
      });
 | 
						|
 | 
						|
      // We've navigated and shouldn't get a call to onLinkIconAvailable.
 | 
						|
      TestUtils.executeSoon(() => {
 | 
						|
        faviconPromise.cancel();
 | 
						|
      });
 | 
						|
 | 
						|
      try {
 | 
						|
        await faviconPromise;
 | 
						|
        ok(false, "Should not have seen a new icon load.");
 | 
						|
      } catch (e) {
 | 
						|
        ok(true, "Should have been able to cancel the promise.");
 | 
						|
      }
 | 
						|
    });
 | 
						|
});
 |