Skip to content

Commit

Permalink
Merge pull request mozilla#8653 from Rob--W/crx-migrate-pref-enableHa…
Browse files Browse the repository at this point in the history
…ndToolOnLoad-to-cursorToolOnLoad

Add UI for the cursorToolOnLoad pref in the Chrome extension + migration logic
  • Loading branch information
timvandermeij authored Jul 16, 2017
2 parents bf70eea + 77e8992 commit d373b16
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 1 deletion.
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

0 comments on commit d373b16

Please sign in to comment.