/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); function BrowserCLH() {} BrowserCLH.prototype = { /** * Register resource://android as the APK root. * * Consumers can access Android assets using resource://android/assets/FILENAME. */ setResourceSubstitutions: function () { let registry = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci["nsIChromeRegistry"]); // Like jar:jar:file:///data/app/org.mozilla.fennec-2.apk!/assets/omni.ja!/chrome/chrome/content/aboutHome.xhtml let url = registry.convertChromeURL(Services.io.newURI("chrome://browser/content/aboutHome.xhtml", null, null)).spec; // Like jar:file:///data/app/org.mozilla.fennec-2.apk!/ url = url.substring(4, url.indexOf("!/") + 2); let protocolHandler = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); protocolHandler.setSubstitution("android", Services.io.newURI(url, null, null)); }, observe: function (subject, topic, data) { switch (topic) { case "app-startup": this.setResourceSubstitutions(); break; } }, // QI QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]), // XPCOMUtils factory classID: Components.ID("{be623d20-d305-11de-8a39-0800200c9a66}") }; var components = [ BrowserCLH ]; this.NSGetFactory = XPCOMUtils.generateNSGetFactory(components);