diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-24 21:46:58 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-24 21:46:58 +0000 |
commit | 6bd3f7249fb1d7328727d7ad0cf95e8ace145747 (patch) | |
tree | 99e6524b66297bf2d24453ab211cb465b6edb28b /chrome/browser/ui | |
parent | 3235b0e3e506ca36e450ccd8f9a86b5870882b06 (diff) | |
download | chromium_src-6bd3f7249fb1d7328727d7ad0cf95e8ace145747.zip chromium_src-6bd3f7249fb1d7328727d7ad0cf95e8ace145747.tar.gz chromium_src-6bd3f7249fb1d7328727d7ad0cf95e8ace145747.tar.bz2 |
Revert 178405 - reinstating 178361 which was proven innocent of all charges by
http://build.chromium.org/p/chromium.win/builders/Win%20Aura%20Tests%20%283%29/builds/793
> Revert 178361 - suspected of introducing flake:
> http://build.chromium.org/p/chromium.win/buildstatus?builder=Win%20Aura%20Tests%20%283%29&number=790
> http://build.chromium.org/p/chromium.win/buildstatus?builder=Win%20Aura%20Tests%20%283%29&number=791
>
> > Use ImageLoader instead of ImageLoadingTracker (Part 9)
> >
> > BUG=163929
> >
> >
> > Review URL: https://chromiumcodereview.appspot.com/11886029
>
> TBR=rpaquay@chromium.org
> Review URL: https://codereview.chromium.org/12049055
TBR=fischman@chromium.org
Review URL: https://codereview.chromium.org/12042091
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178655 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r-- | chrome/browser/ui/panels/panel.cc | 19 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel.h | 15 | ||||
-rw-r--r-- | chrome/browser/ui/views/panels/panel_stack_view.cc | 1 |
3 files changed, 16 insertions, 19 deletions
diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc index 6fe4d65..a785179 100644 --- a/chrome/browser/ui/panels/panel.cc +++ b/chrome/browser/ui/panels/panel.cc @@ -15,6 +15,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/extensions/extension_tab_util.h" +#include "chrome/browser/extensions/image_loader.h" #include "chrome/browser/extensions/window_controller.h" #include "chrome/browser/extensions/window_controller_list.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -149,7 +150,8 @@ Panel::Panel(const std::string& app_name, native_panel_(NULL), attention_mode_(USE_PANEL_ATTENTION), expansion_state_(EXPANDED), - command_updater_(this) { + command_updater_(this), + ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_ptr_factory_(this)) { } Panel::~Panel() { @@ -224,7 +226,8 @@ void Panel::InitCommandState() { } void Panel::OnNativePanelClosed() { - app_icon_loader_.reset(); + // Ensure previously enqueued OnImageLoaded callbacks are ignored. + image_loader_ptr_factory_.InvalidateWeakPtrs(); registrar_.RemoveAll(); manager()->OnPanelClosed(this); DCHECK(!collection_); @@ -829,24 +832,22 @@ void Panel::UpdateAppIcon() { if (!extension) return; - app_icon_loader_.reset(new ImageLoadingTracker(this)); - app_icon_loader_->LoadImage( + extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile()); + loader->LoadImageAsync( extension, extension->GetIconResource(extension_misc::EXTENSION_ICON_SMALL, ExtensionIconSet::MATCH_BIGGER), gfx::Size(extension_misc::EXTENSION_ICON_SMALL, extension_misc::EXTENSION_ICON_SMALL), - ImageLoadingTracker::CACHE); + base::Bind(&Panel::OnImageLoaded, + image_loader_ptr_factory_.GetWeakPtr())); } -void Panel::OnImageLoaded(const gfx::Image& image, - const std::string& extension_id, - int index) { +void Panel::OnImageLoaded(const gfx::Image& image) { if (!image.IsEmpty()) { app_icon_ = image; native_panel_->UpdatePanelTitleBar(); } - app_icon_loader_.reset(); content::NotificationService::current()->Notify( chrome::NOTIFICATION_PANEL_APP_ICON_LOADED, diff --git a/chrome/browser/ui/panels/panel.h b/chrome/browser/ui/panels/panel.h index 9819141..1e2fd5e 100644 --- a/chrome/browser/ui/panels/panel.h +++ b/chrome/browser/ui/panels/panel.h @@ -9,10 +9,10 @@ #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" +#include "base/memory/weak_ptr.h" #include "base/string16.h" #include "chrome/browser/command_updater.h" #include "chrome/browser/command_updater_delegate.h" -#include "chrome/browser/extensions/image_loading_tracker.h" #include "chrome/browser/sessions/session_id.h" #include "chrome/browser/ui/base_window.h" #include "chrome/browser/ui/panels/panel_constants.h" @@ -50,8 +50,7 @@ class WindowController; // other Panels. For example deleting a panel would rearrange other panels. class Panel : public BaseWindow, public CommandUpdaterDelegate, - public content::NotificationObserver, - public ImageLoadingTracker::Observer { + public content::NotificationObserver { public: enum ExpansionState { // The panel is fully expanded with both title-bar and the client-area. @@ -322,10 +321,7 @@ class Panel : public BaseWindow, CUSTOM_MAX_SIZE }; - // ImageLoadingTracker::Observer implementation. - virtual void OnImageLoaded(const gfx::Image& image, - const std::string& extension_id, - int index) OVERRIDE; + void OnImageLoaded(const gfx::Image& image); // Initialize state for all supported commands. void InitCommandState(); @@ -390,12 +386,11 @@ class Panel : public BaseWindow, scoped_ptr<extensions::WindowController> extension_window_controller_; scoped_ptr<PanelHost> panel_host_; - // Used for loading app_icon_. - scoped_ptr<ImageLoadingTracker> app_icon_loader_; - // Icon showed in the task bar. gfx::Image app_icon_; + base::WeakPtrFactory<Panel> image_loader_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(Panel); }; diff --git a/chrome/browser/ui/views/panels/panel_stack_view.cc b/chrome/browser/ui/views/panels/panel_stack_view.cc index 932a0e3..06cd0dd 100644 --- a/chrome/browser/ui/views/panels/panel_stack_view.cc +++ b/chrome/browser/ui/views/panels/panel_stack_view.cc @@ -10,6 +10,7 @@ #include "chrome/browser/ui/panels/panel.h" #include "chrome/browser/ui/panels/stacked_panel_collection.h" #include "chrome/common/extensions/extension.h" +#include "ui/gfx/image/image_skia.h" #include "ui/gfx/rect.h" #include "ui/views/widget/widget.h" |