diff --git a/api-samples/power/keepAwake Basic/README.md b/api-samples/power/keepAwake Basic/README.md new file mode 100644 index 0000000000..0ef26affe2 --- /dev/null +++ b/api-samples/power/keepAwake Basic/README.md @@ -0,0 +1,13 @@ +# chrome.power + +This extension demonstrates the `chrome.power` API by allowing users to override their system's power management features. + +## Overview + +The extension adds a popup that cycles different states when clicked. It will go though a mode that prevents the display from dimming or going to sleep, a mode that keeps the system awake but allows the screen to dim/go to sleep, and a mode that uses the system's default. + +## Running this extension + +1. Clone this repository. +2. Load this directory in Chrome as an [unpacked extension](https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/#load-unpacked). +3. Pin the extension and click the action button. diff --git a/api-samples/power/keepAwake Basic/_locales/en/messages.json b/api-samples/power/keepAwake Basic/_locales/en/messages.json new file mode 100644 index 0000000000..ef50944de1 --- /dev/null +++ b/api-samples/power/keepAwake Basic/_locales/en/messages.json @@ -0,0 +1,22 @@ +{ + "extensionName": { + "message": "Keep Awake", + "description": "Extension name." + }, + "extensionDescription": { + "message": "Override system power-saving settings.", + "description": "Extension description." + }, + "disabledTitle": { + "message": "Default power-saving settings", + "description": "Browser action title when disabled." + }, + "displayTitle": { + "message": "Screen will be kept on", + "description": "Browser action title when preventing screen-off." + }, + "systemTitle": { + "message": "System will stay awake", + "description": "Browser action title when preventing system sleep." + } +} diff --git a/api-samples/power/keepAwake Basic/background.js b/api-samples/power/keepAwake Basic/background.js new file mode 100644 index 0000000000..59dd9b62a5 --- /dev/null +++ b/api-samples/power/keepAwake Basic/background.js @@ -0,0 +1,99 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * States that the extension can be in. + */ +let StateEnum = { + DISABLED: 'disabled', + DISPLAY: 'display', + SYSTEM: 'system' +}; + +/** + * Key used for storing the current state in {localStorage}. + */ +let STATE_KEY = 'state'; + +/** + * Loads the locally-saved state asynchronously. + * @param {function} callback Callback invoked with the loaded {StateEnum}. + */ +function loadSavedState(callback) { + chrome.storage.local.get(STATE_KEY, function (items) { + let savedState = items[STATE_KEY]; + for (let key in StateEnum) { + if (savedState == StateEnum[key]) { + callback(savedState); + return; + } + } + callback(StateEnum.DISABLED); + }); +} + +/** + * Switches to a new state. + * @param {string} newState New {StateEnum} to use. + */ +function setState(newState) { + let imagePrefix = 'night'; + let title = ''; + + switch (newState) { + case StateEnum.DISABLED: + chrome.power.releaseKeepAwake(); + imagePrefix = 'night'; + title = chrome.i18n.getMessage('disabledTitle'); + break; + case StateEnum.DISPLAY: + chrome.power.requestKeepAwake('display'); + imagePrefix = 'day'; + title = chrome.i18n.getMessage('displayTitle'); + break; + case StateEnum.SYSTEM: + chrome.power.requestKeepAwake('system'); + imagePrefix = 'sunset'; + title = chrome.i18n.getMessage('systemTitle'); + break; + default: + throw 'Invalid state "' + newState + '"'; + } + + let items = {}; + items[STATE_KEY] = newState; + chrome.storage.local.set(items); + + chrome.action.setIcon({ + path: { + 19: 'images/' + imagePrefix + '-19.png', + 38: 'images/' + imagePrefix + '-38.png' + } + }); + chrome.action.setTitle({ title: title }); +} + +chrome.action.onClicked.addListener(function () { + loadSavedState(function (state) { + switch (state) { + case StateEnum.DISABLED: + setState(StateEnum.DISPLAY); + break; + case StateEnum.DISPLAY: + setState(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); + }); +}); diff --git a/api-samples/power/keepAwake Basic/images/day-19.png b/api-samples/power/keepAwake Basic/images/day-19.png new file mode 100644 index 0000000000..04965f76ea Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/day-19.png differ diff --git a/api-samples/power/keepAwake Basic/images/day-38.png b/api-samples/power/keepAwake Basic/images/day-38.png new file mode 100644 index 0000000000..1c7484218c Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/day-38.png differ diff --git a/api-samples/power/keepAwake Basic/images/icon-128.png b/api-samples/power/keepAwake Basic/images/icon-128.png new file mode 100644 index 0000000000..5159ca4146 Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/icon-128.png differ diff --git a/api-samples/power/keepAwake Basic/images/icon-16.png b/api-samples/power/keepAwake Basic/images/icon-16.png new file mode 100644 index 0000000000..3478152160 Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/icon-16.png differ diff --git a/api-samples/power/keepAwake Basic/images/icon-48.png b/api-samples/power/keepAwake Basic/images/icon-48.png new file mode 100644 index 0000000000..73d8935835 Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/icon-48.png differ diff --git a/api-samples/power/keepAwake Basic/images/night-19.png b/api-samples/power/keepAwake Basic/images/night-19.png new file mode 100644 index 0000000000..1fee02d8dc Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/night-19.png differ diff --git a/api-samples/power/keepAwake Basic/images/night-38.png b/api-samples/power/keepAwake Basic/images/night-38.png new file mode 100644 index 0000000000..581b588631 Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/night-38.png differ diff --git a/api-samples/power/keepAwake Basic/images/sunset-19.png b/api-samples/power/keepAwake Basic/images/sunset-19.png new file mode 100644 index 0000000000..aedc0d8f4d Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/sunset-19.png differ diff --git a/api-samples/power/keepAwake Basic/images/sunset-38.png b/api-samples/power/keepAwake Basic/images/sunset-38.png new file mode 100644 index 0000000000..bdb716a210 Binary files /dev/null and b/api-samples/power/keepAwake Basic/images/sunset-38.png differ diff --git a/api-samples/power/keepAwake Basic/manifest.json b/api-samples/power/keepAwake Basic/manifest.json new file mode 100644 index 0000000000..00b569af95 --- /dev/null +++ b/api-samples/power/keepAwake Basic/manifest.json @@ -0,0 +1,26 @@ +{ + "manifest_version": 3, + + "name": "__MSG_extensionName__", + "description": "__MSG_extensionDescription__", + "version": "1.9", + "icons": { + "16": "images/icon-16.png", + "48": "images/icon-48.png", + "128": "images/icon-128.png" + }, + + "permissions": ["power", "storage"], + "action": { + "default_title": "__MSG_disabledTitle__", + "default_icon": { + "19": "images/night-19.png", + "38": "images/night-38.png" + } + }, + "background": { + "service_worker": "background.js" + }, + + "default_locale": "en" +}