| 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 68d56432d159b180f53138cd8b54fd3233c8925e..e937ceefa3cfca4626ae03557112d7400914ac8c 100644
|
| --- a/chrome/browser/media/media_stream_capture_indicator.cc
|
| +++ b/chrome/browser/media/media_stream_capture_indicator.cc
|
| @@ -122,7 +122,6 @@ MediaStreamCaptureIndicator::MediaStreamCaptureIndicator()
|
| mic_image_(NULL),
|
| camera_image_(NULL),
|
| balloon_image_(NULL),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)),
|
| request_index_(0) {
|
| }
|
|
|
| @@ -275,7 +274,8 @@ void MediaStreamCaptureIndicator::ShowBalloon(
|
| pending_messages_[request_index_++] =
|
| l10n_util::GetStringFUTF16(message_id,
|
| UTF8ToUTF16(extension->name()));
|
| - tracker_.LoadImage(
|
| + EnsureImageLoadingTracker();
|
| + tracker_->LoadImage(
|
| extension,
|
| extension->GetIconResource(32, ExtensionIconSet::MATCH_BIGGER),
|
| gfx::Size(32, 32),
|
| @@ -307,6 +307,10 @@ void MediaStreamCaptureIndicator::OnImageLoaded(
|
|
|
| void MediaStreamCaptureIndicator::Hide() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + // We have to destroy |tracker_| on the UI thread.
|
| + tracker_.reset();
|
| +
|
| if (!status_icon_)
|
| return;
|
|
|
| @@ -445,3 +449,12 @@ 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;
|
| +}
|
|
|