Chromium Code Reviews| 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 30c196eaa440a59ca31748b3f564502991cee317..bed47589f227533e9a7b73e1b9e7f49a90c891e7 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_loader.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/status_icons/status_icon.h" |
| #include "chrome/browser/status_icons/status_tray.h" |
| @@ -125,7 +126,7 @@ MediaStreamCaptureIndicator::MediaStreamCaptureIndicator() |
| mic_image_(NULL), |
| camera_image_(NULL), |
| balloon_image_(NULL), |
| - request_index_(0) { |
| + icon_tracker_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
|
no longer working on chromium
2012/11/09 19:07:10
Without looking the details, just want to double c
Marijn Kruisselbrink
2012/11/10 00:19:19
From trying this, it seems creation/usage is on th
no longer working on chromium
2012/11/13 15:17:29
After Hide() is called, it means no tab is using t
Marijn Kruisselbrink
2012/11/14 17:35:27
Okay, replaced the weak_ptr_factory (which would h
|
| } |
| MediaStreamCaptureIndicator::~MediaStreamCaptureIndicator() { |
| @@ -228,7 +229,6 @@ void MediaStreamCaptureIndicator::CreateStatusTray() { |
| status_icon_ = status_tray->CreateStatusIcon(); |
| EnsureStatusTrayIconResources(); |
| - EnsureImageLoadingTracker(); |
| } |
| void MediaStreamCaptureIndicator::EnsureStatusTrayIconResources() { |
| @@ -267,14 +267,22 @@ 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( |
| + |
| + WebContents* web_contents = tab_util::GetWebContentsByID( |
| + render_process_id, render_view_id); |
| + |
| + Profile* profile = |
| + Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
|
no longer working on chromium
2012/11/09 19:07:10
Check the web_contents before using it, in some ca
Marijn Kruisselbrink
2012/11/10 00:19:19
If the web_contents would be NULL, GetExtension wo
no longer working on chromium
2012/11/13 15:17:29
True, extension should be enough to safe guard it,
|
| + |
| + extensions::ImageLoader::Get(profile)->LoadImageAsync( |
| extension, |
| extension->GetIconResource(32, ExtensionIconSet::MATCH_BIGGER), |
| gfx::Size(32, 32), |
| - ImageLoadingTracker::CACHE); |
| + base::Bind(&MediaStreamCaptureIndicator::OnImageLoaded, |
| + icon_tracker_.GetWeakPtr(), message)); |
| return; |
| } |
| @@ -285,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); |
| @@ -302,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; |
| @@ -469,13 +472,3 @@ bool MediaStreamCaptureIndicator::IsProcessCapturing(int render_process_id, |
| return false; |
| return (iter->audio_ref_count > 0 || iter->video_ref_count > 0); |
| } |
| - |
| -void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - if (tracker_.get()) |
| - return; |
| - |
| - tracker_.reset(new ImageLoadingTracker(this)); |
| - pending_messages_.clear(); |
| - request_index_ = 0; |
| -} |