Index: chrome/browser/media/media_stream_capture_indicator.cc |
diff --git a/chrome/browser/media/media_stream_capture_indicator.cc b/chrome/browser/media/media_stream_capture_indicator.cc |
index b5a7bac618ed929a1e23c390362cd6bcf70d1c83..fd2f5b15d56e8c698dfb741ba57bf62d381a2291 100644 |
--- a/chrome/browser/media/media_stream_capture_indicator.cc |
+++ b/chrome/browser/media/media_stream_capture_indicator.cc |
@@ -11,6 +11,7 @@ |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/extensions/extension_service.h" |
+#include "chrome/browser/extensions/image_utils.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/status_icons/status_icon.h" |
#include "chrome/browser/status_icons/status_tray.h" |
@@ -124,7 +125,7 @@ MediaStreamCaptureIndicator::MediaStreamCaptureIndicator() |
mic_image_(NULL), |
camera_image_(NULL), |
balloon_image_(NULL), |
- request_index_(0) { |
+ icon_tracker_(this) { |
} |
MediaStreamCaptureIndicator::~MediaStreamCaptureIndicator() { |
@@ -234,7 +235,6 @@ void MediaStreamCaptureIndicator::CreateStatusTray() { |
status_icon_ = status_tray->CreateStatusIcon(); |
EnsureStatusTrayIconResources(); |
- EnsureImageLoadingTracker(); |
} |
void MediaStreamCaptureIndicator::EnsureStatusTrayIconResources() { |
@@ -273,14 +273,16 @@ void MediaStreamCaptureIndicator::ShowBalloon( |
const extensions::Extension* extension = |
GetExtension(render_process_id, render_view_id); |
if (extension) { |
- pending_messages_[request_index_++] = |
+ string16 message = |
l10n_util::GetStringFUTF16(message_id, |
UTF8ToUTF16(extension->name())); |
- tracker_->LoadImage( |
+ // TODO(mek): This used to use ImageLoadingTrackers caching. |
+ extension_image_utils::LoadImageAsync( |
extension, |
extension->GetIconResource(32, ExtensionIconSet::MATCH_BIGGER), |
gfx::Size(32, 32), |
- ImageLoadingTracker::CACHE); |
+ base::Bind(&MediaStreamCaptureIndicator::OnImageLoaded, |
+ icon_tracker_.GetWeakPtr(), message)); |
return; |
} |
@@ -291,13 +293,8 @@ void MediaStreamCaptureIndicator::ShowBalloon( |
} |
void MediaStreamCaptureIndicator::OnImageLoaded( |
- const gfx::Image& image, |
- const std::string& extension_id, |
- int index) { |
- string16 message; |
- message.swap(pending_messages_[index]); |
- pending_messages_.erase(index); |
- |
+ const string16& message, |
+ const gfx::Image& image) { |
const gfx::ImageSkia* image_skia = !image.IsEmpty() ? image.ToImageSkia() : |
ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
IDR_APP_DEFAULT_ICON); |
@@ -308,8 +305,8 @@ void MediaStreamCaptureIndicator::Hide() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(tabs_.empty()); |
- // We have to destroy |tracker_| on the UI thread. |
- tracker_.reset(); |
+ // Make sure no more image loaded messages get delivered. |
+ icon_tracker_.InvalidateWeakPtrs(); |
if (!status_icon_) |
return; |
@@ -450,13 +447,3 @@ void MediaStreamCaptureIndicator::RemoveCaptureDeviceTab( |
UpdateStatusTrayIconContextMenu(); |
} |
- |
-void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- if (tracker_.get()) |
- return; |
- |
- tracker_.reset(new ImageLoadingTracker(this)); |
- pending_messages_.clear(); |
- request_index_ = 0; |
-} |