summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/extension_action.h
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-27 06:17:57 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-27 06:17:57 +0000
commit5d246db2292523a348d975ca9d65e786389df14f (patch)
tree9d4b515b7bc8516872fc7fb6fdbe9e715843475a /chrome/common/extensions/extension_action.h
parent7dc7f0329728dd9d0e11655652a6ec231cb1065d (diff)
downloadchromium_src-5d246db2292523a348d975ca9d65e786389df14f.zip
chromium_src-5d246db2292523a348d975ca9d65e786389df14f.tar.gz
chromium_src-5d246db2292523a348d975ca9d65e786389df14f.tar.bz2
Replace ExtensionAction with ExtensionAction2.
BUG=24472 Review URL: http://codereview.chromium.org/337035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30172 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions/extension_action.h')
-rwxr-xr-x[-rw-r--r--]chrome/common/extensions/extension_action.h219
1 files changed, 128 insertions, 91 deletions
diff --git a/chrome/common/extensions/extension_action.h b/chrome/common/extensions/extension_action.h
index 6eb66c1..7c7e11f 100644..100755
--- a/chrome/common/extensions/extension_action.h
+++ b/chrome/common/extensions/extension_action.h
@@ -10,6 +10,7 @@
#include <vector>
#include "base/basictypes.h"
+#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "googleurl/src/gurl.h"
#include "third_party/skia/include/core/SkBitmap.h"
@@ -20,132 +21,168 @@ class Canvas;
class Rect;
}
+// ExtensionAction encapsulates the state of a browser or page action.
+// Instances can have both global and per-tab state. If a property does not have
+// a per-tab value, the global value is used instead.
+//
+// TODO(aa): This should replace ExtensionAction and ExtensionActionState.
class ExtensionAction {
public:
- ExtensionAction();
- virtual ~ExtensionAction();
-
- typedef enum {
- PAGE_ACTION = 0,
- BROWSER_ACTION = 1,
- } ExtensionActionType;
-
- std::string id() const { return id_; }
- void set_id(const std::string& id) { id_ = id; }
-
- ExtensionActionType type() const { return type_; }
- void set_type(ExtensionActionType type) { type_ = type; }
+ // Use this ID to indicate the default state for properties that take a tab_id
+ // parameter.
+ static const int kDefaultTabId;
+ // extension id
std::string extension_id() const { return extension_id_; }
void set_extension_id(const std::string& extension_id) {
extension_id_ = extension_id;
}
- std::string title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
-
- const std::vector<std::string>& icon_paths() const { return icon_paths_; }
- void AddIconPath(const std::string& icon_path) {
- icon_paths_.push_back(icon_path);
- }
-
+ // popup details
const GURL& popup_url() const { return popup_url_; }
void set_popup_url(const GURL& url) { popup_url_ = url; }
+ bool has_popup() const { return !popup_url_.is_empty(); }
- bool is_popup() const { return !popup_url_.is_empty(); }
-
- private:
- // The id for the ExtensionAction, for example: "RssPageAction".
- // For BrowserActions this is blank.
- std::string id_;
-
- // The type of the ExtensionAction, either PageAction or BrowserAction.
- ExtensionActionType type_;
-
- // The id for the extension this ExtensionAction belongs to (as defined in
- // the extension manifest).
- std::string extension_id_;
-
- // The title text of the ExtensionAction.
- std::string title_;
-
- // The paths to the icons that this PageIcon can show.
- std::vector<std::string> icon_paths_;
-
- // If the action has a popup, it has a URL and a height.
- GURL popup_url_;
-};
-
-typedef std::map<std::string, ExtensionAction*> ExtensionActionMap;
+ // action id -- only used with legacy page actions API
+ std::string id() const { return id_; }
+ void set_id(const std::string& id) { id_ = id; }
-// This class keeps track of what values each tab uses to override the default
-// values of the ExtensionAction.
-class ExtensionActionState {
- public:
- static void PaintBadge(gfx::Canvas* canvas, const gfx::Rect& bounds,
- const std::string& text, SkColor text_color,
- SkColor background_color);
+ // static icon paths from manifest -- only used with legacy page actions API.
+ std::vector<std::string>* icon_paths() { return &icon_paths_; }
- ExtensionActionState(std::string title, int icon_index)
- : hidden_(false), title_(title), icon_index_(icon_index),
- badge_background_color_(SkColorSetARGB(255, 218, 0, 24)),
- badge_text_color_(SK_ColorWHITE) {
+ // title
+ void SetTitle(int tab_id, const std::string& title) {
+ SetValue(&title_, tab_id, title);
+ }
+ std::string GetTitle(int tab_id) { return GetValue(&title_, tab_id); }
+
+ // Icons are a bit different because the default value can be set to either a
+ // bitmap or a path. However, conceptually, there is only one default icon.
+ // Setting the default icon using a path clears the bitmap and vice-versa.
+ //
+ // To get the default icon, first check for the bitmap. If it is null, check
+ // for the path.
+
+ // Icon bitmap.
+ void SetIcon(int tab_id, const SkBitmap& bitmap) {
+ SetValue(&icon_, tab_id, bitmap);
+ }
+ SkBitmap GetIcon(int tab_id) { return GetValue(&icon_, tab_id); }
+
+ // Icon index -- for use with icon_paths(), only used in page actions.
+ void SetIconIndex(int tab_id, int index) {
+ if (static_cast<size_t>(index) >= icon_paths_.size()) {
+ NOTREACHED();
+ return;
+ }
+ SetValue(&icon_index_, tab_id, index);
+ }
+ int GetIconIndex(int tab_id) {
+ return GetValue(&icon_index_, tab_id);
}
- const std::string& title() const { return title_; }
- void set_title(const std::string& title) { title_ = title; }
+ // Non-tab-specific icon path. This is used to support the default_icon key of
+ // page and browser actions.
+ void set_default_icon_path(const std::string& path) {
+ default_icon_path_ = path;
+ }
+ std::string default_icon_path() {
+ return default_icon_path_;
+ }
- const std::string& badge_text() const { return badge_text_; }
- void set_badge_text(const std::string& badge_text) {
- badge_text_ = badge_text;
+ // badge text
+ void SetBadgeText(int tab_id, const std::string& text) {
+ SetValue(&badge_text_, tab_id, text);
}
+ std::string GetBadgeText(int tab_id) { return GetValue(&badge_text_, tab_id); }
- SkColor badge_background_color() const {
- return badge_background_color_;
+ // badge text color
+ void SetBadgeTextColor(int tab_id, const SkColor& text_color) {
+ SetValue(&badge_text_color_, tab_id, text_color);
}
- void set_badge_background_color(SkColor badge_background_color) {
- badge_background_color_ = badge_background_color;
+ SkColor GetBadgeTextColor(int tab_id) {
+ return GetValue(&badge_text_color_, tab_id);
}
- SkColor badge_text_color() const {
- return badge_text_color_;
+ // badge background color
+ void SetBadgeBackgroundColor(int tab_id, const SkColor& color) {
+ SetValue(&badge_background_color_, tab_id, color);
}
- void set_badge_text_color(SkColor badge_text_color) {
- badge_text_color_ = badge_text_color;
+ SkColor GetBadgeBackgroundColor(int tab_id) {
+ return GetValue(&badge_background_color_, tab_id);
}
- int icon_index() const { return icon_index_; }
- void set_icon_index(int icon_index) { icon_index_ = icon_index; }
+ // visibility
+ void SetIsVisible(int tab_id, bool value) {
+ SetValue(&visible_, tab_id, value);
+ }
+ bool GetIsVisible(int tab_id) {
+ return GetValue(&visible_, tab_id);
+ }
- SkBitmap* icon() const { return icon_.get(); }
- void set_icon(SkBitmap* icon) { icon_.reset(icon); }
+ // Remove all tab-specific state.
+ void ClearAllValuesForTab(int tab_id);
- bool hidden() const { return hidden_; }
- void set_hidden(bool hidden) { hidden_ = hidden; }
+ // If the specified tab has a badge, paint it into the provided bounds.
+ void PaintBadge(gfx::Canvas* canvas, const gfx::Rect& bounds, int tab_id);
private:
- // True if the action is in the hidden state.
- bool hidden_;
+ template <class T>
+ struct ValueTraits {
+ static T CreateEmpty() {
+ return T();
+ }
+ };
+
+ template<class T>
+ void SetValue(std::map<int, T>* map, int tab_id, T val) {
+ (*map)[tab_id] = val;
+ }
- // The title text to use for tooltips and labels.
- std::string title_;
+ template<class T>
+ T GetValue(std::map<int, T>* map, int tab_id) {
+ typename std::map<int, T>::iterator iter = map->find(tab_id);
+ if (iter != map->end()) {
+ return iter->second;
+ } else {
+ iter = map->find(kDefaultTabId);
+ return iter != map->end() ? iter->second : ValueTraits<T>::CreateEmpty();
+ }
+ }
- // The icon to use.
- int icon_index_;
+ // The id for the extension this action belongs to (as defined in the
+ // extension manifest).
+ std::string extension_id_;
- // If non-NULL, overrides icon_index.
- scoped_ptr<SkBitmap> icon_;
+ // Each of these data items can have both a global state (stored with the key
+ // kDefaultTabId), or tab-specific state (stored with the tab_id as the key).
+ std::map<int, std::string> title_;
+ std::map<int, SkBitmap> icon_;
+ std::map<int, int> icon_index_; // index into icon_paths_
+ std::map<int, std::string> badge_text_;
+ std::map<int, SkColor> badge_background_color_;
+ std::map<int, SkColor> badge_text_color_;
+ std::map<int, bool> visible_;
- // The badge text.
- std::string badge_text_;
+ std::string default_icon_path_;
+
+ // If the action has a popup, it has a URL and a height.
+ GURL popup_url_;
- // The background color for the badge.
- SkColor badge_background_color_;
+ // The id for the ExtensionAction, for example: "RssPageAction". This is
+ // needed for compat with an older version of the page actions API.
+ std::string id_;
- // The text color for the badge.
- SkColor badge_text_color_;
+ // A list of paths to icons this action might show. This is needed to support
+ // the legacy setIcon({iconIndex:...} method of the page actions API.
+ std::vector<std::string> icon_paths_;
+};
- DISALLOW_COPY_AND_ASSIGN(ExtensionActionState);
+template<>
+struct ExtensionAction::ValueTraits<int> {
+ static int CreateEmpty() {
+ return -1;
+ }
};
#endif // CHROME_COMMON_EXTENSIONS_EXTENSION_ACTION_H_