| Index: chrome/common/extensions/docs/examples/api/power/background.js
|
| diff --git a/chrome/common/extensions/docs/examples/api/power/background.js b/chrome/common/extensions/docs/examples/api/power/background.js
|
| index edd18a779d65cf2bbdcf4f700cded2295333ce16..eeaf6a726185deba44fd5446ef69cfb52994013f 100644
|
| --- a/chrome/common/extensions/docs/examples/api/power/background.js
|
| +++ b/chrome/common/extensions/docs/examples/api/power/background.js
|
| @@ -3,23 +3,18 @@
|
| // found in the LICENSE file.
|
|
|
| /**
|
| - * Available levels of power-saving-overriding.
|
| + * States that the extension can be in.
|
| */
|
| -var LevelEnum = {
|
| - DISABLED: '',
|
| +var StateEnum = {
|
| + DISABLED: 'disabled',
|
| DISPLAY: 'display',
|
| SYSTEM: 'system'
|
| };
|
|
|
| /**
|
| - * Key used for storing the current level in {localStorage}.
|
| + * Key used for storing the current state in {localStorage}.
|
| */
|
| -var LEVEL_KEY = 'level';
|
| -
|
| -/**
|
| - * Current {LevelEnum}.
|
| - */
|
| -var currentLevel = LevelEnum.DISABLED;
|
| +var STATE_KEY = 'state';
|
|
|
| /**
|
| * Should the old {chrome.experimental.power} API be used rather than
|
| @@ -28,40 +23,41 @@ var currentLevel = LevelEnum.DISABLED;
|
| var useOldApi = !chrome.power;
|
|
|
| /**
|
| - * Returns the previously-used level.
|
| - * @return {string} Saved {LevelEnum} from local storage.
|
| + * Loads the locally-saved state asynchronously.
|
| + * @param {function} callback Callback invoked with the loaded {StateEnum}.
|
| */
|
| -function getInitialLevel() {
|
| - if (LEVEL_KEY in localStorage) {
|
| - var savedLevel = localStorage[LEVEL_KEY];
|
| - for (var key in LevelEnum) {
|
| - if (savedLevel == LevelEnum[key]) {
|
| - return savedLevel;
|
| +function loadSavedState(callback) {
|
| + chrome.storage.local.get(STATE_KEY, function(items) {
|
| + var savedState = items[STATE_KEY];
|
| + for (var key in StateEnum) {
|
| + if (savedState == StateEnum[key]) {
|
| + callback(savedState);
|
| + return;
|
| }
|
| }
|
| - }
|
| - return LevelEnum.DISABLED;
|
| + callback(StateEnum.DISABLED);
|
| + });
|
| }
|
|
|
| /**
|
| - * Switches to a new power-saving-overriding level.
|
| - * @param {string} newLevel New {LevelEnum} to use.
|
| + * Switches to a new state.
|
| + * @param {string} newState New {StateEnum} to use.
|
| */
|
| -function setLevel(newLevel) {
|
| +function setState(newState) {
|
| var imagePrefix = 'night';
|
| var title = '';
|
|
|
| // The old API doesn't support the "system" level.
|
| - if (useOldApi && newLevel == LevelEnum.SYSTEM)
|
| - newLevel = LevelEnum.DISPLAY;
|
| + if (useOldApi && newState == StateEnum.SYSTEM)
|
| + newState = StateEnum.DISPLAY;
|
|
|
| - switch (newLevel) {
|
| - case LevelEnum.DISABLED:
|
| + switch (newState) {
|
| + case StateEnum.DISABLED:
|
| (useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake();
|
| imagePrefix = 'night';
|
| title = chrome.i18n.getMessage('disabledTitle');
|
| break;
|
| - case LevelEnum.DISPLAY:
|
| + case StateEnum.DISPLAY:
|
| if (useOldApi)
|
| chrome.experimental.power.requestKeepAwake(function() {});
|
| else
|
| @@ -69,17 +65,18 @@ function setLevel(newLevel) {
|
| imagePrefix = 'day';
|
| title = chrome.i18n.getMessage('displayTitle');
|
| break;
|
| - case LevelEnum.SYSTEM:
|
| + case StateEnum.SYSTEM:
|
| chrome.power.requestKeepAwake('system');
|
| imagePrefix = 'sunset';
|
| title = chrome.i18n.getMessage('systemTitle');
|
| break;
|
| default:
|
| - throw 'Invalid level "' + newLevel + '"';
|
| + throw 'Invalid state "' + newState + '"';
|
| }
|
|
|
| - currentLevel = newLevel;
|
| - localStorage[LEVEL_KEY] = currentLevel;
|
| + var items = {};
|
| + items[STATE_KEY] = newState;
|
| + chrome.storage.local.set(items);
|
|
|
| chrome.browserAction.setIcon({
|
| path: {
|
| @@ -90,24 +87,29 @@ function setLevel(newLevel) {
|
| chrome.browserAction.setTitle({title: title});
|
| }
|
|
|
| -/**
|
| - * Cycles levels in response to browser action icon clicks.
|
| - */
|
| -function handleClicked() {
|
| - switch (currentLevel) {
|
| - case LevelEnum.DISABLED:
|
| - setLevel(LevelEnum.DISPLAY);
|
| - break;
|
| - case LevelEnum.DISPLAY:
|
| - setLevel(useOldApi ? LevelEnum.DISABLED : LevelEnum.SYSTEM);
|
| - break;
|
| - case LevelEnum.SYSTEM:
|
| - setLevel(LevelEnum.DISABLED);
|
| - break;
|
| - default:
|
| - throw 'Invalid level "' + currentLevel + '"';
|
| - }
|
| -}
|
| +chrome.browserAction.onClicked.addListener(function() {
|
| + loadSavedState(function(state) {
|
| + switch (state) {
|
| + case StateEnum.DISABLED:
|
| + setState(StateEnum.DISPLAY);
|
| + break;
|
| + case StateEnum.DISPLAY:
|
| + setState(useOldApi ? StateEnum.DISABLED : StateEnum.SYSTEM);
|
| + break;
|
| + case StateEnum.SYSTEM:
|
| + setState(StateEnum.DISABLED);
|
| + break;
|
| + default:
|
| + throw 'Invalid state "' + state + '"';
|
| + }
|
| + });
|
| +});
|
| +
|
| +chrome.runtime.onStartup.addListener(function() {
|
| + loadSavedState(function(state) { setState(state); });
|
| +});
|
|
|
| -chrome.browserAction.onClicked.addListener(handleClicked);
|
| -setLevel(getInitialLevel());
|
| +// TODO(derat): Remove this once http://crbug.com/222473 is fixed.
|
| +chrome.windows.onCreated.addListener(function() {
|
| + loadSavedState(function(state) { setState(state); });
|
| +});
|
|
|