Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: chrome/common/extensions/docs/examples/api/power/background.js

Issue 13493019: Update chrome.power example extension. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove tabs permission and bump to 1.6 Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/common/extensions/docs/examples/api/power/manifest.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Available levels of power-saving-overriding. 6 * States that the extension can be in.
7 */ 7 */
8 var LevelEnum = { 8 var StateEnum = {
9 DISABLED: '', 9 DISABLED: 'disabled',
10 DISPLAY: 'display', 10 DISPLAY: 'display',
11 SYSTEM: 'system' 11 SYSTEM: 'system'
12 }; 12 };
13 13
14 /** 14 /**
15 * Key used for storing the current level in {localStorage}. 15 * Key used for storing the current state in {localStorage}.
16 */ 16 */
17 var LEVEL_KEY = 'level'; 17 var STATE_KEY = 'state';
18
19 /**
20 * Current {LevelEnum}.
21 */
22 var currentLevel = LevelEnum.DISABLED;
23 18
24 /** 19 /**
25 * Should the old {chrome.experimental.power} API be used rather than 20 * Should the old {chrome.experimental.power} API be used rather than
26 * {chrome.power}? 21 * {chrome.power}?
27 */ 22 */
28 var useOldApi = !chrome.power; 23 var useOldApi = !chrome.power;
29 24
30 /** 25 /**
31 * Returns the previously-used level. 26 * Loads the locally-saved state asynchronously.
32 * @return {string} Saved {LevelEnum} from local storage. 27 * @param {function} callback Callback invoked with the loaded {StateEnum}.
33 */ 28 */
34 function getInitialLevel() { 29 function loadSavedState(callback) {
35 if (LEVEL_KEY in localStorage) { 30 chrome.storage.local.get(STATE_KEY, function(items) {
36 var savedLevel = localStorage[LEVEL_KEY]; 31 var savedState = items[STATE_KEY];
37 for (var key in LevelEnum) { 32 for (var key in StateEnum) {
38 if (savedLevel == LevelEnum[key]) { 33 if (savedState == StateEnum[key]) {
39 return savedLevel; 34 callback(savedState);
35 return;
40 } 36 }
41 } 37 }
42 } 38 callback(StateEnum.DISABLED);
43 return LevelEnum.DISABLED; 39 });
44 } 40 }
45 41
46 /** 42 /**
47 * Switches to a new power-saving-overriding level. 43 * Switches to a new state.
48 * @param {string} newLevel New {LevelEnum} to use. 44 * @param {string} newState New {StateEnum} to use.
49 */ 45 */
50 function setLevel(newLevel) { 46 function setState(newState) {
51 var imagePrefix = 'night'; 47 var imagePrefix = 'night';
52 var title = ''; 48 var title = '';
53 49
54 // The old API doesn't support the "system" level. 50 // The old API doesn't support the "system" level.
55 if (useOldApi && newLevel == LevelEnum.SYSTEM) 51 if (useOldApi && newState == StateEnum.SYSTEM)
56 newLevel = LevelEnum.DISPLAY; 52 newState = StateEnum.DISPLAY;
57 53
58 switch (newLevel) { 54 switch (newState) {
59 case LevelEnum.DISABLED: 55 case StateEnum.DISABLED:
60 (useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake(); 56 (useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake();
61 imagePrefix = 'night'; 57 imagePrefix = 'night';
62 title = chrome.i18n.getMessage('disabledTitle'); 58 title = chrome.i18n.getMessage('disabledTitle');
63 break; 59 break;
64 case LevelEnum.DISPLAY: 60 case StateEnum.DISPLAY:
65 if (useOldApi) 61 if (useOldApi)
66 chrome.experimental.power.requestKeepAwake(function() {}); 62 chrome.experimental.power.requestKeepAwake(function() {});
67 else 63 else
68 chrome.power.requestKeepAwake('display'); 64 chrome.power.requestKeepAwake('display');
69 imagePrefix = 'day'; 65 imagePrefix = 'day';
70 title = chrome.i18n.getMessage('displayTitle'); 66 title = chrome.i18n.getMessage('displayTitle');
71 break; 67 break;
72 case LevelEnum.SYSTEM: 68 case StateEnum.SYSTEM:
73 chrome.power.requestKeepAwake('system'); 69 chrome.power.requestKeepAwake('system');
74 imagePrefix = 'sunset'; 70 imagePrefix = 'sunset';
75 title = chrome.i18n.getMessage('systemTitle'); 71 title = chrome.i18n.getMessage('systemTitle');
76 break; 72 break;
77 default: 73 default:
78 throw 'Invalid level "' + newLevel + '"'; 74 throw 'Invalid state "' + newState + '"';
79 } 75 }
80 76
81 currentLevel = newLevel; 77 var items = {};
82 localStorage[LEVEL_KEY] = currentLevel; 78 items[STATE_KEY] = newState;
79 chrome.storage.local.set(items);
83 80
84 chrome.browserAction.setIcon({ 81 chrome.browserAction.setIcon({
85 path: { 82 path: {
86 '19': 'images/' + imagePrefix + '-19.png', 83 '19': 'images/' + imagePrefix + '-19.png',
87 '38': 'images/' + imagePrefix + '-38.png' 84 '38': 'images/' + imagePrefix + '-38.png'
88 } 85 }
89 }); 86 });
90 chrome.browserAction.setTitle({title: title}); 87 chrome.browserAction.setTitle({title: title});
91 } 88 }
92 89
93 /** 90 chrome.browserAction.onClicked.addListener(function() {
94 * Cycles levels in response to browser action icon clicks. 91 loadSavedState(function(state) {
95 */ 92 switch (state) {
96 function handleClicked() { 93 case StateEnum.DISABLED:
97 switch (currentLevel) { 94 setState(StateEnum.DISPLAY);
98 case LevelEnum.DISABLED: 95 break;
99 setLevel(LevelEnum.DISPLAY); 96 case StateEnum.DISPLAY:
100 break; 97 setState(useOldApi ? StateEnum.DISABLED : StateEnum.SYSTEM);
101 case LevelEnum.DISPLAY: 98 break;
102 setLevel(useOldApi ? LevelEnum.DISABLED : LevelEnum.SYSTEM); 99 case StateEnum.SYSTEM:
103 break; 100 setState(StateEnum.DISABLED);
104 case LevelEnum.SYSTEM: 101 break;
105 setLevel(LevelEnum.DISABLED); 102 default:
106 break; 103 throw 'Invalid state "' + state + '"';
107 default: 104 }
108 throw 'Invalid level "' + currentLevel + '"'; 105 });
109 } 106 });
110 }
111 107
112 chrome.browserAction.onClicked.addListener(handleClicked); 108 chrome.runtime.onStartup.addListener(function() {
113 setLevel(getInitialLevel()); 109 loadSavedState(function(state) { setState(state); });
110 });
111
112 // TODO(derat): Remove this once http://crbug.com/222473 is fixed.
113 chrome.windows.onCreated.addListener(function() {
114 loadSavedState(function(state) { setState(state); });
115 });
OLDNEW
« no previous file with comments | « no previous file | chrome/common/extensions/docs/examples/api/power/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698