OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/message_center_settings_controller.h" | 5 #include "chrome/browser/notifications/message_center_settings_controller.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/i18n/string_compare.h" | 10 #include "base/i18n/string_compare.h" |
11 #include "base/message_loop/message_loop_proxy.h" | 11 #include "base/message_loop/message_loop_proxy.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/task/cancelable_task_tracker.h" | 13 #include "base/task/cancelable_task_tracker.h" |
14 #include "chrome/browser/browser_process.h" | 14 #include "chrome/browser/browser_process.h" |
15 #include "chrome/browser/chrome_notification_types.h" | 15 #include "chrome/browser/chrome_notification_types.h" |
16 #include "chrome/browser/content_settings/host_content_settings_map.h" | |
16 #include "chrome/browser/extensions/app_icon_loader_impl.h" | 17 #include "chrome/browser/extensions/app_icon_loader_impl.h" |
17 #include "chrome/browser/extensions/extension_util.h" | 18 #include "chrome/browser/extensions/extension_util.h" |
18 #include "chrome/browser/favicon/favicon_service.h" | 19 #include "chrome/browser/favicon/favicon_service.h" |
19 #include "chrome/browser/favicon/favicon_service_factory.h" | 20 #include "chrome/browser/favicon/favicon_service_factory.h" |
20 #include "chrome/browser/history/history_types.h" | 21 #include "chrome/browser/history/history_types.h" |
21 #include "chrome/browser/notifications/desktop_notification_service.h" | 22 #include "chrome/browser/notifications/desktop_notification_service.h" |
22 #include "chrome/browser/notifications/desktop_notification_service_factory.h" | 23 #include "chrome/browser/notifications/desktop_notification_service_factory.h" |
23 #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" | 24 #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" |
24 #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_fac tory.h" | 25 #include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_fac tory.h" |
25 #include "chrome/browser/profiles/profile.h" | 26 #include "chrome/browser/profiles/profile.h" |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
303 #endif | 304 #endif |
304 | 305 |
305 if (comparator) { | 306 if (comparator) { |
306 std::sort(notifiers->begin() + app_count, notifiers->end(), *comparator); | 307 std::sort(notifiers->begin() + app_count, notifiers->end(), *comparator); |
307 } else { | 308 } else { |
308 std::sort(notifiers->begin() + app_count, notifiers->end(), | 309 std::sort(notifiers->begin() + app_count, notifiers->end(), |
309 SimpleCompareNotifiers); | 310 SimpleCompareNotifiers); |
310 } | 311 } |
311 } | 312 } |
312 | 313 |
313 void MessageCenterSettingsController::SetNotifierEnabled( | 314 void MessageCenterSettingsController::SetNotifierEnabled( |
Peter Beverloo
2014/07/10 11:29:39
The MessageCenterSettingsController is the setting
Miguel Garcia
2014/07/17 17:24:48
Let's talk about this one offline ok? I think it d
| |
314 const Notifier& notifier, | 315 const Notifier& notifier, |
315 bool enabled) { | 316 bool enabled) { |
316 DCHECK_LT(current_notifier_group_, notifier_groups_.size()); | 317 DCHECK_LT(current_notifier_group_, notifier_groups_.size()); |
317 Profile* profile = notifier_groups_[current_notifier_group_]->profile(); | 318 Profile* profile = notifier_groups_[current_notifier_group_]->profile(); |
318 | 319 |
319 DesktopNotificationService* notification_service = | 320 DesktopNotificationService* notification_service = |
320 DesktopNotificationServiceFactory::GetForProfile(profile); | 321 DesktopNotificationServiceFactory::GetForProfile(profile); |
321 | 322 |
322 if (notifier.notifier_id.type == NotifierId::WEB_PAGE) { | 323 if (notifier.notifier_id.type == NotifierId::WEB_PAGE) { |
323 // WEB_PAGE notifier cannot handle in DesktopNotificationService | 324 // WEB_PAGE notifier cannot handle in DesktopNotificationService |
324 // since it has the exact URL pattern. | 325 // since it has the exact URL pattern. |
325 // TODO(mukai): fix this. | 326 // TODO(mukai): fix this. |
326 ContentSetting default_setting = | 327 ContentSetting default_setting = |
327 notification_service->GetDefaultContentSetting(NULL); | 328 profile->GetHostContentSettingsMap()->GetDefaultContentSetting( |
329 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, NULL); | |
330 | |
328 DCHECK(default_setting == CONTENT_SETTING_ALLOW || | 331 DCHECK(default_setting == CONTENT_SETTING_ALLOW || |
329 default_setting == CONTENT_SETTING_BLOCK || | 332 default_setting == CONTENT_SETTING_BLOCK || |
330 default_setting == CONTENT_SETTING_ASK); | 333 default_setting == CONTENT_SETTING_ASK); |
331 if ((enabled && default_setting != CONTENT_SETTING_ALLOW) || | 334 if ((enabled && default_setting != CONTENT_SETTING_ALLOW) || |
332 (!enabled && default_setting == CONTENT_SETTING_ALLOW)) { | 335 (!enabled && default_setting == CONTENT_SETTING_ALLOW)) { |
333 if (notifier.notifier_id.url.is_valid()) { | 336 if (notifier.notifier_id.url.is_valid()) { |
334 if (enabled) | 337 ContentSettingsPattern primary_pattern = |
335 notification_service->GrantPermission(notifier.notifier_id.url); | 338 ContentSettingsPattern::FromURLNoWildcard(notifier.notifier_id.url); |
336 else | 339 profile->GetHostContentSettingsMap()->SetContentSetting( |
337 notification_service->DenyPermission(notifier.notifier_id.url); | 340 primary_pattern, |
341 ContentSettingsPattern::Wildcard(), | |
342 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
343 NO_RESOURCE_IDENTIFIER, | |
344 enabled ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); | |
338 } else { | 345 } else { |
339 LOG(ERROR) << "Invalid url pattern: " | 346 LOG(ERROR) << "Invalid url pattern: " |
340 << notifier.notifier_id.url.spec(); | 347 << notifier.notifier_id.url.spec(); |
341 } | 348 } |
342 } else { | 349 } else { |
343 std::map<base::string16, ContentSettingsPattern>::const_iterator iter = | 350 std::map<base::string16, ContentSettingsPattern>::const_iterator iter = |
344 patterns_.find(notifier.name); | 351 patterns_.find(notifier.name); |
345 if (iter != patterns_.end()) { | 352 if (iter != patterns_.end()) { |
346 notification_service->ClearSetting(iter->second); | 353 profile->GetHostContentSettingsMap()->SetContentSetting( |
354 iter->second, | |
355 ContentSettingsPattern::Wildcard(), | |
356 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, | |
357 NO_RESOURCE_IDENTIFIER, | |
358 CONTENT_SETTING_DEFAULT); | |
347 } else { | 359 } else { |
348 LOG(ERROR) << "Invalid url pattern: " | 360 LOG(ERROR) << "Invalid url pattern: " |
349 << notifier.notifier_id.url.spec(); | 361 << notifier.notifier_id.url.spec(); |
350 } | 362 } |
351 } | 363 } |
352 } else { | 364 } else { |
353 notification_service->SetNotifierEnabled(notifier.notifier_id, enabled); | 365 notification_service->SetNotifierEnabled(notifier.notifier_id, enabled); |
354 } | 366 } |
355 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 367 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
356 observers_, | 368 observers_, |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
522 // another creating a primary profile, and causes an infinite loop. | 534 // another creating a primary profile, and causes an infinite loop. |
523 // Thus, it would be better to delay creating group for guest login. | 535 // Thus, it would be better to delay creating group for guest login. |
524 base::MessageLoopProxy::current()->PostTask( | 536 base::MessageLoopProxy::current()->PostTask( |
525 FROM_HERE, | 537 FROM_HERE, |
526 base::Bind( | 538 base::Bind( |
527 &MessageCenterSettingsController::CreateNotifierGroupForGuestLogin, | 539 &MessageCenterSettingsController::CreateNotifierGroupForGuestLogin, |
528 weak_factory_.GetWeakPtr())); | 540 weak_factory_.GetWeakPtr())); |
529 } | 541 } |
530 #endif | 542 #endif |
531 } | 543 } |
OLD | NEW |