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

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

Issue 580243004: Remove unnecessary image downloading handler of notifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: build fix of desktop linux/win Created 6 years, 2 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 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/message_center_notification_manager.h" 5 #include "chrome/browser/notifications/message_center_notification_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/prefs/pref_registry_simple.h" 9 #include "base/prefs/pref_registry_simple.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 // default message center (extension_id.empty()). 151 // default message center (extension_id.empty()).
152 152
153 // If there exist apps/extensions that have notificationProvider permission, 153 // If there exist apps/extensions that have notificationProvider permission,
154 // route notifications to one of the apps/extensions. 154 // route notifications to one of the apps/extensions.
155 std::string extension_id = GetExtensionTakingOverNotifications(profile); 155 std::string extension_id = GetExtensionTakingOverNotifications(profile);
156 if (!extension_id.empty()) 156 if (!extension_id.empty())
157 profile_notification->AddToAlternateProvider(extension_id); 157 profile_notification->AddToAlternateProvider(extension_id);
158 158
159 message_center_->AddNotification(make_scoped_ptr( 159 message_center_->AddNotification(make_scoped_ptr(
160 new message_center::Notification(profile_notification->notification()))); 160 new message_center::Notification(profile_notification->notification())));
161 profile_notification->StartDownloads();
162 } 161 }
163 162
164 bool MessageCenterNotificationManager::Update(const Notification& notification, 163 bool MessageCenterNotificationManager::Update(const Notification& notification,
165 Profile* profile) { 164 Profile* profile) {
166 const base::string16& replace_id = notification.replace_id(); 165 const base::string16& replace_id = notification.replace_id();
167 if (replace_id.empty()) 166 if (replace_id.empty())
168 return false; 167 return false;
169 168
170 const GURL origin_url = notification.origin_url(); 169 const GURL origin_url = notification.origin_url();
171 DCHECK(origin_url.is_valid()); 170 DCHECK(origin_url.is_valid());
(...skipping 24 matching lines...) Expand all
196 // providers. 195 // providers.
197 196
198 // WARNING: You MUST use AddProfileNotification or update the message 197 // WARNING: You MUST use AddProfileNotification or update the message
199 // center via the notification within a ProfileNotification object or the 198 // center via the notification within a ProfileNotification object or the
200 // profile ID will not be correctly set for ChromeOS. 199 // profile ID will not be correctly set for ChromeOS.
201 message_center_->UpdateNotification( 200 message_center_->UpdateNotification(
202 old_id, 201 old_id,
203 make_scoped_ptr(new message_center::Notification( 202 make_scoped_ptr(new message_center::Notification(
204 new_notification->notification()))); 203 new_notification->notification())));
205 204
206 new_notification->StartDownloads();
207 return true; 205 return true;
208 } 206 }
209 } 207 }
210 return false; 208 return false;
211 } 209 }
212 210
213 const Notification* MessageCenterNotificationManager::FindById( 211 const Notification* MessageCenterNotificationManager::FindById(
214 const std::string& delegate_id, 212 const std::string& delegate_id,
215 ProfileID profile_id) const { 213 ProfileID profile_id) const {
216 // The profile pointer can be weak, the instance may have been destroyed, so 214 // The profile pointer can be weak, the instance may have been destroyed, so
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 } 353 }
356 354
357 std::string 355 std::string
358 MessageCenterNotificationManager::GetMessageCenterNotificationIdForTest( 356 MessageCenterNotificationManager::GetMessageCenterNotificationIdForTest(
359 const std::string& delegate_id, 357 const std::string& delegate_id,
360 Profile* profile) { 358 Profile* profile) {
361 return GetProfileNotificationId(delegate_id, GetProfileID(profile)); 359 return GetProfileNotificationId(delegate_id, GetProfileID(profile));
362 } 360 }
363 361
364 //////////////////////////////////////////////////////////////////////////////// 362 ////////////////////////////////////////////////////////////////////////////////
365 // ImageDownloads
366
367 MessageCenterNotificationManager::ImageDownloads::ImageDownloads(
368 message_center::MessageCenter* message_center,
369 ImageDownloadsObserver* observer)
370 : message_center_(message_center),
371 pending_downloads_(0),
372 observer_(observer) {
373 }
374
375 MessageCenterNotificationManager::ImageDownloads::~ImageDownloads() { }
376
377 void MessageCenterNotificationManager::ImageDownloads::StartDownloads(
378 const Notification& notification) {
379 // In case all downloads are synchronous, assume a pending download.
380 AddPendingDownload();
381
382 // Notification image.
383 StartDownloadWithImage(
384 notification,
385 NULL,
386 notification.image_url(),
387 base::Bind(&message_center::MessageCenter::SetNotificationImage,
388 base::Unretained(message_center_),
389 notification.id()));
390
391 // Notification button icons.
392 StartDownloadWithImage(
393 notification,
394 NULL,
395 notification.button_one_icon_url(),
396 base::Bind(&message_center::MessageCenter::SetNotificationButtonIcon,
397 base::Unretained(message_center_),
398 notification.id(),
399 0));
400 StartDownloadWithImage(
401 notification,
402 NULL,
403 notification.button_two_icon_url(),
404 base::Bind(&message_center::MessageCenter::SetNotificationButtonIcon,
405 base::Unretained(message_center_),
406 notification.id(),
407 1));
408
409 // This should tell the observer we're done if everything was synchronous.
410 PendingDownloadCompleted();
411 }
412
413 void MessageCenterNotificationManager::ImageDownloads::StartDownloadWithImage(
414 const Notification& notification,
415 const gfx::Image* image,
416 const GURL& url,
417 const SetImageCallback& callback) {
418 // Set the image directly if we have it.
419 if (image && !image->IsEmpty()) {
420 callback.Run(*image);
421 return;
422 }
423
424 // Leave the image null if there's no URL.
425 if (url.is_empty())
426 return;
427
428 content::WebContents* contents = notification.delegate()->GetWebContents();
429 if (!contents) {
430 LOG(WARNING) << "Notification needs an image but has no WebContents";
431 return;
432 }
433
434 AddPendingDownload();
435
436 contents->DownloadImage(
437 url,
438 false, // Not a favicon
439 0, // No maximum size
440 base::Bind(
441 &MessageCenterNotificationManager::ImageDownloads::DownloadComplete,
442 AsWeakPtr(),
443 callback));
444 }
445
446 void MessageCenterNotificationManager::ImageDownloads::DownloadComplete(
447 const SetImageCallback& callback,
448 int download_id,
449 int http_status_code,
450 const GURL& image_url,
451 const std::vector<SkBitmap>& bitmaps,
452 const std::vector<gfx::Size>& original_bitmap_sizes) {
453 PendingDownloadCompleted();
454
455 if (bitmaps.empty())
456 return;
457 gfx::Image image = gfx::Image::CreateFrom1xBitmap(bitmaps[0]);
458 callback.Run(image);
459 }
460
461 // Private methods.
462
463 void MessageCenterNotificationManager::ImageDownloads::AddPendingDownload() {
464 ++pending_downloads_;
465 }
466
467 void
468 MessageCenterNotificationManager::ImageDownloads::PendingDownloadCompleted() {
469 DCHECK(pending_downloads_ > 0);
470 if (--pending_downloads_ == 0 && observer_)
471 observer_->OnDownloadsCompleted();
472 }
473
474 ////////////////////////////////////////////////////////////////////////////////
475 // ProfileNotification 363 // ProfileNotification
476 364
477 MessageCenterNotificationManager::ProfileNotification::ProfileNotification( 365 MessageCenterNotificationManager::ProfileNotification::ProfileNotification(
478 Profile* profile, 366 Profile* profile,
479 const Notification& notification, 367 const Notification& notification,
480 message_center::MessageCenter* message_center) 368 message_center::MessageCenter* message_center)
481 : profile_(profile), 369 : profile_(profile),
482 notification_( 370 notification_(
483 // Uses Notification's copy constructor to assign the message center 371 // Uses Notification's copy constructor to assign the message center
484 // id, which should be unique for every profile + Notification pair. 372 // id, which should be unique for every profile + Notification pair.
485 GetProfileNotificationId(notification.delegate_id(), 373 GetProfileNotificationId(notification.delegate_id(),
486 GetProfileID(profile)), 374 GetProfileID(profile)),
487 notification), 375 notification) {
488 downloads_(new ImageDownloads(message_center, this)) {
489 DCHECK(profile); 376 DCHECK(profile);
490 #if defined(OS_CHROMEOS) 377 #if defined(OS_CHROMEOS)
491 notification_.set_profile_id(multi_user_util::GetUserIDFromProfile(profile)); 378 notification_.set_profile_id(multi_user_util::GetUserIDFromProfile(profile));
492 #endif 379 #endif
493 } 380 }
494 381
495 MessageCenterNotificationManager::ProfileNotification::~ProfileNotification() { 382 MessageCenterNotificationManager::ProfileNotification::~ProfileNotification() {
496 } 383 }
497 384
498 void MessageCenterNotificationManager::ProfileNotification::StartDownloads() {
499 downloads_->StartDownloads(notification_);
500 }
501
502 void
503 MessageCenterNotificationManager::ProfileNotification::OnDownloadsCompleted() {
504 notification_.delegate()->ReleaseRenderViewHost();
505 }
506
507 void 385 void
508 MessageCenterNotificationManager::ProfileNotification::AddToAlternateProvider( 386 MessageCenterNotificationManager::ProfileNotification::AddToAlternateProvider(
509 const std::string extension_id) { 387 const std::string extension_id) {
510 // Convert data from Notification type to NotificationOptions type. 388 // Convert data from Notification type to NotificationOptions type.
511 extensions::api::notifications::NotificationOptions options; 389 extensions::api::notifications::NotificationOptions options;
512 NotificationConversionHelper::NotificationToNotificationOptions(notification_, 390 NotificationConversionHelper::NotificationToNotificationOptions(notification_,
513 &options); 391 &options);
514 392
515 // Send the notification to the alternate provider extension/app. 393 // Send the notification to the alternate provider extension/app.
516 extensions::NotificationProviderEventRouter event_router(profile_); 394 extensions::NotificationProviderEventRouter event_router(profile_);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 it != registry->enabled_extensions().end(); 441 it != registry->enabled_extensions().end();
564 ++it) { 442 ++it) {
565 if ((*it->get()).permissions_data()->HasAPIPermission( 443 if ((*it->get()).permissions_data()->HasAPIPermission(
566 extensions::APIPermission::ID::kNotificationProvider)) { 444 extensions::APIPermission::ID::kNotificationProvider)) {
567 extension_id = (*it->get()).id(); 445 extension_id = (*it->get()).id();
568 return extension_id; 446 return extension_id;
569 } 447 }
570 } 448 }
571 return extension_id; 449 return extension_id;
572 } 450 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698