device.js (2046B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { Actor } = require("resource://devtools/shared/protocol.js"); 8 const { deviceSpec } = require("resource://devtools/shared/specs/device.js"); 9 10 const { 11 DevToolsServer, 12 } = require("resource://devtools/server/devtools-server.js"); 13 const { getSystemInfo } = require("resource://devtools/shared/system.js"); 14 const { AppConstants } = ChromeUtils.importESModule( 15 "resource://gre/modules/AppConstants.sys.mjs", 16 { global: "contextual" } 17 ); 18 19 exports.DeviceActor = class DeviceActor extends Actor { 20 constructor(conn) { 21 super(conn, deviceSpec); 22 // pageshow and pagehide event release wake lock, so we have to acquire 23 // wake lock again by pageshow event 24 this._onPageShow = this._onPageShow.bind(this); 25 if (this._window) { 26 this._window.addEventListener("pageshow", this._onPageShow, true); 27 } 28 this._acquireWakeLock(); 29 } 30 31 destroy() { 32 super.destroy(); 33 this._releaseWakeLock(); 34 if (this._window) { 35 this._window.removeEventListener("pageshow", this._onPageShow, true); 36 } 37 } 38 39 getDescription() { 40 return Object.assign({}, getSystemInfo(), { 41 canDebugServiceWorkers: true, 42 }); 43 } 44 45 _acquireWakeLock() { 46 if (AppConstants.platform !== "android") { 47 return; 48 } 49 50 const pm = Cc["@mozilla.org/power/powermanagerservice;1"].getService( 51 Ci.nsIPowerManagerService 52 ); 53 this._wakelock = pm.newWakeLock("screen", this._window); 54 } 55 56 _releaseWakeLock() { 57 if (this._wakelock) { 58 try { 59 this._wakelock.unlock(); 60 } catch (e) { 61 // Ignore error since wake lock is already unlocked 62 } 63 this._wakelock = null; 64 } 65 } 66 67 _onPageShow() { 68 this._releaseWakeLock(); 69 this._acquireWakeLock(); 70 } 71 72 get _window() { 73 return Services.wm.getMostRecentWindow(DevToolsServer.chromeWindowType); 74 } 75 };