OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * Available levels of power-saving-overriding. |
| 7 */ |
| 8 var LevelEnum = { |
| 9 DISABLED: '', |
| 10 DISPLAY: 'display', |
| 11 SYSTEM: 'system' |
| 12 }; |
| 13 |
| 14 /** |
| 15 * Key used for storing the current level in {localStorage}. |
| 16 */ |
| 17 var LEVEL_KEY = 'level'; |
| 18 |
| 19 /** |
| 20 * Current {LevelEnum}. |
| 21 */ |
| 22 var currentLevel = LevelEnum.DISABLED; |
| 23 |
| 24 /** |
| 25 * Should the old {chrome.experimental.power} API be used rather than |
| 26 * {chrome.power}? |
| 27 */ |
| 28 var useOldApi = !chrome.power; |
| 29 |
| 30 /** |
| 31 * Returns the previously-used level. |
| 32 * @return {string} Saved {LevelEnum} from local storage. |
| 33 */ |
| 34 function getInitialLevel() { |
| 35 if (LEVEL_KEY in localStorage) { |
| 36 var savedLevel = localStorage[LEVEL_KEY]; |
| 37 for (var key in LevelEnum) { |
| 38 if (savedLevel == LevelEnum[key]) { |
| 39 return savedLevel; |
| 40 } |
| 41 } |
| 42 } |
| 43 return LevelEnum.DISABLED; |
| 44 } |
| 45 |
| 46 /** |
| 47 * Switches to a new power-saving-overriding level. |
| 48 * @param {string} newLevel New {LevelEnum} to use. |
| 49 */ |
| 50 function setLevel(newLevel) { |
| 51 var imagePrefix = 'night'; |
| 52 var title = ''; |
| 53 |
| 54 // The old API doesn't support the "system" level. |
| 55 if (useOldApi && newLevel == LevelEnum.SYSTEM) |
| 56 newLevel = LevelEnum.DISPLAY; |
| 57 |
| 58 switch (newLevel) { |
| 59 case LevelEnum.DISABLED: |
| 60 (useOldApi ? chrome.experimental.power : chrome.power).releaseKeepAwake(); |
| 61 imagePrefix = 'night'; |
| 62 title = chrome.i18n.getMessage('disabledTitle'); |
| 63 break; |
| 64 case LevelEnum.DISPLAY: |
| 65 if (useOldApi) |
| 66 chrome.experimental.power.requestKeepAwake(function() {}); |
| 67 else |
| 68 chrome.power.requestKeepAwake('display'); |
| 69 imagePrefix = 'day'; |
| 70 title = chrome.i18n.getMessage('displayTitle'); |
| 71 break; |
| 72 case LevelEnum.SYSTEM: |
| 73 chrome.power.requestKeepAwake('system'); |
| 74 imagePrefix = 'sunset'; |
| 75 title = chrome.i18n.getMessage('systemTitle'); |
| 76 break; |
| 77 default: |
| 78 throw 'Invalid level "' + newLevel + '"'; |
| 79 } |
| 80 |
| 81 currentLevel = newLevel; |
| 82 localStorage[LEVEL_KEY] = currentLevel; |
| 83 |
| 84 chrome.browserAction.setIcon({ |
| 85 path: { |
| 86 '19': 'images/' + imagePrefix + '-19.png', |
| 87 '38': 'images/' + imagePrefix + '-38.png' |
| 88 } |
| 89 }); |
| 90 chrome.browserAction.setTitle({title: title}); |
| 91 } |
| 92 |
| 93 /** |
| 94 * Cycles levels in response to browser action icon clicks. |
| 95 */ |
| 96 function handleClicked() { |
| 97 switch (currentLevel) { |
| 98 case LevelEnum.DISABLED: |
| 99 setLevel(LevelEnum.DISPLAY); |
| 100 break; |
| 101 case LevelEnum.DISPLAY: |
| 102 setLevel(useOldApi ? LevelEnum.DISABLED : LevelEnum.SYSTEM); |
| 103 break; |
| 104 case LevelEnum.SYSTEM: |
| 105 setLevel(LevelEnum.DISABLED); |
| 106 break; |
| 107 default: |
| 108 throw 'Invalid level "' + currentLevel + '"'; |
| 109 } |
| 110 } |
| 111 |
| 112 setLevel(getInitialLevel()); |
| 113 chrome.browserAction.onClicked.addListener(handleClicked); |
OLD | NEW |