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

Side by Side Diff: chrome/browser/notifications/desktop_notification_service.cc

Issue 622793002: Group the different permission related methods in the content api. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/notifications/desktop_notification_service.h" 5 #include "chrome/browser/notifications/desktop_notification_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/prefs/scoped_user_pref_update.h" 9 #include "base/prefs/scoped_user_pref_update.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 base::string16(), 95 base::string16(),
96 replace_id, 96 replace_id,
97 message_center::RichNotificationData(), 97 message_center::RichNotificationData(),
98 delegate); 98 delegate);
99 g_browser_process->notification_ui_manager()->Add(notification, profile); 99 g_browser_process->notification_ui_manager()->Add(notification, profile);
100 return notification.delegate_id(); 100 return notification.delegate_id();
101 } 101 }
102 102
103 DesktopNotificationService::DesktopNotificationService(Profile* profile) 103 DesktopNotificationService::DesktopNotificationService(Profile* profile)
104 : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_NOTIFICATIONS), 104 : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_NOTIFICATIONS),
105 profile_(profile), 105 profile_(profile)
106 #if defined(ENABLE_EXTENSIONS) 106 #if defined(ENABLE_EXTENSIONS)
107 extension_registry_observer_(this), 107 ,
108 extension_registry_observer_(this)
108 #endif 109 #endif
109 weak_factory_(this) { 110 {
110 OnStringListPrefChanged( 111 OnStringListPrefChanged(
111 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_); 112 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_);
112 OnStringListPrefChanged( 113 OnStringListPrefChanged(
113 prefs::kMessageCenterDisabledSystemComponentIds, 114 prefs::kMessageCenterDisabledSystemComponentIds,
114 &disabled_system_component_ids_); 115 &disabled_system_component_ids_);
115 disabled_extension_id_pref_.Init( 116 disabled_extension_id_pref_.Init(
116 prefs::kMessageCenterDisabledExtensionIds, 117 prefs::kMessageCenterDisabledExtensionIds,
117 profile_->GetPrefs(), 118 profile_->GetPrefs(),
118 base::Bind( 119 base::Bind(
119 &DesktopNotificationService::OnStringListPrefChanged, 120 &DesktopNotificationService::OnStringListPrefChanged,
(...skipping 15 matching lines...) Expand all
135 } 136 }
136 137
137 DesktopNotificationService::~DesktopNotificationService() { 138 DesktopNotificationService::~DesktopNotificationService() {
138 } 139 }
139 140
140 void DesktopNotificationService::RequestNotificationPermission( 141 void DesktopNotificationService::RequestNotificationPermission(
141 content::WebContents* web_contents, 142 content::WebContents* web_contents,
142 const PermissionRequestID& request_id, 143 const PermissionRequestID& request_id,
143 const GURL& requesting_origin, 144 const GURL& requesting_origin,
144 bool user_gesture, 145 bool user_gesture,
145 const NotificationPermissionCallback& callback) { 146 const base::Callback<void(bool)>& result_callback) {
146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
147 148
148 #if defined(ENABLE_EXTENSIONS) 149 #if defined(ENABLE_EXTENSIONS)
149 extensions::InfoMap* extension_info_map = 150 extensions::InfoMap* extension_info_map =
150 extensions::ExtensionSystem::Get(profile_)->info_map(); 151 extensions::ExtensionSystem::Get(profile_)->info_map();
151 const extensions::Extension* extension = NULL; 152 const extensions::Extension* extension = NULL;
152 if (extension_info_map) { 153 if (extension_info_map) {
153 extensions::ExtensionSet extensions; 154 extensions::ExtensionSet extensions;
154 extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin( 155 extension_info_map->GetExtensionsWithAPIPermissionForSecurityOrigin(
155 requesting_origin, 156 requesting_origin,
156 request_id.render_process_id(), 157 request_id.render_process_id(),
157 extensions::APIPermission::kNotifications, 158 extensions::APIPermission::kNotifications,
158 &extensions); 159 &extensions);
159 for (extensions::ExtensionSet::const_iterator iter = extensions.begin(); 160 for (extensions::ExtensionSet::const_iterator iter = extensions.begin();
160 iter != extensions.end(); ++iter) { 161 iter != extensions.end(); ++iter) {
161 if (IsNotifierEnabled(NotifierId( 162 if (IsNotifierEnabled(NotifierId(
162 NotifierId::APPLICATION, (*iter)->id()))) { 163 NotifierId::APPLICATION, (*iter)->id()))) {
163 extension = iter->get(); 164 extension = iter->get();
164 break; 165 break;
165 } 166 }
166 } 167 }
167 } 168 }
168 if (IsExtensionWithPermissionOrSuggestInConsole( 169 if (IsExtensionWithPermissionOrSuggestInConsole(
169 extensions::APIPermission::kNotifications, 170 extensions::APIPermission::kNotifications,
170 extension, 171 extension,
171 web_contents->GetRenderViewHost())) { 172 web_contents->GetRenderViewHost())) {
172 callback.Run(blink::WebNotificationPermissionAllowed); 173 result_callback.Run(true);
173 return; 174 return;
174 } 175 }
175 #endif 176 #endif
176 177
177 RequestPermission( 178 RequestPermission(web_contents,
178 web_contents, 179 request_id,
179 request_id, 180 requesting_origin,
180 requesting_origin, 181 user_gesture,
181 user_gesture, 182 result_callback);
182 base::Bind(&DesktopNotificationService::OnNotificationPermissionRequested,
183 weak_factory_.GetWeakPtr(),
184 callback));
185 } 183 }
186 184
187 void DesktopNotificationService::ShowDesktopNotification( 185 void DesktopNotificationService::ShowDesktopNotification(
188 const content::ShowDesktopNotificationHostMsgParams& params, 186 const content::ShowDesktopNotificationHostMsgParams& params,
189 content::RenderFrameHost* render_frame_host, 187 content::RenderFrameHost* render_frame_host,
190 scoped_ptr<content::DesktopNotificationDelegate> delegate, 188 scoped_ptr<content::DesktopNotificationDelegate> delegate,
191 base::Closure* cancel_callback) { 189 base::Closure* cancel_callback) {
192 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
193 const GURL& origin = params.origin; 191 const GURL& origin = params.origin;
194 NotificationObjectProxy* proxy = new NotificationObjectProxy(delegate.Pass()); 192 NotificationObjectProxy* proxy = new NotificationObjectProxy(delegate.Pass());
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 const GURL& embedder_origin, 348 const GURL& embedder_origin,
351 bool allowed) { 349 bool allowed) {
352 if (allowed) { 350 if (allowed) {
353 DesktopNotificationProfileUtil::GrantPermission( 351 DesktopNotificationProfileUtil::GrantPermission(
354 profile_, requesting_origin); 352 profile_, requesting_origin);
355 } else { 353 } else {
356 DesktopNotificationProfileUtil::DenyPermission(profile_, requesting_origin); 354 DesktopNotificationProfileUtil::DenyPermission(profile_, requesting_origin);
357 } 355 }
358 } 356 }
359 357
360 void DesktopNotificationService::OnNotificationPermissionRequested(
361 const NotificationPermissionCallback& callback, bool allowed) {
362 blink::WebNotificationPermission permission = allowed ?
363 blink::WebNotificationPermissionAllowed :
364 blink::WebNotificationPermissionDenied;
365
366 callback.Run(permission);
367 }
368
369 void DesktopNotificationService::FirePermissionLevelChangedEvent( 358 void DesktopNotificationService::FirePermissionLevelChangedEvent(
370 const NotifierId& notifier_id, bool enabled) { 359 const NotifierId& notifier_id, bool enabled) {
371 #if defined(ENABLE_EXTENSIONS) 360 #if defined(ENABLE_EXTENSIONS)
372 DCHECK_EQ(NotifierId::APPLICATION, notifier_id.type); 361 DCHECK_EQ(NotifierId::APPLICATION, notifier_id.type);
373 extensions::api::notifications::PermissionLevel permission = 362 extensions::api::notifications::PermissionLevel permission =
374 enabled ? extensions::api::notifications::PERMISSION_LEVEL_GRANTED 363 enabled ? extensions::api::notifications::PERMISSION_LEVEL_GRANTED
375 : extensions::api::notifications::PERMISSION_LEVEL_DENIED; 364 : extensions::api::notifications::PERMISSION_LEVEL_DENIED;
376 scoped_ptr<base::ListValue> args(new base::ListValue()); 365 scoped_ptr<base::ListValue> args(new base::ListValue());
377 args->Append(new base::StringValue( 366 args->Append(new base::StringValue(
378 extensions::api::notifications::ToString(permission))); 367 extensions::api::notifications::ToString(permission)));
379 scoped_ptr<extensions::Event> event(new extensions::Event( 368 scoped_ptr<extensions::Event> event(new extensions::Event(
380 extensions::api::notifications::OnPermissionLevelChanged::kEventName, 369 extensions::api::notifications::OnPermissionLevelChanged::kEventName,
381 args.Pass())); 370 args.Pass()));
382 extensions::EventRouter::Get(profile_) 371 extensions::EventRouter::Get(profile_)
383 ->DispatchEventToExtension(notifier_id.id, event.Pass()); 372 ->DispatchEventToExtension(notifier_id.id, event.Pass());
384 373
385 // Tell the IO thread that this extension's permission for notifications 374 // Tell the IO thread that this extension's permission for notifications
386 // has changed. 375 // has changed.
387 extensions::InfoMap* extension_info_map = 376 extensions::InfoMap* extension_info_map =
388 extensions::ExtensionSystem::Get(profile_)->info_map(); 377 extensions::ExtensionSystem::Get(profile_)->info_map();
389 BrowserThread::PostTask( 378 BrowserThread::PostTask(
390 BrowserThread::IO, FROM_HERE, 379 BrowserThread::IO, FROM_HERE,
391 base::Bind(&extensions::InfoMap::SetNotificationsDisabled, 380 base::Bind(&extensions::InfoMap::SetNotificationsDisabled,
392 extension_info_map, notifier_id.id, !enabled)); 381 extension_info_map, notifier_id.id, !enabled));
393 #endif 382 #endif
394 } 383 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698