diff --git a/extensions/chromium/options/migration.js b/extensions/chromium/options/migration.js index 0ecaf2d96e4e4..ca547850c4214 100644 --- a/extensions/chromium/options/migration.js +++ b/extensions/chromium/options/migration.js @@ -78,6 +78,9 @@ limitations under the License. storageSync.get([ 'enableHandToolOnLoad', 'cursorToolOnLoad', + 'disableTextLayer', + 'enhanceTextSelection', + 'textLayerMode', ], function(items) { // Migration code for https://github.com/mozilla/pdf.js/pull/7635. if (typeof items.enableHandToolOnLoad === 'boolean') { @@ -93,6 +96,23 @@ limitations under the License. storageSync.remove('enableHandToolOnLoad'); } } + // Migration code for https://github.com/mozilla/pdf.js/pull/9479. + if (typeof items.disableTextLayer === 'boolean') { + var textLayerMode = items.disableTextLayer ? 0 : + items.enhanceTextSelection ? 2 : 1; + if (textLayerMode !== 1) { + // Overwrite if computed textLayerMode is not the default value (1). + storageSync.set({ + textLayerMode: textLayerMode, + }, function() { + if (!chrome.runtime.lastError) { + storageSync.remove(['disableTextLayer', 'enhanceTextSelection']); + } + }); + } else { + storageSync.remove(['disableTextLayer', 'enhanceTextSelection']); + } + } }); } })(); diff --git a/extensions/chromium/options/options.html b/extensions/chromium/options/options.html index 6a00062e123cb..5b856920295d2 100644 --- a/extensions/chromium/options/options.html +++ b/extensions/chromium/options/options.html @@ -92,6 +92,19 @@ + + + + + + Disable text selection + Enable text selection + Enable enhanced mode (experimental) + + + + + diff --git a/extensions/chromium/options/options.js b/extensions/chromium/options/options.js index 87700db242f0c..2b5d005f53bfa 100644 --- a/extensions/chromium/options/options.js +++ b/extensions/chromium/options/options.js @@ -81,6 +81,8 @@ Promise.all([ renderPreference = renderSidebarViewOnLoad(prefSchema.title); } else if (prefName === 'cursorToolOnLoad') { renderPreference = renderCursorToolOnLoad(prefSchema.title); + } else if (prefName === 'textLayerMode') { + renderPreference = renderTextLayerMode(prefSchema.title); } else if (prefName === 'externalLinkTarget') { renderPreference = renderExternalLinkTarget(prefSchema.title); } else { @@ -217,6 +219,23 @@ function renderCursorToolOnLoad(shortDescription) { return renderPreference; } +function renderTextLayerMode(shortDescription) { + var wrapper = importTemplate('textLayerMode-template'); + var select = wrapper.querySelector('select'); + select.onchange = function() { + storageArea.set({ + textLayerMode: parseInt(this.value), + }); + }; + wrapper.querySelector('span').textContent = shortDescription; + document.getElementById('settings-boxes').appendChild(wrapper); + + function renderPreference(value) { + select.value = value; + } + return renderPreference; +} + function renderExternalLinkTarget(shortDescription) { var wrapper = importTemplate('externalLinkTarget-template'); var select = wrapper.querySelector('select'); diff --git a/extensions/chromium/preferences_schema.json b/extensions/chromium/preferences_schema.json index 5f365e6610d21..46d2d0c604e8b 100644 --- a/extensions/chromium/preferences_schema.json +++ b/extensions/chromium/preferences_schema.json @@ -75,6 +75,16 @@ "type": "boolean", "default": false }, + "disableTextLayer": { + "description": "DEPRECATED. Set textLayerMode to 0 to disable the text selection layer by default.", + "type": "boolean", + "default": false + }, + "enhanceTextSelection": { + "description": "DEPRECATED. Set textLayerMode to 2 to use the enhanced text selection layer by default.", + "type": "boolean", + "default": false + }, "textLayerMode": { "title": "Text layer mode", "description": "Controls if the text layer is enabled, and the selection mode that is used.\n 0 = Disabled.\n 1 = Enabled.\n 2 = (Experimental) Enabled, with enhanced text selection.", diff --git a/web/chromecom.js b/web/chromecom.js index 43419db8e6f0f..a4605b353f71d 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -314,19 +314,37 @@ class ChromePreferences extends BasePreferences { // compatibility with managed preferences. let defaultManagedPrefs = Object.assign({ enableHandToolOnLoad: false, + disableTextLayer: false, + enhanceTextSelection: false, }, this.defaults); chrome.storage.managed.get(defaultManagedPrefs, function(items) { items = items || defaultManagedPrefs; - // Migration code for https://github.com/mozilla/pdf.js/pull/7635. + // Migration logic for deprecated preferences: If the new preference + // is not defined by an administrator (i.e. the value is the same as + // the default value), and a deprecated preference is set with a + // non-default value, migrate the deprecated preference value to the + // new preference value. // Never remove this, because we have no means of modifying managed // preferences. + + // Migration code for https://github.com/mozilla/pdf.js/pull/7635. if (items.enableHandToolOnLoad && !items.cursorToolOnLoad) { - // if the old enableHandToolOnLoad has a non-default value, - // and cursorToolOnLoad has a default value, migrate. items.cursorToolOnLoad = 1; } delete items.enableHandToolOnLoad; + + // Migration code for https://github.com/mozilla/pdf.js/pull/9479. + if (items.textLayerMode !== 1) { + if (items.disableTextLayer) { + items.textLayerMode = 0; + } else if (items.enhanceTextSelection) { + items.textLayerMode = 2; + } + } + delete items.disableTextLayer; + delete items.enhanceTextSelection; + getPreferences(items); }); } else {