Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5813)

Unified Diff: chrome/browser/extensions/api/notification_provider/notification_provider_api.cc

Issue 468813002: Add NotifyOnPermissionLevelChanged implementation of notification (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments, deleted test for notifyOnShowSettings since it's not implemented Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/notification_provider/notification_provider_api.cc
diff --git a/chrome/browser/extensions/api/notification_provider/notification_provider_api.cc b/chrome/browser/extensions/api/notification_provider/notification_provider_api.cc
index 34535fbd5a6cf7aa9fbf7876b83b9913fad3cf90..248523059fc116e8b7ae92819d5b5b85bf28554f 100644
--- a/chrome/browser/extensions/api/notification_provider/notification_provider_api.cc
+++ b/chrome/browser/extensions/api/notification_provider/notification_provider_api.cc
@@ -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"
@@ -17,6 +19,7 @@
#include "extensions/common/extension.h"
#include "extensions/common/features/feature.h"
#include "ui/base/layout.h"
+#include "ui/message_center/notifier_settings.h"
#include "url/gurl.h"
namespace extensions {
@@ -191,12 +194,34 @@ NotificationProviderNotifyOnPermissionLevelChangedFunction::Run() {
scoped_ptr<api::notification_provider::NotifyOnPermissionLevelChanged::Params>
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)
+ ? true
dewittj 2014/08/13 21:30:36 Can you please rewrite this statement as multiple
liyanhou 2014/08/14 16:15:24 Done.
+ : false;
+
+ 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::

Powered by Google App Engine
This is Rietveld 408576698