diff options
-rw-r--r-- | apps/shell_window.cc | 33 | ||||
-rw-r--r-- | apps/shell_window.h | 19 |
2 files changed, 32 insertions, 20 deletions
diff --git a/apps/shell_window.cc b/apps/shell_window.cc index 428ca5c..d0dd9cc 100644 --- a/apps/shell_window.cc +++ b/apps/shell_window.cc @@ -11,7 +11,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_process_manager.h" #include "chrome/browser/extensions/extension_system.h" -#include "chrome/browser/extensions/image_loader.h" #include "chrome/browser/extensions/shell_window_registry.h" #include "chrome/browser/extensions/suggest_permission_util.h" #include "chrome/browser/lifetime/application_lifetime.h" @@ -352,6 +351,9 @@ void ShellWindow::SetAppIconUrl(const GURL& url) { // Avoid using any previous app icons were are being downloaded. image_loader_ptr_factory_.InvalidateWeakPtrs(); + // Reset |app_icon_image_| to abort pending image load (if any). + app_icon_image_.reset(); + app_icon_url_ = url; web_contents()->DownloadImage( url, @@ -401,10 +403,6 @@ void ShellWindow::Restore() { //------------------------------------------------------------------------------ // Private methods -void ShellWindow::OnImageLoaded(const gfx::Image& image) { - UpdateAppIcon(image); -} - void ShellWindow::DidDownloadFavicon(int id, int http_status_code, const GURL& image_url, @@ -425,20 +423,27 @@ void ShellWindow::DidDownloadFavicon(int id, UpdateAppIcon(gfx::Image::CreateFrom1xBitmap(largest)); } +void ShellWindow::OnExtensionIconImageChanged(extensions::IconImage* image) { + DCHECK_EQ(app_icon_image_.get(), image); + + UpdateAppIcon(gfx::Image(app_icon_image_->image_skia())); +} + void ShellWindow::UpdateExtensionAppIcon() { // Avoid using any previous app icons were are being downloaded. image_loader_ptr_factory_.InvalidateWeakPtrs(); - // Enqueue OnImageLoaded callback. - extensions::ImageLoader* loader = extensions::ImageLoader::Get(profile()); - loader->LoadImageAsync( + app_icon_image_.reset(new extensions::IconImage( + profile(), extension(), - extensions::IconsInfo::GetIconResource(extension(), - delegate_->PreferredIconSize(), - ExtensionIconSet::MATCH_BIGGER), - gfx::Size(delegate_->PreferredIconSize(), delegate_->PreferredIconSize()), - base::Bind(&ShellWindow::OnImageLoaded, - image_loader_ptr_factory_.GetWeakPtr())); + extensions::IconsInfo::GetIcons(extension()), + delegate_->PreferredIconSize(), + extensions::IconsInfo::GetDefaultAppIcon(), + this)); + + // Triggers actual image loading with 1x resources. The 2x resource will + // be handled by IconImage class when requested. + app_icon_image_->image_skia().GetRepresentation(ui::SCALE_FACTOR_100P); } void ShellWindow::CloseContents(WebContents* contents) { diff --git a/apps/shell_window.h b/apps/shell_window.h index 5e449df..a10cb5b 100644 --- a/apps/shell_window.h +++ b/apps/shell_window.h @@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_EXTENSIONS_SHELL_WINDOW_H_ -#define CHROME_BROWSER_UI_EXTENSIONS_SHELL_WINDOW_H_ +#ifndef APPS_SHELL_WINDOW_H_ +#define APPS_SHELL_WINDOW_H_ #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" +#include "chrome/browser/extensions/extension_icon_image.h" #include "chrome/browser/extensions/extension_keybinding_registry.h" #include "chrome/browser/sessions/session_id.h" #include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" @@ -73,7 +74,8 @@ class ShellWindowContents { class ShellWindow : public content::NotificationObserver, public content::WebContentsDelegate, public web_modal::WebContentsModalDialogManagerDelegate, - public extensions::ExtensionKeybindingRegistry::Delegate { + public extensions::ExtensionKeybindingRegistry::Delegate, + public extensions::IconImage::Observer { public: enum WindowType { WINDOW_TYPE_DEFAULT = 1 << 0, // Default shell window. @@ -316,8 +318,6 @@ class ShellWindow : public content::NotificationObserver, // Load the app's image, firing a load state change when loaded. void UpdateExtensionAppIcon(); - void OnImageLoaded(const gfx::Image& image); - // extensions::ExtensionKeybindingRegistry::Delegate implementation. virtual extensions::ActiveTabPermissionGranter* GetActiveTabPermissionGranter() OVERRIDE; @@ -333,6 +333,10 @@ class ShellWindow : public content::NotificationObserver, int requested_size, const std::vector<SkBitmap>& bitmaps); + // extensions::IconImage::Observer implementation. + virtual void OnExtensionIconImageChanged( + extensions::IconImage* image) OVERRIDE; + Profile* profile_; // weak pointer - owned by ProfileManager. // weak pointer - owned by ExtensionService. const extensions::Extension* extension_; @@ -353,6 +357,9 @@ class ShellWindow : public content::NotificationObserver, // be fetched and set using this URL. GURL app_icon_url_; + // An object to load the app's icon as an extension resource. + scoped_ptr<extensions::IconImage> app_icon_image_; + scoped_ptr<NativeAppWindow> native_app_window_; scoped_ptr<ShellWindowContents> shell_window_contents_; scoped_ptr<Delegate> delegate_; @@ -369,4 +376,4 @@ class ShellWindow : public content::NotificationObserver, } // namespace apps -#endif // CHROME_BROWSER_UI_EXTENSIONS_SHELL_WINDOW_H_ +#endif // APPS_SHELL_WINDOW_H_ |