addon-sdk/source/test/addons/places/favicon-helpers.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/addon-sdk/source/test/addons/places/favicon-helpers.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,50 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +const { Cc, Ci, Cu } = require('chrome');
     1.9 +const { Loader } = require('sdk/test/loader');
    1.10 +const loader = Loader(module);
    1.11 +const file = require('sdk/io/file');
    1.12 +const httpd = loader.require('sdk/test/httpd');
    1.13 +const { pathFor } = require('sdk/system');
    1.14 +const { startServerAsync } = httpd;
    1.15 +const basePath = pathFor('ProfD');
    1.16 +const { atob } = Cu.import("resource://gre/modules/Services.jsm", {});
    1.17 +const historyService = Cc["@mozilla.org/browser/nav-history-service;1"]
    1.18 +                       .getService(Ci.nsINavHistoryService);
    1.19 +const { events } = require('sdk/places/events');
    1.20 +
    1.21 +function onFaviconChange (url, callback) {
    1.22 +  function handler ({data, type}) {
    1.23 +    if (type !== 'history-page-changed' ||
    1.24 +        data.url !== url ||
    1.25 +        data.property !== Ci.nsINavHistoryObserver.ATTRIBUTE_FAVICON)
    1.26 +      return;
    1.27 +    events.off('data', handler);
    1.28 +    callback(data.value);
    1.29 +  }
    1.30 +  events.on('data', handler);
    1.31 +}
    1.32 +exports.onFaviconChange = onFaviconChange;
    1.33 +
    1.34 +/*
    1.35 + * Takes page content, a page path, and favicon binary data
    1.36 + */
    1.37 +function serve ({name, favicon, port, host}) {
    1.38 +  let faviconTag = '<link rel="icon" type="image/x-icon" href="/'+ name +'.ico"/>';
    1.39 +  let content = '<html><head>' + faviconTag + '<title>'+name+'</title></head><body></body></html>';
    1.40 +  let srv = startServerAsync(port, basePath);
    1.41 +  let pagePath = file.join(basePath, name + '.html');
    1.42 +  let iconPath = file.join(basePath, name + '.ico');
    1.43 +  let pageStream = file.open(pagePath, 'w');
    1.44 +  let iconStream = file.open(iconPath, 'wb');
    1.45 +  iconStream.write(favicon);
    1.46 +  iconStream.close();
    1.47 +  pageStream.write(content);
    1.48 +  pageStream.close();
    1.49 +  return srv;
    1.50 +}
    1.51 +exports.serve = serve;
    1.52 +
    1.53 +let binFavicon = exports.binFavicon = atob('AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkpKQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAAzAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMAZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm/wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZmAABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM/wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA/wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnMmQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwzMwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZzADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8AZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+ZMwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm/wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoKCgoKCgoKCgoKCgoKCgoHAQEMbQoKCgoKCgoAAAdDH/kgHRIAAAAAAAAAAADrHfn5ASQQAAAAAAAAAArsBx0B+fkgHesAAAAAAAD/Cgwf+fn5IA4dEus/IvcACgcMAfkg+QEB+SABHushbf8QHR/5HQH5+QEdHetEHx4K7B/5+QH5+fkdDBL5+SBE/wwdJfkf+fn5AR8g+fkfEArsCh/5+QEeJR/5+SAeBwAACgoe+SAlHwFAEhAfAAAAAPcKHh8eASYBHhAMAAAAAAAA9EMdIB8gHh0dBwAAAAAAAAAA7BAdQ+wHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AADwfwAAwH8AAMB/AAAAPwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAcAAIAPAADADwAA8D8AAP//AAA');

mercurial