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

Unified Diff: chrome/browser/cocoa/location_bar_view_mac.h

Issue 427009: Preliminary work toward page actions on Mac. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years 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/cocoa/location_bar_view_mac.h
===================================================================
--- chrome/browser/cocoa/location_bar_view_mac.h (revision 34193)
+++ chrome/browser/cocoa/location_bar_view_mac.h (working copy)
@@ -5,12 +5,17 @@
#ifndef CHROME_BROWSER_COCOA_LOCATION_BAR_VIEW_MAC_H_
#define CHROME_BROWSER_COCOA_LOCATION_BAR_VIEW_MAC_H_
+#include <string>
+#include <map>
+#include <vector>
+
#import <Cocoa/Cocoa.h>
#include "base/scoped_nsobject.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/autocomplete/autocomplete_edit.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view_mac.h"
+#include "chrome/browser/extensions/image_loading_tracker.h"
#include "chrome/browser/location_bar.h"
#include "chrome/browser/toolbar_model.h"
@@ -44,8 +49,8 @@
virtual void AcceptInputWithDisposition(WindowOpenDisposition disposition);
virtual void FocusLocation();
virtual void FocusSearch();
- virtual void UpdatePageActions() { /* http://crbug.com/12281 */ }
- virtual void InvalidatePageActions() { /* TODO(port): implement this */ }
+ virtual void UpdatePageActions();
+ virtual void InvalidatePageActions();
virtual void SaveStateToContents(TabContents* contents);
virtual void Revert();
virtual AutocompleteEditView* location_entry() {
@@ -98,6 +103,7 @@
// Sets the image.
void SetImage(NSImage* image);
+ void SetImage(SkBitmap* image);
// Sets the label text, font, and color. |text| may be nil; |color| and
// |font| are ignored if |text| is nil.
@@ -111,8 +117,6 @@
const NSAttributedString* GetLabel() const { return label_; }
bool IsVisible() const { return visible_; }
- virtual bool OnMousePressed() = 0;
-
private:
scoped_nsobject<NSImage> image_;
@@ -139,7 +143,7 @@
// Sets the image to the appropriate icon.
void SetImageShown(Image image);
- // Shows the page info dialog.
+ // Shows the page info dialog. Virtual so it can be overridden for testing.
virtual bool OnMousePressed();
private:
@@ -157,6 +161,114 @@
DISALLOW_COPY_AND_ASSIGN(SecurityImageView);
};
+ // PageActionImageView is used to display the icon for a given Page Action
+ // and notify the extension when the icon is clicked.
+ class PageActionImageView : public LocationBarImageView,
+ public ImageLoadingTracker::Observer,
+ public NotificationObserver {
+ public:
+ PageActionImageView(LocationBarViewMac* owner,
+ Profile* profile,
+ ExtensionAction* page_action);
+ virtual ~PageActionImageView();
+
+ ExtensionAction* page_action() { return page_action_; }
+
+ int current_tab_id() { return current_tab_id_; }
+
+ void set_preview_enabled(bool preview_enabled) {
+ preview_enabled_ = preview_enabled;
+ }
+
+ // Either notify listeners or show a popup depending on the Page Action.
+ // Virtual so it can be overridden for testing.
+ virtual bool OnMousePressed(NSRect bounds);
+
+ // Overridden from ImageLoadingTracker.
+ virtual void OnImageLoaded(SkBitmap* image, size_t index);
+
+ // Called to notify the Page Action that it should determine whether to be
+ // visible or hidden. |contents| is the TabContents that is active, |url|
+ // is the current page URL.
+ void UpdateVisibility(TabContents* contents, const GURL& url);
+
+ private:
+ // Overridden from NotificationObserver:
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ // The location bar view that owns us.
+ LocationBarViewMac* owner_;
+
+ // The current profile (not owned by us).
+ Profile* profile_;
+
+ // The Page Action that this view represents. The Page Action is not owned
+ // by us, it resides in the extension of this particular profile.
+ ExtensionAction* page_action_;
+
+ // A cache of images the Page Actions might need to show, mapped by path.
+ typedef std::map<std::string, SkBitmap> PageActionMap;
+ PageActionMap page_action_icons_;
+
+ // The object that is waiting for the image loading to complete
+ // asynchronously.
+ ImageLoadingTracker* tracker_;
+
+ // The tab id we are currently showing the icon for.
+ int current_tab_id_;
+
+ // The URL we are currently showing the icon for.
+ GURL current_url_;
+
+ // The string to show for a tooltip.
+ std::string tooltip_;
+
+ // This is used for post-install visual feedback. The page_action icon
+ // is briefly shown even if it hasn't been enabled by it's extension.
+ bool preview_enabled_;
+
+ // Used to register for notifications received by NotificationObserver.
+ NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(PageActionImageView);
+ };
+
+ class PageActionViewList {
+ public:
+ PageActionViewList(LocationBarViewMac* location_bar,
+ Profile* profile,
+ ToolbarModel* toolbar_model)
+ : owner_(location_bar),
+ profile_(profile),
+ toolbar_model_(toolbar_model) {}
+
+ void DeleteAll();
+ void RefreshViews();
+
+ PageActionImageView* ViewAt(size_t index);
+
+ size_t Count();
+ size_t VisibleCount();
+
+ // Called when the action at |index| is clicked. The |iconFrame| should
+ // describe the bounds of the affected action's icon.
+ void OnMousePressed(NSRect iconFrame, size_t index);
+
+ private:
+ // Any installed Page Actions.
+ std::vector<PageActionImageView*> views_;
+
+ // The location bar view that owns us.
+ LocationBarViewMac* owner_;
+
+ Profile* profile_;
+ ToolbarModel* toolbar_model_;
+
+ DISALLOW_COPY_AND_ASSIGN(PageActionViewList);
+ };
+
private:
// Sets the SSL icon we should be showing.
void SetSecurityIcon(ToolbarModel::Icon icon);
@@ -181,6 +293,9 @@
// The view that shows the lock/warning when in HTTPS mode.
SecurityImageView security_image_view_;
+ // Any installed Page Actions.
+ PageActionViewList* page_action_views_;
+
Profile* profile_;
ToolbarModel* toolbar_model_; // Weak, owned by Browser.
« no previous file with comments | « chrome/browser/cocoa/autocomplete_text_field_unittest.mm ('k') | chrome/browser/cocoa/location_bar_view_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698