Bug 1204268 - Make 'appcache validate command work when manifest outside root r?miker draft
authorMichael Ratcliffe <mratcliffe@mozilla.com>
Tue, 30 Jan 2018 22:08:32 +0000
changeset 749059 7c92c595e855a01312bcbf61559e62f208010f1d
parent 748899 fd995039d89708923b5673ecebc652967d40bd4e
push id97311
push userbmo:mratcliffe@mozilla.com
push dateTue, 30 Jan 2018 22:10:46 +0000
reviewersmiker
bugs1204268
milestone60.0a1
Bug 1204268 - Make 'appcache validate command work when manifest outside root r?miker This is a rebased version of a patch created by Leni Kadali [:leni1] MozReview-Commit-ID: FUU7bmlQ9qz
devtools/client/commandline/test/browser.ini
devtools/client/commandline/test/browser_cmd_appcache_valid.js
devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache
devtools/client/commandline/test/browser_cmd_appcache_valid_index.html
devtools/client/commandline/test/browser_cmd_appcache_valid_index_absolute_manifest.html
devtools/client/commandline/test/browser_cmd_appcache_valid_index_relative_manifest.html
devtools/client/commandline/test/browser_cmd_appcache_valid_index_root_relative_manifest.html
devtools/client/commandline/test/browser_cmd_appcache_valid_page1.html
devtools/client/commandline/test/browser_cmd_appcache_valid_page2.html
devtools/client/commandline/test/browser_cmd_appcache_valid_page3.html
devtools/client/shared/AppCacheUtils.jsm
--- a/devtools/client/commandline/test/browser.ini
+++ b/devtools/client/commandline/test/browser.ini
@@ -20,17 +20,19 @@ support-files =
   browser_cmd_appcache_invalid_page1.html
   browser_cmd_appcache_invalid_page2.html
   browser_cmd_appcache_invalid_page3.html
   browser_cmd_appcache_invalid_page3.html^headers^
 [browser_cmd_appcache_valid.js]
 support-files =
   browser_cmd_appcache_valid_appcache.appcache
   browser_cmd_appcache_valid_appcache.appcache^headers^
-  browser_cmd_appcache_valid_index.html
+  browser_cmd_appcache_valid_index_relative_manifest.html
+  browser_cmd_appcache_valid_index_root_relative_manifest.html
+  browser_cmd_appcache_valid_index_absolute_manifest.html
   browser_cmd_appcache_valid_page1.html
   browser_cmd_appcache_valid_page2.html
   browser_cmd_appcache_valid_page3.html
 [browser_cmd_commands.js]
 [browser_cmd_cookie.js]
 support-files =
  browser_cmd_cookie.html
 [browser_cmd_cookie_host.js]
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid.js
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid.js
@@ -1,15 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that the appcache commands works as they should
 
 const TEST_URI = "http://sub1.test2.example.com/browser/devtools/client/" +
-                 "commandline/test/browser_cmd_appcache_valid_index.html";
+                 "commandline/test/browser_cmd_appcache_valid_index_relative_manifest.html";
 
 function test() {
   return Task.spawn(spawnTest).then(finish, helpers.handleError);
 }
 
 function* spawnTest() {
   let options = yield helpers.openTab(TEST_URI);
 
@@ -105,18 +105,18 @@ function* spawnTest() {
         output: [ /successfully/ ]
       },
     },
 
     {
       setup: "appcache validate " + TEST_URI,
       check: {
         input:  "appcache validate " + TEST_URI,
-              // appcache validate http://sub1.test2.example.com/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_index.html
-        markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+              // appcache validate http://sub1.test2.example.com/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_index_relative_manifest.html
+        markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
         status: "VALID",
         args: {
           uri: {
             value: TEST_URI
           },
         }
       },
       exec: {
@@ -146,27 +146,27 @@ function* spawnTest() {
         args: {},
       },
       exec: {
         output: [ /no results/ ]
       },
       post: function (output, text) {
         ok(!text.includes("index"), "index is not contained in output");
         ok(!text.includes("page1"), "page1 is not contained in output");
-        ok(!text.includes("page2"), "page1 is not contained in output");
-        ok(!text.includes("page3"), "page1 is not contained in output");
+        ok(!text.includes("page2"), "page2 is not contained in output");
+        ok(!text.includes("page3"), "page3 is not contained in output");
       }
     },
 
     {
       setup: "appcache viewentry --key " + TEST_URI,
       check: {
         input:  "appcache viewentry --key " + TEST_URI,
-              // appcache viewentry --key http://sub1.test2.example.com/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_index.html
-        markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
+              // appcache viewentry --key http://sub1.test2.example.com/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_index_relative_manifest.html
+        markup: "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",
         status: "VALID",
         args: {}
       },
     },
   ]);
 
   yield helpers.closeToolbar(options);
   yield helpers.closeTab(options);
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache
@@ -1,5 +1,5 @@
 CACHE MANIFEST
