diff --git a/extensions/chromium/options/migration.js b/extensions/chromium/options/migration.js index 7073fc5bc7e80..0ecaf2d96e4e4 100644 --- a/extensions/chromium/options/migration.js +++ b/extensions/chromium/options/migration.js @@ -29,6 +29,8 @@ limitations under the License. storageLocal.get(storageKeys, function(values) { if (!values || !Object.keys(values).length) { // No local storage - nothing to migrate. + // ... except possibly for a renamed preference name. + migrateRenamedStorage(); return; } migrateToSyncStorage(values); @@ -63,7 +65,34 @@ limitations under the License. // the migration successful. console.log( 'Successfully migrated preferences from local to sync storage.'); + migrateRenamedStorage(); }); }); } + + // TODO: Remove this migration code somewhere in the future, when most users + // have had their chance of migrating to the new preference format. + // Note: We cannot modify managed preferences, so the migration logic is + // duplicated in web/chromecom.js too. + function migrateRenamedStorage() { + storageSync.get([ + 'enableHandToolOnLoad', + 'cursorToolOnLoad', + ], function(items) { + // Migration code for https://github.com/mozilla/pdf.js/pull/7635. + if (typeof items.enableHandToolOnLoad === 'boolean') { + if (items.enableHandToolOnLoad) { + storageSync.set({ + cursorToolOnLoad: 1, + }, function() { + if (!chrome.runtime.lastError) { + storageSync.remove('enableHandToolOnLoad'); + } + }); + } else { + storageSync.remove('enableHandToolOnLoad'); + } + } + }); + } })(); diff --git a/extensions/chromium/options/options.html b/extensions/chromium/options/options.html index 901cd95e2cf42..6a00062e123cb 100644 --- a/extensions/chromium/options/options.html +++ b/extensions/chromium/options/options.html @@ -80,6 +80,18 @@ + + + + + + Text selection tool + Hand tool + + + + + diff --git a/extensions/chromium/options/options.js b/extensions/chromium/options/options.js index 3746f6c242027..87700db242f0c 100644 --- a/extensions/chromium/options/options.js +++ b/extensions/chromium/options/options.js @@ -79,6 +79,8 @@ Promise.all([ renderPreference = renderDefaultZoomValue(prefSchema.title); } else if (prefName === 'sidebarViewOnLoad') { renderPreference = renderSidebarViewOnLoad(prefSchema.title); + } else if (prefName === 'cursorToolOnLoad') { + renderPreference = renderCursorToolOnLoad(prefSchema.title); } else if (prefName === 'externalLinkTarget') { renderPreference = renderExternalLinkTarget(prefSchema.title); } else { @@ -198,6 +200,23 @@ function renderSidebarViewOnLoad(shortDescription) { return renderPreference; } +function renderCursorToolOnLoad(shortDescription) { + var wrapper = importTemplate('cursorToolOnLoad-template'); + var select = wrapper.querySelector('select'); + select.onchange = function() { + storageArea.set({ + cursorToolOnLoad: 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 55a0df9791d0d..0371a9cf91eb9 100644 --- a/extensions/chromium/preferences_schema.json +++ b/extensions/chromium/preferences_schema.json @@ -27,6 +27,7 @@ "default": 0 }, "enableHandToolOnLoad": { + "description": "Deprecated. Set cursorToolOnLoad to 1 to enable the hand tool by default.", "type": "boolean", "default": false }, diff --git a/web/chromecom.js b/web/chromecom.js index 204eff87d539d..69629b33e432b 100644 --- a/web/chromecom.js +++ b/web/chromecom.js @@ -328,7 +328,18 @@ class ChromePreferences extends BasePreferences { // Get preferences as set by the system administrator. // See extensions/chromium/preferences_schema.json for more information. // These preferences can be overridden by the user. - chrome.storage.managed.get(this.defaults, getPreferences); + chrome.storage.managed.get(this.defaults, function(items) { + // Migration code for https://github.com/mozilla/pdf.js/pull/7635. + // Never remove this, because we have no means of modifying managed + // preferences. + if (items && items.enableHandToolOnLoad && !items.cursorToolOnLoad) { + // if the old enableHandToolOnLoad has a non-default value, + // and cursorToolOnLoad has a default value, migrate. + items.enableHandToolOnLoad = false; + items.cursorToolOnLoad = 1; + } + getPreferences(items); + }); } else { // Managed storage not supported, e.g. in old Chromium versions. getPreferences(this.defaults);