v0.0.7
Change-Id: I8a3a3e91c13f437454d3ae83751a59f511e39042
diff --git a/release-notes.md b/release-notes.md
index 42540dd..55a73cb 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -1,3 +1,14 @@
+#### v0.0.7
+
+- Fix the issue when multiple rule matches one url for onBeforeRequest
+ - Block will always take the highest priority
+ - Then Redirect
+ - Ignore the rest
+- Add a new operator as `injectJsModule`, with plugins moving to polymer 3, certain plugins will be written in modules, and to inject moduled js plugins, use this rule
+ - This will basically add a `type="module"` to the script tag when load the script so we can use `import` inside
+ - With `type="module"`, `document.currentScript` will become `null` so we won't be able to infer the plugin url, to workaround this, make sure you call `Gerrit.install` with the third parameter: `Gerrit.install(() => {}, undefined, 'the_url')` so Gerrit can treat it as a legit plugin
+ - Keep using `injectJsPlugin` if its a single bundled js file
+
#### v0.0.6
- Add two new operators:
diff --git a/src/background.ts b/src/background.ts
index aa605b7..420f99f 100644
--- a/src/background.ts
+++ b/src/background.ts
@@ -114,22 +114,28 @@
return {cancel: false};
}
- const match = rules.filter(isValidRule)
- .find(
+ const matches = rules.filter(isValidRule)
+ .filter(
rule => !isInjectRule(rule) && !rule.disabled &&
new RegExp(rule.target).test(details.url));
- if (match) {
- if (match.operator === Operator.BLOCK) {
- return {cancel: true};
- }
- if (match.operator === Operator.REDIRECT) {
- return {
- redirectUrl:
- details.url.replace(new RegExp(match.target), match.destination),
- };
- }
+ const blockMatch = matches.find(rule => rule.operator === Operator.BLOCK);
+ const redirectMatch = matches.find(rule => rule.operator === Operator.REDIRECT);
+
+ // block match takes highest priority
+ if (blockMatch) {
+ return {cancel: true};
}
+
+ // then redirect
+ if (redirectMatch) {
+ return {
+ redirectUrl:
+ details.url.replace(new RegExp(redirectMatch.target), redirectMatch.destination),
+ };
+ }
+
+ // otherwise, don't do anything
return {cancel: false};
}
diff --git a/src/content_script.ts b/src/content_script.ts
index dc7dbf6..5d196dc 100644
--- a/src/content_script.ts
+++ b/src/content_script.ts
@@ -68,6 +68,14 @@
link.setAttribute('crossorigin', 'anonymous');
document.head.appendChild(link);
});
+ } else if (rule.operator === Operator.INJECT_JS_MODULE_PLUGIN) {
+ onGerritReady().then(() => {
+ const link = document.createElement('script');
+ link.setAttribute('type', 'module');
+ link.setAttribute('src', rule.destination);
+ link.setAttribute('crossorigin', 'anonymous');
+ document.head.appendChild(link);
+ });
} else if (rule.operator === Operator.INJECT_JS_CODE) {
const link = document.createElement('script');
link.innerHTML = rule.destination;
diff --git a/src/manifest.json b/src/manifest.json
index 96ac1d6..978245c 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "Gerrit FE Dev Helper",
"description": "This extension can help you development on gerrit sites, frontend specifically",
- "version": "0.0.6",
+ "version": "0.0.7",
"browser_action": {
"default_icon": "gray-32.png",
"default_title": "Gerrit FE Dev Helper"
diff --git a/src/popup.ts b/src/popup.ts
index 4e5e473..1928597 100644
--- a/src/popup.ts
+++ b/src/popup.ts
@@ -279,6 +279,7 @@
Operator.INJECT_HTML_PLUGIN,
Operator.INJECT_HTML_CODE,
Operator.INJECT_JS_PLUGIN,
+ Operator.INJECT_JS_MODULE_PLUGIN,
Operator.INJECT_JS_CODE,
Operator.ADD_REQUEST_HEADER,
Operator.ADD_RESPONSE_HEADER,
diff --git a/src/utils.ts b/src/utils.ts
index 9283268..7cb4475 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -39,7 +39,7 @@
*/
export function isInjectRule(rule: Rule) {
return [
- Operator.INJECT_JS_PLUGIN, Operator.INJECT_HTML_CODE,
+ Operator.INJECT_JS_MODULE_PLUGIN, Operator.INJECT_JS_PLUGIN, Operator.INJECT_HTML_CODE,
Operator.INJECT_HTML_PLUGIN, Operator.INJECT_JS_CODE
].some(op => op === rule.operator);
}
@@ -53,6 +53,7 @@
INJECT_HTML_PLUGIN = 'injectHtmlPlugin',
INJECT_HTML_CODE = 'injectHtmlCode',
INJECT_JS_PLUGIN = 'injectJSPlugin',
+ INJECT_JS_MODULE_PLUGIN = 'injectJSModule',
INJECT_JS_CODE = 'injectJSCode',
REMOVE_RESPONSE_HEADER = 'rRespHeader',
ADD_RESPONSE_HEADER = 'addRespHeader',