-browser_cmd_appcache_valid_index.html
+browser_cmd_appcache_valid_index_relative_manifest.html
 browser_cmd_appcache_valid_page1.html
 browser_cmd_appcache_valid_page2.html
 browser_cmd_appcache_valid_page3.html
deleted file mode 100644
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid_index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<html manifest="browser_cmd_appcache_valid_appcache.appcache">
-  <head>
-    <meta charset="UTF-8">
-  <head>
-  <body>
-    <h1>Example index.html</h1>
-    <a href="browser_cmd_appcache_valid_index.html">Home</a> |
-    <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
-    <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
-    <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
-  </body>
-</html>
new file mode 100644
--- /dev/null
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_index_absolute_manifest.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html manifest="http://sub1.test2.example.com/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache">
+  <head>
+    <meta charset="UTF-8">
+  <head>
+  <body>
+    <h1>Example index.html</h1>
+    <a href="browser_cmd_appcache_valid_index_absolute_manifest.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
+    <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
+    <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_index_relative_manifest.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html manifest="browser_cmd_appcache_valid_appcache.appcache">
+  <head>
+    <meta charset="UTF-8">
+  <head>
+  <body>
+    <h1>Example index.html</h1>
+    <a href="browser_cmd_appcache_valid_index_relative_manifest.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
+    <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
+    <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_index_root_relative_manifest.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html manifest="/browser/devtools/client/commandline/test/browser_cmd_appcache_valid_appcache.appcache">
+  <head>
+    <meta charset="UTF-8">
+  <head>
+  <body>
+    <h1>Example index.html</h1>
+    <a href="browser_cmd_appcache_valid_index_root_relative_manifest.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
+    <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
+    <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
+  </body>
+</html>
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid_page1.html
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_page1.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <html manifest="browser_cmd_appcache_valid_appcache.appcache">
   <head>
     <meta charset="UTF-8">
   <head>
   <body>
     <h1>Example page1.html</h1>
-    <a href="browser_cmd_appcache_valid_index.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_index_relative_manifest.html">Home</a> |
     <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
     <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
     <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
   </body>
 </html>
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid_page2.html
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_page2.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <html manifest="browser_cmd_appcache_valid_appcache.appcache">
   <head>
     <meta charset="UTF-8">
   <head>
   <body>
     <h1>Example page2.html</h1>
-    <a href="browser_cmd_appcache_valid_index.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_index_relative_manifest.html">Home</a> |
     <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
     <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
     <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
   </body>
 </html>
--- a/devtools/client/commandline/test/browser_cmd_appcache_valid_page3.html
+++ b/devtools/client/commandline/test/browser_cmd_appcache_valid_page3.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <html manifest="browser_cmd_appcache_valid_appcache.appcache">
   <head>
     <meta charset="UTF-8">
   <head>
   <body>
     <h1>Example page3.html</h1>
-    <a href="browser_cmd_appcache_valid_index.html">Home</a> |
+    <a href="browser_cmd_appcache_valid_index_relative_manifest.html">Home</a> |
     <a href="browser_cmd_appcache_valid_page1.html">Page 1</a> |
     <a href="browser_cmd_appcache_valid_page2.html">Page 2</a> |
     <a href="browser_cmd_appcache_valid_page3.html">Page 3</a>
   </body>
 </html>
--- a/devtools/client/shared/AppCacheUtils.jsm
+++ b/devtools/client/shared/AppCacheUtils.jsm
@@ -310,24 +310,26 @@ AppCacheUtils.prototype = {
   },
 
   _getManifestURI: function ACU__getManifestURI() {
     return new Promise((resolve, reject) => {
       let getURI = () => {
         let htmlNode = this.doc.querySelector("html[manifest]");
         if (htmlNode) {
           let pageUri = this.doc.location ? this.doc.location.href : this.uri;
-          let origin = pageUri.substr(0, pageUri.lastIndexOf("/") + 1);
           let manifestURI = htmlNode.getAttribute("manifest");
 
-          if (manifestURI.startsWith("/")) {
-            manifestURI = manifestURI.substr(1);
+          let originRegExp = new RegExp(/([a-z]*:\/\/[^/]*\/)/);
+          if (originRegExp.test(manifestURI)) {
+            return manifestURI;
+          } else if (manifestURI.startsWith("/")) {
+            return pageUri.match(originRegExp)[0] + manifestURI.substring(1);
           }
 
-          return origin + manifestURI;
+          return pageUri.substring(0, pageUri.lastIndexOf("/") + 1) + manifestURI;
         }
       };
 
       if (this.doc) {
         let uri = getURI();
         return resolve(uri);
       } else {
         this._getURIInfo(this.uri).then(uriInfo => {