[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 c8638b6..3646d8f 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 8f85063..c3c46d3 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 2aa6008..c6f0c6d 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)) {