tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 };