[CRX] Make textLayerMode pref visible and add migration logic
In a1cfa5f4d7c8fcf55e9f3b51a23885dca8782915, the textLayerMode preference was introduced, to replace the disableTextLayer and enhanceTextSelection preferences. As a result, the text selection preference was no longer visible in Chrome (because preferences are only rendered by default for boolean preferences, not for enumerations). This commit adds the necessary bits to extensions/chromium/options/options.{html,js} so that the textLayerMode preference can be changed again. Also, migration logic has been added to move over preferences from the old to the new names: - In web/chromecom.js, the logic is added to translate preferences that were set by an administrator (it is read-only, so this layer is unavoidable). - In extensions/chromium/options/migration.js, similar logic is added, except in this case the preference storage is writable, so this migration logic happens only once. The "enhanced text selection" mode is still experimental, so it has been marked as experimental to signal that there may be bugs. The list of tasks that block promotion to stable is at #7584.
This commit is contained in:
parent
fc83ce1aae
commit
94a49fa048
@ -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']);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
@ -92,6 +92,19 @@ body {
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="textLayerMode-template">
|
||||
<div class="settings-row">
|
||||
<label>
|
||||
<span></span>
|
||||
<select>
|
||||
<option value="0">Disable text selection</option>
|
||||
<option value="1">Enable text selection</option>
|
||||
<option value="2">Enable enhanced mode (experimental)</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="externalLinkTarget-template">
|
||||
<div class="settings-row">
|
||||
<label>
|
||||
|
@ -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');
|
||||
|
@ -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.",
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user