Bug 1461695 change tabs.onUpdated filter name to isArticle, r?aswan draft
authorShane Caraveo <scaraveo@mozilla.com>
Tue, 19 Jun 2018 10:38:26 -0400
changeset 808431 8c0a88de5c9da2691572c42fea3cd8f59d67d5d6
parent 808416 257c191e7903523a1132e04460a0b2460d950809
push id113381
push usermixedpuppy@gmail.com
push dateTue, 19 Jun 2018 14:40:52 +0000
reviewersaswan
bugs1461695
milestone62.0a1
Bug 1461695 change tabs.onUpdated filter name to isArticle, r?aswan MozReview-Commit-ID: Ha0nJPMTYkJ
browser/components/extensions/parent/ext-tabs.js
browser/components/extensions/schemas/tabs.json
browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -119,17 +119,17 @@ let tabListener = {
 };
 
 const allAttrs = new Set(["audible", "favIconUrl", "mutedInfo", "sharingState", "title"]);
 const allProperties = new Set([
   "audible",
   "discarded",
   "favIconUrl",
   "hidden",
-  "isarticle",
+  "isArticle",
   "mutedInfo",
   "pinned",
   "sharingState",
   "status",
   "title",
 ]);
 const restricted = new Set(["url", "favIconUrl", "title"]);
 
@@ -143,16 +143,22 @@ class TabsUpdateFilterEventManager exten
       if (filter.urls) {
         filter.urls = new MatchPatternSet(filter.urls);
       }
       let needsModified = true;
       if (filter.properties) {
         // Default is to listen for all events.
         needsModified = filter.properties.some(p => allAttrs.has(p));
         filter.properties = new Set(filter.properties);
+        // TODO Bug 1465520 remove warning when ready.
+        if (filter.properties.has("isarticle")) {
+          extension.logger.warn("The isarticle filter name is deprecated, use isArticle.");
+          filter.properties.delete("isarticle");
+          filter.properties.add("isArticle");
+        }
       } else {
         filter.properties = allProperties;
       }
 
       function sanitize(extension, changeInfo) {
         let result = {};
         let nonempty = false;
         let hasTabs = extension.hasPermission("tabs");
@@ -290,26 +296,26 @@ class TabsUpdateFilterEventManager exten
         listeners.set("TabShow", listener);
         listeners.set("TabHide", listener);
       }
 
       for (let [name, listener] of listeners) {
         windowTracker.addListener(name, listener);
       }
 
-      if (filter.properties.has("isarticle")) {
+      if (filter.properties.has("isArticle")) {
         tabTracker.on("tab-isarticle", isArticleChangeListener);
       }
 
       return () => {
         for (let [name, listener] of listeners) {
           windowTracker.removeListener(name, listener);
         }
 
-        if (filter.properties.has("isarticle")) {
+        if (filter.properties.has("isArticle")) {
           tabTracker.off("tab-isarticle", isArticleChangeListener);
         }
       };
     };
 
     super({
       context,
       name: "tabs.onUpdated",
--- a/browser/components/extensions/schemas/tabs.json
+++ b/browser/components/extensions/schemas/tabs.json
@@ -293,16 +293,17 @@
         "id": "UpdatePropertyName",
         "type": "string",
         "enum": [
           "audible",
           "discarded",
           "favIconUrl",
           "hidden",
           "isarticle",
+          "isArticle",
           "mutedInfo",
           "pinned",
           "sharingState",
           "status",
           "title"
         ],
         "description": "Event names supported in onUpdated."
       },
--- a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
@@ -194,29 +194,82 @@ add_task(async function test_filter_wind
 
   await ext_ok.unload();
   await ext_ok2.unload();
   await ext_fail.unload();
 
   await BrowserTestUtils.removeTab(tab);
 });
 
+// TODO Bug 1465520 test should be removed when filter name is.
+add_task(async function test_filter_isarticle_deprecated() {
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: ["tabs"],
+    },
+    background() {
+      // We expect only status updates, anything else is a failure.
+      browser.tabs.onUpdated.addListener((tabId, changeInfo) => {
+        browser.test.log(`got onUpdated ${JSON.stringify(changeInfo)}`);
+        if ("isArticle" in changeInfo) {
+          browser.test.notifyPass("isarticle");
+        }
+      }, {properties: ["isarticle"]});
+    },
+  });
+  await extension.startup();
+  let ok = extension.awaitFinish("isarticle");
+
+  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/");
+  await ok;
+
+  await extension.unload();
+
+  await BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_filter_isArticle() {
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      permissions: ["tabs"],
+    },
+    background() {
+      // We expect only status updates, anything else is a failure.
+      browser.tabs.onUpdated.addListener((tabId, changeInfo) => {
+        browser.test.log(`got onUpdated ${JSON.stringify(changeInfo)}`);
+        if ("isArticle" in changeInfo) {
+          browser.test.notifyPass("isArticle");
+        }
+      }, {properties: ["isArticle"]});
+    },
+  });
+  await extension.startup();
+  let ok = extension.awaitFinish("isArticle");
+
+  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/");
+  await ok;
+
+  await extension.unload();
+
+  await BrowserTestUtils.removeTab(tab);
+});
+
 add_task(async function test_filter_property() {
   let extension = ExtensionTestUtils.loadExtension({
     manifest: {
       permissions: ["tabs"],
     },
     background() {
       // We expect only status updates, anything else is a failure.
       let properties = new Set([
         "audible",
         "discarded",
         "favIconUrl",
         "hidden",
-        "isarticle",
+        "isArticle",
         "mutedInfo",
         "pinned",
         "sharingState",
         "title",
       ]);
       browser.tabs.onUpdated.addListener((tabId, changeInfo) => {
         browser.test.log(`got onUpdated ${JSON.stringify(changeInfo)}`);
         browser.test.assertTrue(!!changeInfo.status, "changeInfo has status");