[Power] Prevent override of power level locked with Web API 68/176068/1
authorPawel Wasowski <p.wasowski2@partner.samsung.com>
Wed, 4 Apr 2018 16:33:30 +0000 (18:33 +0200)
committerPiotr Kosko <p.kosko@samsung.com>
Mon, 16 Apr 2018 08:43:04 +0000 (10:43 +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 4cc9868909b807f4b8e37d6d2bdbee2168a9383b..2eef03e1e58733cf7f61fdd1b30b466862885da0 100644 (file)
@@ -1017,7 +1017,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)) {