Bug 1422019 - Make resource://android/asset work again with GeckoView r=jchen
MozReview-Commit-ID: FYD4cOaNBza
--- a/mobile/android/components/geckoview/GeckoViewStartup.js
+++ b/mobile/android/components/geckoview/GeckoViewStartup.js
@@ -12,20 +12,38 @@ XPCOMUtils.defineLazyModuleGetters(this,
function GeckoViewStartup() {
}
GeckoViewStartup.prototype = {
classID: Components.ID("{8e993c34-fdd6-432c-967e-f995d888777f}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
+ /**
+ * 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.geckoview.test.apk!/assets/omni.ja!/chrome/geckoview/content/geckoview.js
+ let url = registry.convertChromeURL(Services.io.newURI("chrome://geckoview/content/geckoview.js")).spec;
+ // Like jar:file:///data/app/org.mozilla.geckoview.test.apk!/
+ url = url.substring(4, url.indexOf("!/") + 2);
+
+ let protocolHandler = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
+ protocolHandler.setSubstitution("android", Services.io.newURI(url));
+ },
+
/* ---------- nsIObserver ---------- */
observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case "app-startup": {
+ this.setResourceSubstitutions();
+
// Parent and content process.
Services.obs.addObserver(this, "chrome-document-global-created");
Services.obs.addObserver(this, "content-document-global-created");
GeckoViewUtils.addLazyGetter(this, "GeckoViewPermission", {
service: "@mozilla.org/content-permission/prompt;1",
observers: [
"getUserMedia:ask-device-permission",