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 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 app_icon_loader_->FetchImage(extension->id()); | 240 app_icon_loader_->FetchImage(extension->id()); |
241 } | 241 } |
242 | 242 |
243 ContentSettingsForOneType settings; | 243 ContentSettingsForOneType settings; |
244 DesktopNotificationProfileUtil::GetNotificationsSettings(profile, &settings); | 244 DesktopNotificationProfileUtil::GetNotificationsSettings(profile, &settings); |
245 | 245 |
246 favicon::FaviconService* favicon_service = | 246 favicon::FaviconService* favicon_service = |
247 FaviconServiceFactory::GetForProfile(profile, | 247 FaviconServiceFactory::GetForProfile(profile, |
248 ServiceAccessType::EXPLICIT_ACCESS); | 248 ServiceAccessType::EXPLICIT_ACCESS); |
249 favicon_tracker_.reset(new base::CancelableTaskTracker()); | 249 favicon_tracker_.reset(new base::CancelableTaskTracker()); |
250 patterns_.clear(); | |
251 for (ContentSettingsForOneType::const_iterator iter = settings.begin(); | 250 for (ContentSettingsForOneType::const_iterator iter = settings.begin(); |
252 iter != settings.end(); ++iter) { | 251 iter != settings.end(); ++iter) { |
253 if (iter->primary_pattern == ContentSettingsPattern::Wildcard() && | 252 if (iter->primary_pattern == ContentSettingsPattern::Wildcard() && |
254 iter->secondary_pattern == ContentSettingsPattern::Wildcard() && | 253 iter->secondary_pattern == ContentSettingsPattern::Wildcard() && |
255 iter->source != "preference") { | 254 iter->source != "preference") { |
256 continue; | 255 continue; |
257 } | 256 } |
258 | 257 |
259 std::string url_pattern = iter->primary_pattern.ToString(); | 258 std::string url_pattern = iter->primary_pattern.ToString(); |
260 base::string16 name = base::UTF8ToUTF16(url_pattern); | 259 base::string16 name = base::UTF8ToUTF16(url_pattern); |
261 GURL url(url_pattern); | 260 GURL url(url_pattern); |
262 NotifierId notifier_id(url); | 261 NotifierId notifier_id(url); |
263 notifiers->push_back(new Notifier( | 262 notifiers->push_back(new Notifier( |
264 notifier_id, | 263 notifier_id, |
265 name, | 264 name, |
266 notifier_state_tracker->IsNotifierEnabled(notifier_id))); | 265 notifier_state_tracker->IsNotifierEnabled(notifier_id))); |
267 patterns_[name] = iter->primary_pattern; | |
268 // Note that favicon service obtains the favicon from history. This means | 266 // Note that favicon service obtains the favicon from history. This means |
269 // that it will fail to obtain the image if there are no history data for | 267 // that it will fail to obtain the image if there are no history data for |
270 // that URL. | 268 // that URL. |
271 favicon_service->GetFaviconImageForPageURL( | 269 favicon_service->GetFaviconImageForPageURL( |
272 url, | 270 url, |
273 base::Bind(&MessageCenterSettingsController::OnFaviconLoaded, | 271 base::Bind(&MessageCenterSettingsController::OnFaviconLoaded, |
274 base::Unretained(this), | 272 base::Unretained(this), |
275 url), | 273 url), |
276 favicon_tracker_.get()); | 274 favicon_tracker_.get()); |
277 } | 275 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
317 DCHECK(default_setting == CONTENT_SETTING_ALLOW || | 315 DCHECK(default_setting == CONTENT_SETTING_ALLOW || |
318 default_setting == CONTENT_SETTING_BLOCK || | 316 default_setting == CONTENT_SETTING_BLOCK || |
319 default_setting == CONTENT_SETTING_ASK); | 317 default_setting == CONTENT_SETTING_ASK); |
320 | 318 |
321 // The content setting for notifications needs to clear when it changes to | 319 // The content setting for notifications needs to clear when it changes to |
322 // the default value or get explicitly set when it differs from the default. | 320 // the default value or get explicitly set when it differs from the default. |
323 bool differs_from_default_value = | 321 bool differs_from_default_value = |
324 (default_setting != CONTENT_SETTING_ALLOW && enabled) || | 322 (default_setting != CONTENT_SETTING_ALLOW && enabled) || |
325 (default_setting == CONTENT_SETTING_ALLOW && !enabled); | 323 (default_setting == CONTENT_SETTING_ALLOW && !enabled); |
326 | 324 |
325 if (!notifier.notifier_id.url.is_valid()) { | |
326 LOG(ERROR) << "Invalid url pattern: " << notifier.notifier_id.url.spec(); | |
327 } | |
328 | |
327 if (differs_from_default_value) { | 329 if (differs_from_default_value) { |
328 if (notifier.notifier_id.url.is_valid()) { | |
329 if (enabled) { | 330 if (enabled) { |
330 DesktopNotificationProfileUtil::GrantPermission( | 331 DesktopNotificationProfileUtil::GrantPermission( |
331 profile, notifier.notifier_id.url); | 332 profile, notifier.notifier_id.url); |
332 } else { | 333 } else { |
333 DesktopNotificationProfileUtil::DenyPermission( | 334 DesktopNotificationProfileUtil::DenyPermission( |
334 profile, notifier.notifier_id.url); | 335 profile, notifier.notifier_id.url); |
335 } | 336 } |
336 } else { | |
337 LOG(ERROR) << "Invalid url pattern: " | |
338 << notifier.notifier_id.url.spec(); | |
339 } | |
340 } else { | 337 } else { |
341 ContentSettingsPattern pattern; | 338 DesktopNotificationProfileUtil::ClearSetting(profile, |
342 | 339 notifier.notifier_id.url); |
343 const auto& iter = patterns_.find(notifier.name); | |
344 if (iter != patterns_.end()) { | |
345 pattern = iter->second; | |
346 } else if (notifier.notifier_id.url.is_valid()) { | |
347 pattern = | |
348 ContentSettingsPattern::FromURLNoWildcard(notifier.notifier_id.url); | |
349 } else { | |
350 LOG(ERROR) << "Invalid url pattern: " | |
351 << notifier.notifier_id.url.spec(); | |
352 } | |
353 | |
354 if (pattern.IsValid()) | |
355 DesktopNotificationProfileUtil::ClearSetting(profile, pattern); | |
raymes
2016/03/09 06:53:48
Hey Liu, I don't fully understand this code but it
| |
356 } | 340 } |
357 } else { | 341 } else { |
358 NotifierStateTrackerFactory::GetForProfile(profile) | 342 NotifierStateTrackerFactory::GetForProfile(profile) |
359 ->SetNotifierEnabled(notifier.notifier_id, enabled); | 343 ->SetNotifierEnabled(notifier.notifier_id, enabled); |
360 } | 344 } |
361 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 345 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
362 observers_, | 346 observers_, |
363 NotifierEnabledChanged(notifier.notifier_id, enabled)); | 347 NotifierEnabledChanged(notifier.notifier_id, enabled)); |
364 } | 348 } |
365 | 349 |
366 void MessageCenterSettingsController::OnNotifierSettingsClosing() { | 350 void MessageCenterSettingsController::OnNotifierSettingsClosing() { |
367 DCHECK(favicon_tracker_.get()); | 351 DCHECK(favicon_tracker_.get()); |
368 favicon_tracker_->TryCancelAll(); | 352 favicon_tracker_->TryCancelAll(); |
369 patterns_.clear(); | |
370 } | 353 } |
371 | 354 |
372 bool MessageCenterSettingsController::NotifierHasAdvancedSettings( | 355 bool MessageCenterSettingsController::NotifierHasAdvancedSettings( |
373 const NotifierId& notifier_id) const { | 356 const NotifierId& notifier_id) const { |
374 // TODO(dewittj): Refactor this so that notifiers have a delegate that can | 357 // TODO(dewittj): Refactor this so that notifiers have a delegate that can |
375 // handle this in a more appropriate location. | 358 // handle this in a more appropriate location. |
376 if (notifier_id.type != NotifierId::APPLICATION) | 359 if (notifier_id.type != NotifierId::APPLICATION) |
377 return false; | 360 return false; |
378 | 361 |
379 const std::string& extension_id = notifier_id.id; | 362 const std::string& extension_id = notifier_id.id; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
556 weak_factory_.GetWeakPtr())); | 539 weak_factory_.GetWeakPtr())); |
557 } | 540 } |
558 #endif | 541 #endif |
559 | 542 |
560 if (notify) { | 543 if (notify) { |
561 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, | 544 FOR_EACH_OBSERVER(message_center::NotifierSettingsObserver, |
562 observers_, | 545 observers_, |
563 NotifierGroupChanged()); | 546 NotifierGroupChanged()); |
564 } | 547 } |
565 } | 548 } |
OLD | NEW |