Bug 1306858: Fix locale discovery in packed, embedded WebExtensions. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 01 Oct 2016 19:09:24 +0100
changeset 419889 e27ae5eb35daa4c493d67afc110e38d330ce21f4
parent 419814 e517fba7718a4ffd0c7dbfc1d133da7dc39e71f3
child 532672 5465fb64d87a0976dab63eaf764c228191a91661
push id31037
push usermaglione.k@gmail.com
push dateSat, 01 Oct 2016 18:09:41 +0000
reviewersaswan
bugs1306858
milestone52.0a1
Bug 1306858: Fix locale discovery in packed, embedded WebExtensions. r?aswan MozReview-Commit-ID: KKcaj9i2PwK
toolkit/components/extensions/Extension.jsm
toolkit/components/extensions/test/xpcshell/test_locale_data.js
--- a/toolkit/components/extensions/Extension.jsm
+++ b/toolkit/components/extensions/Extension.jsm
@@ -897,25 +897,26 @@ this.ExtensionData = class {
         }
         iter.close();
 
         return results;
       }
 
       // FIXME: We need a way to do this without main thread IO.
 
-      this.rootURI.QueryInterface(Ci.nsIJARURI);
+      let uri = this.rootURI.QueryInterface(Ci.nsIJARURI);
 
-      let file = this.rootURI.JARFile.QueryInterface(Ci.nsIFileURL).file;
+      let file = uri.JARFile.QueryInterface(Ci.nsIFileURL).file;
       let zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].createInstance(Ci.nsIZipReader);
       zipReader.open(file);
       try {
         let results = [];
 
         // Normalize the directory path.
+        path = `${uri.JAREntry}/${path}`;
         path = path.replace(/\/\/+/g, "/").replace(/^\/|\/$/g, "") + "/";
 
         // Escape pattern metacharacters.
         let pattern = path.replace(/[[\]()?*~|$\\]/g, "\\$&");
 
         let enumerator = zipReader.findEntries(pattern + "*");
         while (enumerator.hasMore()) {
           let name = enumerator.getNext();
--- a/toolkit/components/extensions/test/xpcshell/test_locale_data.js
+++ b/toolkit/components/extensions/test/xpcshell/test_locale_data.js
@@ -4,25 +4,27 @@ Cu.import("resource://gre/modules/Extens
 
 /* globals ExtensionData */
 
 const uuidGenerator = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
 
 function* generateAddon(data) {
   let id = uuidGenerator.generateUUID().number;
 
-  data = Object.assign({applications: {gecko: {id}}}, data);
+  data = Object.assign({embedded: true}, data);
+  data.manifest = Object.assign({applications: {gecko: {id}}}, data.manifest);
+
   let xpi = Extension.generateXPI(data);
   do_register_cleanup(() => {
     Services.obs.notifyObservers(xpi, "flush-cache-entry", null);
     xpi.remove(false);
   });
 
   let fileURI = Services.io.newFileURI(xpi);
-  let jarURI = NetUtil.newURI(`jar:${fileURI.spec}!/`);
+  let jarURI = NetUtil.newURI(`jar:${fileURI.spec}!/webextension/`);
 
   let extension = new ExtensionData(jarURI);
   yield extension.readManifest();
 
   return extension;
 }
 
 add_task(function* testMissingDefaultLocale() {