فهرست منبع

improve feature tests

Gildas 3 سال پیش
والد
کامیت
60a3eabfc2
4فایلهای تغییر یافته به همراه117 افزوده شده و 60 حذف شده
  1. 40 3
      src/core/bg/config.js
  2. 3 4
      src/ui/bg/ui-button.js
  3. 5 7
      src/ui/bg/ui-menus.js
  4. 69 46
      src/ui/bg/ui-options.js

+ 40 - 3
src/core/bg/config.js

@@ -30,7 +30,20 @@ const CURRENT_PROFILE_NAME = "-";
 const DEFAULT_PROFILE_NAME = "__Default_Settings__";
 const DISABLED_PROFILE_NAME = "__Disabled_Settings__";
 const REGEXP_RULE_PREFIX = "regexp:";
-const BACKGROUND_SAVE_DEFAULT = !(/Mobile.*Firefox/.test(navigator.userAgent) || /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent));
+
+const IS_NOT_SAFARI = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
+const BACKGROUND_SAVE_SUPPORTED = !(/Mobile.*Firefox/.test(navigator.userAgent) || /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent));
+const BADGE_COLOR_SUPPORTED = IS_NOT_SAFARI;
+const AUTO_SAVE_SUPPORTED = IS_NOT_SAFARI;
+const SELECTABLE_TABS_SUPPORTED = IS_NOT_SAFARI;
+const AUTO_OPEN_EDITOR_SUPPORTED = IS_NOT_SAFARI;
+const OPEN_SAVED_PAGE_SUPPORTED = IS_NOT_SAFARI;
+const INFOBAR_SUPPORTED = IS_NOT_SAFARI;
+const BOOKMARKS_API_SUPPORTED = IS_NOT_SAFARI;
+const IDENTITY_API_SUPPORTED = IS_NOT_SAFARI;
+const CLIPBOARD_API_SUPPORTED = IS_NOT_SAFARI;
+const NATIVE_API_API_SUPPORTED = IS_NOT_SAFARI;
+const WEB_BLOCKING_API_SUPPORTED = IS_NOT_SAFARI;
 
 const DEFAULT_CONFIG = {
 	removeHiddenElements: true,
@@ -66,7 +79,7 @@ const DEFAULT_CONFIG = {
 	maxResourceSize: 10,
 	displayInfobar: true,
 	displayStats: false,
-	backgroundSave: BACKGROUND_SAVE_DEFAULT,
+	backgroundSave: BACKGROUND_SAVE_SUPPORTED,
 	defaultEditorMode: "normal",
 	applySystemTheme: true,
 	autoSaveDelay: 1,
@@ -148,6 +161,18 @@ export {
 	DEFAULT_PROFILE_NAME,
 	DISABLED_PROFILE_NAME,
 	CURRENT_PROFILE_NAME,
+	BACKGROUND_SAVE_SUPPORTED,
+	BADGE_COLOR_SUPPORTED,
+	AUTO_SAVE_SUPPORTED,
+	SELECTABLE_TABS_SUPPORTED,
+	OPEN_SAVED_PAGE_SUPPORTED,
+	AUTO_OPEN_EDITOR_SUPPORTED,
+	INFOBAR_SUPPORTED,
+	BOOKMARKS_API_SUPPORTED,
+	IDENTITY_API_SUPPORTED,
+	CLIPBOARD_API_SUPPORTED,
+	NATIVE_API_API_SUPPORTED,
+	WEB_BLOCKING_API_SUPPORTED,
 	getConfig as get,
 	getRule,
 	getOptions,
@@ -271,7 +296,19 @@ async function onMessage(message) {
 		return {
 			DISABLED_PROFILE_NAME,
 			DEFAULT_PROFILE_NAME,
-			CURRENT_PROFILE_NAME
+			CURRENT_PROFILE_NAME,
+			BACKGROUND_SAVE_SUPPORTED,
+			BADGE_COLOR_SUPPORTED,
+			AUTO_SAVE_SUPPORTED,
+			SELECTABLE_TABS_SUPPORTED,
+			OPEN_SAVED_PAGE_SUPPORTED,
+			AUTO_OPEN_EDITOR_SUPPORTED,
+			INFOBAR_SUPPORTED,
+			BOOKMARKS_API_SUPPORTED,
+			IDENTITY_API_SUPPORTED,
+			CLIPBOARD_API_SUPPORTED,
+			NATIVE_API_API_SUPPORTED,
+			WEB_BLOCKING_API_SUPPORTED
 		};
 	}
 	if (message.method.endsWith(".getRules")) {

+ 3 - 4
src/ui/bg/ui-button.js

@@ -21,8 +21,9 @@
  *   Source.
  */
 
-/* global browser, navigator */
+/* global browser */
 
+import * as config from "./../../core/bg/config.js";
 import { queryTabs } from "./../../core/bg/tabs-util.js";
 import * as tabsData from "./../../core/bg/tabs-data.js";
 import { autoSaveIsEnabled } from "../../core/bg/autosave-util.js";
@@ -49,8 +50,6 @@ const AUTOSAVE_DEFAULT_COLOR = [208, 208, 208, 192];
 const AUTOSAVE_INITIALIZING_COLOR = [64, 64, 64, 192];
 const INJECT_SCRIPTS_STEP = 1;
 
-const BADGE_COLOR_SUPPORTED = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-
 const BUTTON_STATES = {
 	default: {
 		setBadgeBackgroundColor: { color: DEFAULT_COLOR },
@@ -260,7 +259,7 @@ async function refreshAsync(tabId, state) {
 }
 
 async function refreshProperty(tabId, browserActionMethod, browserActionParameter) {
-	const actionMethodSupported = browserActionMethod != "setBadgeBackgroundColor" || BADGE_COLOR_SUPPORTED;
+	const actionMethodSupported = browserActionMethod != "setBadgeBackgroundColor" || config.BADGE_COLOR_SUPPORTED;
 	if (browser.browserAction[browserActionMethod] && actionMethodSupported) {
 		const parameter = JSON.parse(JSON.stringify(browserActionParameter));
 		parameter.tabId = tabId;

+ 5 - 7
src/ui/bg/ui-menus.js

@@ -21,7 +21,7 @@
  *   Source.
  */
 
-/* global browser, URL, navigator */
+/* global browser, URL */
 
 import * as config from "./../../core/bg/config.js";
 import { queryTabs } from "./../../core/bg/tabs-util.js";
@@ -32,8 +32,6 @@ import * as button from "./ui-button.js";
 
 const menus = browser.menus;
 const BROWSER_MENUS_API_SUPPORTED = menus && menus.onClicked && menus.create && menus.update && menus.removeAll;
-const AUTO_SAVE_SUPPORTED = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const SELECTABLE_TABS_SUPPORTED = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
 
 const MENU_ID_SAVE_PAGE = "save-page";
 const MENU_ID_EDIT_AND_SAVE_PAGE = "edit-and-save-page";
@@ -207,7 +205,7 @@ async function createMenus(tab) {
 			parentId: MENU_ID_SAVE_TABS
 		});
 		if (options.contextMenuEnabled) {
-			if (SELECTABLE_TABS_SUPPORTED) {
+			if (config.SELECTABLE_TABS_SUPPORTED) {
 				menus.create({
 					id: MENU_ID_SAVE_SELECTED_TABS,
 					contexts: pageContextsEnabled,
@@ -329,7 +327,7 @@ async function createMenus(tab) {
 				});
 			}
 		}
-		if (AUTO_SAVE_SUPPORTED) {
+		if (config.AUTO_SAVE_SUPPORTED) {
 			menus.create({
 				id: MENU_ID_AUTO_SAVE,
 				contexts: defaultContexts,
@@ -546,7 +544,7 @@ async function refreshTab(tab) {
 			updateAllVisibleValues(false);
 		} else {
 			updateAllVisibleValues(true);
-			if (AUTO_SAVE_SUPPORTED) {
+			if (config.AUTO_SAVE_SUPPORTED) {
 				promises.push(updateCheckedValue(MENU_ID_AUTO_SAVE_DISABLED, !allTabsData[tab.id].autoSave));
 				promises.push(updateCheckedValue(MENU_ID_AUTO_SAVE_TAB, allTabsData[tab.id].autoSave));
 				promises.push(updateCheckedValue(MENU_ID_AUTO_SAVE_UNPINNED, Boolean(allTabsData.autoSaveUnpinned)));
@@ -556,7 +554,7 @@ async function refreshTab(tab) {
 				const options = await config.getOptions(tab.url);
 				promises.push(updateVisibleValue(tab, options.contextMenuEnabled));
 				promises.push(updateTitleValue(MENU_ID_EDIT_AND_SAVE_PAGE, allTabsData[tab.id].savedPageDetected ? MENU_EDIT_PAGE_MESSAGE : MENU_EDIT_AND_SAVE_PAGE_MESSAGE));
-				if (SELECTABLE_TABS_SUPPORTED) {
+				if (config.SELECTABLE_TABS_SUPPORTED) {
 					promises.push(menus.update(MENU_ID_SAVE_SELECTED, { visible: !options.saveRawPage }));
 				}
 				promises.push(menus.update(MENU_ID_EDIT_AND_SAVE_PAGE, { visible: !options.openEditor || allTabsData[tab.id].savedPageDetected }));

+ 69 - 46
src/ui/bg/ui-options.js

@@ -21,22 +21,41 @@
  *   Source.
  */
 
-/* global browser, window, document, localStorage, FileReader, location, fetch, TextDecoder, DOMParser, HTMLElement, navigator */
+/* global browser, window, document, localStorage, FileReader, location, fetch, TextDecoder, DOMParser, HTMLElement */
 
 const HELP_ICON_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABIUlEQVQ4y+2TsarCMBSGvxTBRdqiUZAWOrhJB9EXcPKFfCvfQYfulUKHDqXg4CYUJSioYO4mSDX3ttzt3n87fMlHTpIjlsulxpDZbEYYhgghSNOUOI5Ny2mZYBAELBYLer0eAJ7ncTweKYri4x7LJJRS0u12n7XrukgpjSc0CpVSXK/XZ32/31FKNW85z3PW6zXT6RSAJEnIsqy5UGvNZrNhu90CcDqd+C6tT6J+v//2Th+PB2VZ1hN2Oh3G4zGTyQTbtl/YbrdjtVpxu91+Ljyfz0RRhG3bzOfzF+Y4TvNXvlwuaK2pE4tfzr/wzwsty0IIURlL0998KxRCMBqN8H2/wlzXJQxD2u12vVkeDoeUZUkURRU+GAw4HA7s9/sK+wK6CWHasQ/S/wAAAABJRU5ErkJggg==";
 const HELP_PAGE_PATH = "/src/ui/pages/help.html";
-let DEFAULT_PROFILE_NAME, DISABLED_PROFILE_NAME, CURRENT_PROFILE_NAME;
-const AUTO_SAVE_SUPPORTED = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const BACKGROUND_SAVE_SUPPORTED = !(/Mobile.*Firefox/.test(navigator.userAgent) || /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent));
-const OPEN_SAVED_PAGE_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const INFOBAR_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const BOOKMARKS_API_SUPPORTED = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const IDENTITY_API_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const CLIPBOARD_API_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const NATIVE_API_API_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-const WEB_BLOCKING_API_SUPPORT = !/Safari/.test(navigator.userAgent) || /Chrome/.test(navigator.userAgent);
-
-browser.runtime.sendMessage({ method: "config.getConstants" }).then(data => ({ DEFAULT_PROFILE_NAME, DISABLED_PROFILE_NAME, CURRENT_PROFILE_NAME } = data));
+let DEFAULT_PROFILE_NAME,
+	DISABLED_PROFILE_NAME,
+	CURRENT_PROFILE_NAME,
+	BACKGROUND_SAVE_SUPPORTED,
+	AUTO_SAVE_SUPPORTED,
+	OPEN_SAVED_PAGE_SUPPORTED,
+	AUTO_OPEN_EDITOR_SUPPORTED,
+	INFOBAR_SUPPORTED,
+	BOOKMARKS_API_SUPPORTED,
+	IDENTITY_API_SUPPORTED,
+	CLIPBOARD_API_SUPPORTED,
+	NATIVE_API_API_SUPPORTED,
+	WEB_BLOCKING_API_SUPPORTED;
+browser.runtime.sendMessage({ method: "config.getConstants" }).then(data => {
+	({
+		DEFAULT_PROFILE_NAME,
+		DISABLED_PROFILE_NAME,
+		CURRENT_PROFILE_NAME,
+		BACKGROUND_SAVE_SUPPORTED,
+		AUTO_SAVE_SUPPORTED,
+		OPEN_SAVED_PAGE_SUPPORTED,
+		AUTO_OPEN_EDITOR_SUPPORTED,
+		INFOBAR_SUPPORTED,
+		BOOKMARKS_API_SUPPORTED,
+		IDENTITY_API_SUPPORTED,
+		CLIPBOARD_API_SUPPORTED,
+		NATIVE_API_API_SUPPORTED,
+		WEB_BLOCKING_API_SUPPORTED
+	} = data);
+	init();
+});
 const removeHiddenElementsLabel = document.getElementById("removeHiddenElementsLabel");
 const removeUnusedStylesLabel = document.getElementById("removeUnusedStylesLabel");
 const removeUnusedFontsLabel = document.getElementById("removeUnusedFontsLabel");
@@ -663,41 +682,45 @@ browser.runtime.sendMessage({ method: "tabsData.get" }).then(allTabsData => {
 	tabsData = allTabsData;
 	return refresh(tabsData.profileName);
 });
-if (!AUTO_SAVE_SUPPORTED) {
-	document.getElementById("autoSaveSection").hidden = true;
-	document.getElementById("showAutoSaveProfileOption").hidden = true;
-	rulesContainerElement.classList.add("compact");
-}
-if (!BACKGROUND_SAVE_SUPPORTED) {
-	document.getElementById("backgroundSaveOptions").hidden = true;
-	document.getElementById("confirmFilenameOption").hidden = true;
-	document.getElementById("filenameConflictAction").hidden = true;
-}
-if (!BOOKMARKS_API_SUPPORTED) {
-	document.getElementById("bookmarksOptions").hidden = true;
-}
-if (!OPEN_SAVED_PAGE_SUPPORT) {
-	document.getElementById("openSavedPageOption").hidden = true;
-	document.getElementById("autoOpenEditorOption").hidden = true;
-}
-if (!INFOBAR_SUPPORT) {
-	document.getElementById("displayInfobarOption").hidden = true;
-}
-if (!IDENTITY_API_SUPPORT) {
-	document.getElementById("saveToGDriveOption").hidden = true;
-}
-if (!CLIPBOARD_API_SUPPORT) {
-	document.getElementById("saveToClipboardOption").hidden = true;
-}
-if (!NATIVE_API_API_SUPPORT) {
-	document.getElementById("saveWithCompanionOption").hidden = true;
-}
-if (!WEB_BLOCKING_API_SUPPORT) {
-	document.getElementById("passReferrerOnErrorOption").hidden = true;
-}
-
 getHelpContents();
 
+function init() {
+	if (!AUTO_SAVE_SUPPORTED) {
+		document.getElementById("autoSaveSection").hidden = true;
+		document.getElementById("showAutoSaveProfileOption").hidden = true;
+		rulesContainerElement.classList.add("compact");
+	}
+	if (!BACKGROUND_SAVE_SUPPORTED) {
+		document.getElementById("backgroundSaveOptions").hidden = true;
+		document.getElementById("confirmFilenameOption").hidden = true;
+		document.getElementById("filenameConflictAction").hidden = true;
+	}
+	if (!BOOKMARKS_API_SUPPORTED) {
+		document.getElementById("bookmarksOptions").hidden = true;
+	}
+	if (!OPEN_SAVED_PAGE_SUPPORTED) {
+		document.getElementById("openSavedPageOption").hidden = true;
+	}
+	if (!AUTO_OPEN_EDITOR_SUPPORTED) {
+		document.getElementById("autoOpenEditorOption").hidden = true;
+	}
+	if (!INFOBAR_SUPPORTED) {
+		document.getElementById("displayInfobarOption").hidden = true;
+	}
+	if (!IDENTITY_API_SUPPORTED) {
+		document.getElementById("saveToGDriveOption").hidden = true;
+	}
+	if (!CLIPBOARD_API_SUPPORTED) {
+		document.getElementById("saveToClipboardOption").hidden = true;
+	}
+	if (!NATIVE_API_API_SUPPORTED) {
+		document.getElementById("saveWithCompanionOption").hidden = true;
+	}
+	if (!WEB_BLOCKING_API_SUPPORTED) {
+		document.getElementById("passReferrerOnErrorOption").hidden = true;
+	}
+}
+
 async function refresh(profileName) {
 	const [profiles, rules, companionState] = await Promise.all([
 		browser.runtime.sendMessage({ method: "config.getProfiles" }),