Kaynağa Gözat

refactor: reuse extension path constants

tophf 3 yıl önce
ebeveyn
işleme
a2d4063f58

+ 2 - 2
src/background/index.js

@@ -1,6 +1,6 @@
 import '@/common/browser';
 import { getActiveTab, makePause, sendCmd } from '@/common';
-import { TIMEOUT_24HOURS, TIMEOUT_MAX, extensionRoot, extensionOrigin } from '@/common/consts';
+import { TIMEOUT_24HOURS, TIMEOUT_MAX } from '@/common/consts';
 import { deepCopy } from '@/common/object';
 import * as tld from '@/common/tld';
 import * as sync from './sync';
@@ -136,7 +136,7 @@ initialize(() => {
         ],
         actions: [
           new api.RequestContentScript({
-            js: browser.runtime.getManifest().content_scripts[0].js,
+            js: extensionManifest.content_scripts[0].js,
             // Not using `allFrames:true` as there's no improvement in frames
           }),
         ],

+ 1 - 1
src/background/utils/db.js

@@ -3,7 +3,7 @@ import {
   getFullUrl, getScriptName, getScriptUpdateUrl, isRemote, sendCmd, trueJoin,
   getScriptPrettyUrl, makePause,
 } from '@/common';
-import { ICON_PREFIX, INFERRED, TIMEOUT_WEEK } from '@/common/consts';
+import { INFERRED, TIMEOUT_WEEK } from '@/common/consts';
 import { deepSize, forEachEntry, forEachKey, forEachValue } from '@/common/object';
 import pluginEvents from '../plugin/events';
 import { getDefaultCustom, getNameURI, inferScriptProps, newScript, parseMeta } from './script';

+ 1 - 1
src/background/utils/hotkeys.js

@@ -7,7 +7,7 @@ postInitialize.push(() => {
       commands.OpenEditor();
     } else {
       const route = cmd === 'settings' ? `#${cmd}` : '';
-      commands.TabOpen({ url: `/options/index.html${route}` });
+      commands.TabOpen({ url: `${extensionOptionsPage}${route}` });
     }
   });
 });

+ 1 - 1
src/background/utils/icon.js

@@ -1,5 +1,5 @@
 import { i18n, makeDataUri, noop } from '@/common';
-import { BLACKLIST, ICON_PREFIX, INJECTABLE_TAB_URL_RE } from '@/common/consts';
+import { BLACKLIST, INJECTABLE_TAB_URL_RE } from '@/common/consts';
 import { objectPick } from '@/common/object';
 import { postInitialize } from './init';
 import { addOwnCommands, addPublicCommands, forEachTab } from './message';

+ 1 - 1
src/background/utils/popup-tracker.js

