Commit 5cbef475 authored by derat@chromium.org's avatar derat@chromium.org

Update chrome.power example extension.

This renames some "level" variables to "state" to make it
more clear that they don't directly map to the API's "level"
enum.  It also registers chrome.runtime.onStartup and
chrome.windows.onCreated (to work around onStartup apparently
not firing on Chrome OS) listeners and switches from
localStorage to chrome.storage.local.

BUG=none


Review URL: https://chromiumcodereview.appspot.com/13493019

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192992 0039d316-1c4b-4281-b951-d872f2087c98
parent 0032d17f
...@@ -3,23 +3,18 @@ ...@@ -3,23 +3,18 @@
// found in the LICENSE file. // found in the LICENSE file.
/** /**
* Available levels of power-saving-overriding. * States that the extension can be in.
*/ */
var LevelEnum = { var StateEnum = {
DISABLED: '', DISABLED: 'disabled',
DISPLAY: 'display', DISPLAY: 'display',
SYSTEM: 'system' SYSTEM: 'system'
}; };
/** /**
* Key used for storing the current level in {localStorage}. * Key used for storing the current state in {localStorage}.
*/ */
var LEVEL_KEY = 'level'; var STATE_KEY = 'state';
/**
* Current {LevelEnum}.
*/
var currentLevel = LevelEnum.DISABLED;
/** /**
* Should the old {chrome.experimental.power} API be used rather than * Should the old {chrome.experimental.power} API be used rather than
...@@ -28,40 +23,41 @@ var currentLevel = LevelEnum.DISABLED; ...@@ -28,40 +23,41 @@ var currentLevel = LevelEnum.DISABLED;
var useOldApi = !chrome.power; var useOldApi = !chrome.power;
/** /**
* Returns the previously-used level. * Loads the locally-saved state asynchronously.
* @return {string} Saved {LevelEnum} from local storage. * @param {function} callback Callback invoked with the loaded {StateEnum}.
*/ */
function getInitialLevel() { function loadSavedState(callback) {
if (LEVEL_KEY in localStorage) { chrome.storage.local.get(STATE_KEY, function(items) {
var savedLevel = localStorage[LEVEL_KEY]; var savedState = items[STATE_KEY];
for (var key in LevelEnum) { for (var key in StateEnum) {
if (savedLevel == LevelEnum[key]) { if (savedState == StateEnum[key]) {
return savedLevel; callback(savedState);
return;
} }
} }
} callback(StateEnum.DISABLED);
return LevelEnum.DISABLED; });
} }
/** /**
* Switches to a new power-saving-overriding level. * Switches to a new state.
* @param {string} newLevel New {LevelEnum} to use. * @param {string} newState New {StateEnum} to use.
*/ */
function setLevel(newLevel) { function setState(newState) {
var imagePrefix = 'night'; var imagePrefix = 'night';
var title = ''; var title = '';
// The old API doesn't support the "system" level. // The old API doesn't support the "system" level.
if (useOldApi && newLevel == LevelEnum.SYSTEM) if (useOldApi && newState == StateEnum.SYSTEM)
newLevel = LevelEnum.DISPLAY; newState = StateEnum.DISPLAY;
switch (newLevel) { switch (newState) {
case LevelEnum.DISABLED: case StateEnum.DISABLED:
(useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake(); (useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake();
imagePrefix = 'night'; imagePrefix = 'night';
title = chrome.i18n.getMessage('disabledTitle'); title = chrome.i18n.getMessage('disabledTitle');
break; break;
case LevelEnum.DISPLAY: case StateEnum.DISPLAY:
if (useOldApi) if (useOldApi)
chrome.experimental.power.requestKeepAwake(function() {}); chrome.experimental.power.requestKeepAwake(function() {});
else else
...@@ -69,17 +65,18 @@ function setLevel(newLevel) { ...@@ -69,17 +65,18 @@ function setLevel(newLevel) {
imagePrefix = 'day'; imagePrefix = 'day';
title = chrome.i18n.getMessage('displayTitle'); title = chrome.i18n.getMessage('displayTitle');
break; break;
case LevelEnum.SYSTEM: case StateEnum.SYSTEM:
chrome.power.requestKeepAwake('system'); chrome.power.requestKeepAwake('system');
imagePrefix = 'sunset'; imagePrefix = 'sunset';
title = chrome.i18n.getMessage('systemTitle'); title = chrome.i18n.getMessage('systemTitle');
break; break;
default: default:
throw 'Invalid level "' + newLevel + '"'; throw 'Invalid state "' + newState + '"';
} }
currentLevel = newLevel; var items = {};
localStorage[LEVEL_KEY] = currentLevel; items[STATE_KEY] = newState;
chrome.storage.local.set(items);
chrome.browserAction.setIcon({ chrome.browserAction.setIcon({
path: { path: {
...@@ -90,24 +87,29 @@ function setLevel(newLevel) { ...@@ -90,24 +87,29 @@ function setLevel(newLevel) {
chrome.browserAction.setTitle({title: title}); chrome.browserAction.setTitle({title: title});
} }
/** chrome.browserAction.onClicked.addListener(function() {
* Cycles levels in response to browser action icon clicks. loadSavedState(function(state) {
*/ switch (state) {
function handleClicked() { case StateEnum.DISABLED:
switch (currentLevel) { setState(StateEnum.DISPLAY);
case LevelEnum.DISABLED: break;
setLevel(LevelEnum.DISPLAY); case StateEnum.DISPLAY:
break; setState(useOldApi ? StateEnum.DISABLED : StateEnum.SYSTEM);
case LevelEnum.DISPLAY: break;
setLevel(useOldApi ? LevelEnum.DISABLED : LevelEnum.SYSTEM); case StateEnum.SYSTEM:
break; setState(StateEnum.DISABLED);
case LevelEnum.SYSTEM: break;
setLevel(LevelEnum.DISABLED); default:
break; throw 'Invalid state "' + state + '"';
default: }
throw 'Invalid level "' + currentLevel + '"'; });
} });
}
chrome.runtime.onStartup.addListener(function() {
loadSavedState(function(state) { setState(state); });
});
chrome.browserAction.onClicked.addListener(handleClicked); // TODO(derat): Remove this once http://crbug.com/222473 is fixed.
setLevel(getInitialLevel()); chrome.windows.onCreated.addListener(function() {
loadSavedState(function(state) { setState(state); });
});
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"name": "__MSG_extensionName__", "name": "__MSG_extensionName__",
"description": "__MSG_extensionDescription__", "description": "__MSG_extensionDescription__",
"version": "1.4", "version": "1.6",
"icons": { "icons": {
"16": "images/icon-16.png", "16": "images/icon-16.png",
"48": "images/icon-48.png", "48": "images/icon-48.png",
...@@ -12,7 +12,8 @@ ...@@ -12,7 +12,8 @@
"permissions": [ "permissions": [
"experimental", "experimental",
"power" "power",
"storage"
], ],
"browser_action": { "browser_action": {
"default_title": "__MSG_disabledTitle__", "default_title": "__MSG_disabledTitle__",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment