[Power] Prevent override of power level locked with Web API 81/174881/1
authorPawel Wasowski <p.wasowski2@partner.samsung.com>
Wed, 4 Apr 2018 16:33:30 +0000 (18:33 +0200)
committerPawel Wasowski <p.wasowski2@partner.samsung.com>
Wed, 4 Apr 2018 16:42:52 +0000 (18:42 +0200)
Chromium used to override power level locked by Web API with its own
settings. The level set by Web API was not restored.
From now on, Chromium will not override power level lock, after receiving
"__DisableChromiumInternalPowerLock" message from the Web API
and will be able to control the locked power level,
after receiving "__EnableChromiumInternalPowerLock" message.

Change-Id: Ia14f873766e26bd02ae7eecb182c69e0b6af00e8
Signed-off-by: Pawel Wasowski <p.wasowski2@partner.samsung.com>
src/power/power_manager.cc
src/power/power_manager.h
src/utils/utils_api.js

index c8638b618dffad1487726fa056d6bc468729500d..3646d8f0fe305d5e8bad35d54c044ca3e09a09bb 100644 (file)
@@ -387,6 +387,16 @@ PlatformResult PowerManager::RequestScreenState(PowerState state) {
                               ("device_power_request_lock error %d", ret));
   }
   is_screen_state_locked = true;
+
+  /*
+   * In some cases Chromium requests power lock on screen backlight
+   * (e.g. when an mp4 video is played in the app). This results in
+   * overriding the power level set by the Web API.
+   *
+   * Below method prevents Chromium from locking the power level.
+   */
+  DisableChromiumInternalPowerLock();
+
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
@@ -421,6 +431,12 @@ PlatformResult PowerManager::ReleaseScreenState() {
 
   is_screen_state_locked = false;
 
+  /*
+   * Below method enables Chromium to lock screen backlight power level,
+   * when it is no longer locked by the Web API.
+   */
+  EnableChromiumInternalPowerLock();
+
   if (is_screen_bright_set) {
     PlatformResult result = RestoreScreenBrightness();
     if (result.IsError()) {
@@ -442,5 +458,15 @@ PlatformResult PowerManager::GetScreenBrightness(int* output) {
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
+void PowerManager::EnableChromiumInternalPowerLock() {
+  ScopeLogger();
+  Instance::PostMessage(&instance_, "__EnableChromiumInternalPowerLock");
+}
+
+void PowerManager::DisableChromiumInternalPowerLock() {
+  ScopeLogger();
+  Instance::PostMessage(&instance_, "__DisableChromiumInternalPowerLock");
+}
+
 }  // namespace power
 }  // namespace extension
index 8f85063e30d5b24259edc1450ab6e2a2761dd2d4..c3c46d350227f8b558d8b64085e4a99d6aaefc3d 100644 (file)
@@ -79,6 +79,9 @@ class PowerManager {
   common::PlatformResult ReleaseScreenState();
   common::PlatformResult GetScreenBrightness(int* output);
 
+  void EnableChromiumInternalPowerLock();
+  void DisableChromiumInternalPowerLock();
+
   PowerInstance& instance_;
   bool is_screen_listener_set;
   int max_brightness_;
index 2aa60088053d0116a2f7db2c4267c143eae9a6bb..c6f0c6dc7b7863cda25e5929b821db4193cc15a6 100644 (file)
@@ -1026,7 +1026,11 @@ var NativeManager = function(extension) {
   });
 
   extension_.setMessageListener(function(json) {
-    var msg = JSON_.parse(json);
+    try {
+      var msg = JSON_.parse(json);
+    } catch (error) {
+      xwalk.utils.error('Invalid JSON received: ' + json);
+    }
     var id;
 
     if (msg.hasOwnProperty(this.CALLBACK_ID_KEY)) {