@@ -17,7 +17,7 @@ addPublicCommands({
 postInitialize.push(() => {
   browser.runtime.onConnect.addListener(onPopupOpened);
   browser.webRequest.onBeforeRequest.addListener(prefetchSetPopup, {
-    urls: [browser.runtime.getURL(browser.runtime.getManifest().browser_action.default_popup)],
+    urls: [extensionRoot + extensionManifest.browser_action.default_popup],
     types: ['main_frame'],
   });
 });

+ 0 - 1
src/background/utils/requests-core.js

@@ -1,5 +1,4 @@
 import { buffer2string, getUniqId, isEmpty, noop } from '@/common';
-import { extensionOrigin } from '@/common/consts';
 import { forEachEntry } from '@/common/object';
 import ua from '@/common/ua';
 

+ 1 - 2
src/background/utils/tab-redirector.js

@@ -1,5 +1,4 @@
 import { request, noop, i18n, getUniqId } from '@/common';
-import { extensionRoot } from '@/common/consts';
 import ua from '@/common/ua';
 import cache from './cache';
 import { addPublicCommands, commands } from './message';
@@ -52,7 +51,7 @@ const blacklistRe = re`/^https?:\/\/(
   (greasyfork|openuserjs)\\.org
 )\//ix`;
 const resolveVirtualUrl = url => (
-  `${extensionRoot}options/index.html#scripts/${+url.split('#')[1]}`
+  `${extensionOptionsPage}${ROUTE_SCRIPTS}/${+url.split('#')[1]}`
 );
 // FF can't intercept virtual .user.js URL via webRequest, so we redirect it explicitly
 const virtualUrlRe = IS_FIREFOX && new RegExp((

+ 0 - 1
src/background/utils/tabs.js

@@ -1,5 +1,4 @@
 import { getActiveTab, noop, sendTabCmd, getFullUrl } from '@/common';
-import { extensionRoot } from '@/common/consts';
 import ua from '@/common/ua';
 import { addOwnCommands, addPublicCommands, commands } from './message';
 import { getOption } from './options';

+ 0 - 3
src/common/consts.js

@@ -24,8 +24,5 @@ export const TIMEOUT_HOUR = 60 * 60 * 1000;
 export const TIMEOUT_24HOURS = 24 * 60 * 60 * 1000;
 export const TIMEOUT_WEEK = 7 * 24 * 60 * 60 * 1000;
 
-export const extensionRoot = !process.env.IS_INJECTED && browser.runtime.getURL('/');
-export const extensionOrigin = !process.env.IS_INJECTED && extensionRoot.slice(0, -1);
-export const ICON_PREFIX = `${extensionRoot}public/images/icon`;
 export const BLACKLIST = 'blacklist';
 export const BLACKLIST_ERRORS = `${BLACKLIST}Errors`;

+ 2 - 4
src/common/index.js

@@ -1,8 +1,6 @@
 // SAFETY WARNING! Exports used by `injected` must make ::safe() calls and use __proto__:null
 
-import {
-  browser, extensionRoot, HOMEPAGE_URL, ICON_PREFIX, INFERRED, SUPPORT_URL,
-} from '@/common/consts';
+import { browser, HOMEPAGE_URL, INFERRED, SUPPORT_URL } from './consts';
 import { deepCopy } from './object';
 import { blob2base64, i18n, isDataUri } from './util';
 
@@ -19,7 +17,7 @@ if (process.env.DEV && process.env.IS_INJECTED !== 'injected-web') {
   }
 }
 
-export const defaultImage = `${ICON_PREFIX}128.png`;
+export const defaultImage = !process.env.IS_INJECTED && `${ICON_PREFIX}128.png`;
 /** Will be encoded to avoid splitting the URL in devtools UI */
 const BAD_URL_CHAR = /[#/?]/g;
 /** Fullwidth range starts at 0xFF00, normal range starts at space char code 0x20 */

+ 0 - 1
src/common/load-script-icon.js

@@ -1,4 +1,3 @@
-import { ICON_PREFIX } from '@/common/consts';
 import { isDataUri, isRemote, sendCmdDirectly } from '@/common/index';
 
 // TODO: convert this into a component tag e.g. <safe-icon>

+ 6 - 0
src/common/safe-globals.js

@@ -20,3 +20,9 @@ export const { apply: safeApply } = Reflect;
 export const hasOwnProperty = safeApply.call.bind(({}).hasOwnProperty);
 export const safeCall = Object.call.bind(Object.call);
 export const IS_FIREFOX = !global.chrome.app;
+export const ROUTE_SCRIPTS = `#scripts`;
+export const extensionRoot = global.chrome.runtime.getURL('/');
+export const extensionOrigin = extensionRoot.slice(0, -1);
+export const extensionManifest = global.chrome.runtime.getManifest();
+export const extensionOptionsPage = extensionRoot + extensionManifest.options_page;
+export const ICON_PREFIX = `${extensionRoot}public/images/icon`;

+ 1 - 1
src/common/ui/favicon.js

@@ -1,7 +1,7 @@
 export const isHiDPI = matchMedia('screen and (min-resolution: 144dpi)').matches;
 
 if (IS_FIREFOX) { // Firefox doesn't show favicon
-  const icons = browser.runtime.getManifest().browser_action.default_icon;
+  const icons = extensionManifest.browser_action.default_icon;
   const el = document.createElement('link');
   el.rel = 'icon';
   el.href = icons[isHiDPI ? 32 : 16];

+ 1 - 1
src/options/views/edit/index.vue

@@ -317,7 +317,7 @@ export default {
         this.errors = res.errors;
         if (newId) {
           this.script = res.update;
-          if (!id) window.history.replaceState(null, this.scriptName, `#scripts/${newId}`);
+          if (!id) history.replaceState(null, this.scriptName, `${ROUTE_SCRIPTS}/${newId}`);
         }
       } catch (err) {
         showConfirmation(`${err.message || err}`, {

+ 1 - 1
src/options/views/script-item.vue

@@ -186,7 +186,7 @@ export default {
       return this.focused ? 0 : -1;
     },
     url() {
-      return `#scripts/${this.script.props.id}`;
+      return `${ROUTE_SCRIPTS}/${this.script.props.id}`;
     },
     urls() {
       return {

+ 2 - 3
src/options/views/tab-about.vue

@@ -30,10 +30,9 @@ import { focusMe } from '@/common/ui';
 
 export default {
   data() {
-    const manifest = browser.runtime.getManifest();
     return {
-      name: manifest.name,
-      version: manifest.version,
+      name: extensionManifest.name,
+      version: extensionManifest.version,
       language: browser.i18n.getUILanguage(),
     };
   },

+ 2 - 4
src/popup/views/app.vue

@@ -194,8 +194,7 @@ import { reactive } from 'vue';
 import Tooltip from 'vueleton/lib/tooltip';
 import options from '@/common/options';
 import {
-  getScriptHome, getScriptName, getScriptSupportUrl, getScriptUpdateUrl,
-  i18n, makePause, sendCmdDirectly, sendTabCmd,
+  getScriptHome, getScriptName, getScriptSupportUrl, getScriptUpdateUrl, i18n, makePause, sendCmdDirectly, sendTabCmd,
 } from '@/common';
 import { objectPick } from '@/common/object';
 import { focusMe } from '@/common/ui';
@@ -203,8 +202,7 @@ import Icon from '@/common/ui/icon';
 import { keyboardService, isInput, handleTabNavigation } from '@/common/keyboard';
 import { mutex, store } from '../utils';
 
-const manifest = browser.runtime.getManifest();
-const NAME = `${manifest.name} ${manifest.version}`;
+const NAME = `${extensionManifest.name} ${process.env.VM_VER}`;
 const SCRIPT_CLS = '.script';
 let mousedownElement;
 

+ 2 - 5
test/mock/polyfill.js

@@ -1,5 +1,6 @@
 import tldRules from 'tldjs/rules.json';
 
+global.chrome =
 global.browser = {
   storage: {
     local: {
@@ -15,11 +16,7 @@ global.browser = {
   },
   runtime: {
     getURL: path => path,
-  },
-};
-global.chrome = {
-  runtime: {
-    getURL: browser.runtime.getURL,
+    getManifest: () => ({}),
   },
 };
 if (!window.Response) window.Response = { prototype: {} };