Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(782)

Unified Diff: chrome/browser/extensions/extension_action.h

Issue 885443004: [Extensions] Cache extension action icons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_action.h
diff --git a/chrome/browser/extensions/extension_action.h b/chrome/browser/extensions/extension_action.h
index 717e5c5b1babe4f2d1d5ec4cd640275bb164dae8..5d829b7f51539f4d20d5bf11854c3bfc0b77ca27 100644
--- a/chrome/browser/extensions/extension_action.h
+++ b/chrome/browser/extensions/extension_action.h
@@ -9,21 +9,21 @@
#include <string>
#include <vector>
-#include "base/basictypes.h"
-#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
+#include "base/stl_util.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
-#include "extensions/common/extension_icon_set.h"
#include "third_party/skia/include/core/SkColor.h"
-// TODO(robertphillips): change this to "class SkBaseDevice;"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "ui/gfx/animation/linear_animation.h"
class GURL;
-class SkBitmap;
+
+namespace content {
+class BrowserContext;
+}
+
+namespace extensions {
+class Extension;
+class IconImage;
+}
namespace gfx {
class Canvas;
@@ -53,20 +53,11 @@ class ExtensionAction {
// Max size (both dimensions) for page actions.
static const int kPageActionIconMaxSize;
- ExtensionAction(const std::string& extension_id,
+ ExtensionAction(const extensions::Extension& extension,
extensions::ActionInfo::Type action_type,
const extensions::ActionInfo& manifest_data);
~ExtensionAction();
- // Gets a copy of this, ownership passed to caller.
- // It doesn't make sense to copy of an ExtensionAction except in tests.
- scoped_ptr<ExtensionAction> CopyForTest() const;
-
- // Given the extension action type, returns the size the extension action icon
- // should have. The icon should be square, so only one dimension is
- // returned.
- static int GetIconSizeForType(extensions::ActionInfo::Type type);
-
// extension id
const std::string& extension_id() const { return extension_id_; }
@@ -121,12 +112,6 @@ class ExtensionAction {
void DeclarativeSetIcon(int tab_id, int priority, const gfx::Image& icon);
void UndoDeclarativeSetIcon(int tab_id, int priority, const gfx::Image& icon);
- // Non-tab-specific icon path. This is used to support the default_icon key of
- // page and browser actions.
- void set_default_icon(scoped_ptr<ExtensionIconSet> icon_set) {
- default_icon_ = icon_set.Pass();
- }
-
const ExtensionIconSet* default_icon() const {
return default_icon_.get();
}
@@ -202,6 +187,16 @@ class ExtensionAction {
int tab_id,
const gfx::Size& spacing) const;
+ // Lazily loads and returns the default icon image, if one exists for the
+ // action.
+ extensions::IconImage* LoadDefaultIconImage(
+ const extensions::Extension& extension,
+ content::BrowserContext* browser_context);
+
+ // Returns the image to use as the default icon for the action. Can only be
+ // called after LoadDefaultIconImage().
+ gfx::ImageSkia GetDefaultIconImage() const;
+
// Determine whether or not the ExtensionAction has a value set for the given
// |tab_id| for each property.
bool HasPopupUrl(int tab_id) const;
@@ -212,7 +207,14 @@ class ExtensionAction {
bool HasIsVisible(int tab_id) const;
bool HasIcon(int tab_id) const;
+ void SetDefaultIconForTest(scoped_ptr<ExtensionIconSet> default_icon);
+
private:
+ // Populates the action from the |extension| and |manifest_data|, filling in
+ // any missing values (like title or icons) as possible.
+ void Populate(const extensions::Extension& extension,
+ const extensions::ActionInfo& manifest_data);
+
// Returns width of the current icon for tab_id.
// TODO(tbarzic): The icon selection is done in ExtensionActionIconFactory.
// We should probably move this there too.
@@ -284,7 +286,11 @@ class ExtensionAction {
// ExtensionIconSet containing paths to bitmaps from which default icon's
// image representations will be selected.
- scoped_ptr<const ExtensionIconSet> default_icon_;
+ scoped_ptr<ExtensionIconSet> default_icon_;
+
+ // The default icon image, if |default_icon_| exists.
+ // Lazily initialized via LoadDefaultIconImage().
+ scoped_ptr<extensions::IconImage> default_icon_image_;
// The id for the ExtensionAction, for example: "RssPageAction". This is
// needed for compat with an older version of the page actions API.

Powered by Google App Engine
This is Rietveld 408576698