diff --git a/src/background.js b/src/background.js index 3ab19d3..1157239 100644 --- a/src/background.js +++ b/src/background.js @@ -88,4 +88,68 @@ function isPageActionNeededForUrl(url) { return cws_pattern.test(url) || mea_pattern.test(url) || ows_pattern.test(url) || amo_pattern.test(url) || atn_pattern.test(url); } +//#else +//// Work-around for crbug.com/1132684: static event_rules disappear after a +//// restart, so we register rules dynamically instead, on install. +function registerEventRules() { + if (registerEventRules.hasRunOnce) { + return; + } + registerEventRules.hasRunOnce = true; + + var pageUrlFilters = [{ + hostEquals: "chrome.google.com", + pathPrefix: "/webstore/detail/" + }, { + hostEquals: "microsoftedge.microsoft.com", + pathPrefix: "/webstore/detail/" + }, { + hostEquals: "addons.opera.com", + pathContains: "extensions/details/" + }, { + hostEquals: "addons.mozilla.org", + pathContains: "addon/" + }, { + hostSuffix: "addons.mozilla.org", + pathContains: "review/" + }, { + hostEquals: "addons.allizom.org", + pathContains: "addon/" + }, { + hostSuffix: "addons.allizom.org", + pathContains: "review/" + }, { + hostEquals: "addons-dev.allizom.org", + pathContains: "addon/" + }, { + hostSuffix: "addons-dev.allizom.org", + pathContains: "review/" + }, { + hostEquals: "addons.thunderbird.net", + pathContains: "addon/" + }, { + hostSuffix: "addons-stage.thunderbird.net", + pathContains: "addon/" + }]; + + var rule = { + conditions: pageUrlFilters.map(function(pageUrlFilter) { + return new chrome.declarativeContent.PageStateMatcher({ + pageUrl: pageUrlFilter, + }); + }), + actions: [ + new chrome.declarativeContent.ShowPageAction(), + ], + }; + + chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { + chrome.declarativeContent.onPageChanged.addRules([rule]); + }); +} +//// Work-around for crbug.com/388231 is in incognito-events.js +chrome.runtime.onInstalled.addListener(registerEventRules); +//// Work-around for crbug.com/264963: onInstalled is not fired when the +//// extension was disabled during an update. +chrome.runtime.onStartup.addListener(registerEventRules); //#endif diff --git a/src/cws_pattern.js b/src/cws_pattern.js index 48c19bb..48ae27e 100644 --- a/src/cws_pattern.js +++ b/src/cws_pattern.js @@ -58,8 +58,7 @@ var atn_match_patterns = [ // page_action.show_matches (in manifest_firefox.json) uses: // cws_match_pattern, mea_match_pattern, ows_match_pattern, amo_match_patterns // -// event_rules / declarativeContent (in manifest.json / manifest_opera.json) -// uses the same patterns, translated to a UrlFilter. +// declarativeContent (in background.js) uses the same patterns, translated to a UrlFilter. // // popup.js uses can_viewsource_crx_url to determine whether the URL can actually be opened, // which use regexps that may be stricter than the match patterns. diff --git a/src/manifest.json b/src/manifest.json index 5e53f47..d9ebd79 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -23,79 +23,6 @@ "default_title": "Inspect contents of the current browser extension", "default_popup": "popup.html" }, - "event_rules": [{ - "event": "declarativeContent.onPageChanged", - "actions": [{ - "type": "declarativeContent.ShowPageAction" - }], - "conditions": [{ - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "chrome.google.com", - "pathPrefix": "/webstore/detail/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "microsoftedge.microsoft.com", - "pathPrefix": "/webstore/detail/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.opera.com", - "pathContains": "extensions/details/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.mozilla.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons.mozilla.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.allizom.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons.allizom.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons-dev.allizom.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons-dev.allizom.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.thunderbird.net", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons-stage.thunderbird.net", - "pathContains": "addon/" - } - }] - }], "icons": { "16": "icons/16.png", "48": "icons/48.png", @@ -111,6 +38,7 @@ "storage", "contextMenus", "downloads", + "declarativeContent", "*://clients2.google.com/service/update2/crx*", "*://clients2.googleusercontent.com/crx/download/*" ], diff --git a/src/manifest_opera.json b/src/manifest_opera.json index 4766f61..df270f2 100644 --- a/src/manifest_opera.json +++ b/src/manifest_opera.json @@ -26,79 +26,6 @@ "default_title": "Inspect contents of the current browser extension", "default_popup": "popup.html" }, - "event_rules": [{ - "event": "declarativeContent.onPageChanged", - "actions": [{ - "type": "declarativeContent.ShowPageAction" - }], - "conditions": [{ - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "chrome.google.com", - "pathPrefix": "/webstore/detail/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "microsoftedge.microsoft.com", - "pathPrefix": "/webstore/detail/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.opera.com", - "pathContains": "extensions/details/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.mozilla.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons.mozilla.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.allizom.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons.allizom.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons-dev.allizom.org", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons-dev.allizom.org", - "pathContains": "review/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostEquals": "addons.thunderbird.net", - "pathContains": "addon/" - } - }, { - "type": "declarativeContent.PageStateMatcher", - "pageUrl": { - "hostSuffix": "addons-stage.thunderbird.net", - "pathContains": "addon/" - } - }] - }], "icons": { "16": "icons/16.png", "48": "icons/48.png", @@ -110,6 +37,7 @@ "storage", "contextMenus", "downloads", + "declarativeContent", "*://clients2.google.com/service/update2/crx*", "*://clients2.googleusercontent.com/crx/download/*", "*://addons.opera.com/*",