Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add UI for the cursorToolOnLoad pref in the Chrome extension + migration logic #8653

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions extensions/chromium/options/migration.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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');
}
}
});
}
})();
12 changes: 12 additions & 0 deletions extensions/chromium/options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,18 @@
</div>
</template>

<template id="cursorToolOnLoad-template">
<div class="settings-row">
<label>
<span></span>
<select>
<option value="0">Text selection tool</option>
<option value="1">Hand tool</option>
</select>
</label>
</div>
</template>

<template id="externalLinkTarget-template">
<div class="settings-row">
<label>
Expand Down
19 changes: 19 additions & 0 deletions extensions/chromium/options/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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');
Expand Down
1 change: 1 addition & 0 deletions extensions/chromium/preferences_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"default": 0
},
"enableHandToolOnLoad": {
"description": "Deprecated. Set cursorToolOnLoad to 1 to enable the hand tool by default.",
"type": "boolean",
"default": false
},
Expand Down
13 changes: 12 additions & 1 deletion web/chromecom.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down