| 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;
|
| -}
|
|
|