Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / notification_provider / notification_provider_api.cc
index 78f7737..784b538 100644 (file)
@@ -10,6 +10,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browser_process.h"
+#include "chrome/browser/notifications/desktop_notification_service.h"
+#include "chrome/browser/notifications/desktop_notification_service_factory.h"
 #include "chrome/browser/notifications/notification.h"
 #include "chrome/browser/notifications/notification_ui_manager.h"
 #include "chrome/common/chrome_version_info.h"
@@ -194,9 +196,31 @@ NotificationProviderNotifyOnPermissionLevelChangedFunction::Run() {
       params = api::notification_provider::NotifyOnPermissionLevelChanged::
           Params::Create(*args_);
   EXTENSION_FUNCTION_VALIDATE(params.get());
+
+  // Third party apps/extensions with notification provider API will not be able
+  // to change permission levels of web notifiers, because the list of allowed
+  // websites should only be set in Chrome Settings manually by users. But they
+  // are able to change permission levels of application type notifiers.
+  bool is_application_type =
+      (params->notifier_type ==
+       api::notification_provider::NotifierType::NOTIFIER_TYPE_APPLICATION);
+  if (is_application_type) {
+    bool enabled =
+        (params->level == api::notification_provider::NotifierPermissionLevel::
+                              NOTIFIER_PERMISSION_LEVEL_GRANTED);
+
+    DesktopNotificationService* desktop_notification_service =
+        DesktopNotificationServiceFactory::GetForProfile(GetProfile());
+    message_center::NotifierId notifier_id(
+        message_center::NotifierId::NotifierType::APPLICATION,
+        params->notifier_id);
+
+    desktop_notification_service->SetNotifierEnabled(notifier_id, enabled);
+  }
+
   return RespondNow(
       ArgumentList(api::notification_provider::NotifyOnPermissionLevelChanged::
-                       Results::Create(true)));
+                       Results::Create(is_application_type)));
 }
 
 NotificationProviderNotifyOnShowSettingsFunction::