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

Side by Side Diff: chrome/browser/ui/extensions/extension_action_view_controller.h

Issue 1168383002: Implement sidebar support for extension action popups Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix assertion failure at extension_view_host.cc Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_ 5 #ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_
7 7
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/scoped_observer.h" 9 #include "base/scoped_observer.h"
10 #include "chrome/browser/extensions/extension_action_icon_factory.h" 10 #include "chrome/browser/extensions/extension_action_icon_factory.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 gfx::Image GetIcon(content::WebContents* web_contents, 53 gfx::Image GetIcon(content::WebContents* web_contents,
54 const gfx::Size& size) override; 54 const gfx::Size& size) override;
55 base::string16 GetActionName() const override; 55 base::string16 GetActionName() const override;
56 base::string16 GetAccessibleName(content::WebContents* web_contents) const 56 base::string16 GetAccessibleName(content::WebContents* web_contents) const
57 override; 57 override;
58 base::string16 GetTooltip(content::WebContents* web_contents) const override; 58 base::string16 GetTooltip(content::WebContents* web_contents) const override;
59 bool IsEnabled(content::WebContents* web_contents) const override; 59 bool IsEnabled(content::WebContents* web_contents) const override;
60 bool WantsToRun(content::WebContents* web_contents) const override; 60 bool WantsToRun(content::WebContents* web_contents) const override;
61 bool HasPopup(content::WebContents* web_contents) const override; 61 bool HasPopup(content::WebContents* web_contents) const override;
62 void HidePopup() override; 62 void HidePopup() override;
63 void HideSidebar() override;
63 gfx::NativeView GetPopupNativeView() override; 64 gfx::NativeView GetPopupNativeView() override;
64 ui::MenuModel* GetContextMenu() override; 65 ui::MenuModel* GetContextMenu() override;
65 void OnContextMenuClosed() override; 66 void OnContextMenuClosed() override;
66 bool ExecuteAction(bool by_user) override; 67 bool ExecuteAction(bool by_user) override;
67 void UpdateState() override; 68 void UpdateState() override;
68 void RegisterCommand() override; 69 void RegisterCommand() override;
69 bool DisabledClickOpensMenu() const override; 70 bool DisabledClickOpensMenu() const override;
70 71
71 // ExtensionContextMenuModel::PopupDelegate: 72 // ExtensionContextMenuModel::PopupDelegate:
72 void InspectPopup() override; 73 void InspectPopup() override;
73 74
74 // Closes the active popup (whether it was this action's popup or not). 75 // Closes the active popup (whether it was this action's popup or not).
75 void HideActivePopup(); 76 void HideActivePopup();
76 77
78 // Closes the active sidebar.
79 void HideActiveSidebar();
80
77 // Populates |command| with the command associated with |extension|, if one 81 // Populates |command| with the command associated with |extension|, if one
78 // exists. Returns true if |command| was populated. 82 // exists. Returns true if |command| was populated.
79 bool GetExtensionCommand(extensions::Command* command); 83 bool GetExtensionCommand(extensions::Command* command);
80 84
81 const extensions::Extension* extension() const { return extension_.get(); } 85 const extensions::Extension* extension() const { return extension_.get(); }
82 Browser* browser() { return browser_; } 86 Browser* browser() { return browser_; }
83 ExtensionAction* extension_action() { return extension_action_; } 87 ExtensionAction* extension_action() { return extension_action_; }
84 const ExtensionAction* extension_action() const { return extension_action_; } 88 const ExtensionAction* extension_action() const { return extension_action_; }
85 ToolbarActionViewDelegate* view_delegate() { return view_delegate_; } 89 ToolbarActionViewDelegate* view_delegate() { return view_delegate_; }
86 bool is_showing_popup() const { return popup_host_ != nullptr; } 90 bool is_showing_popup() const { return popup_host_ != nullptr; }
91 bool is_showing_sidebar() const { return sidebar_host_; }
87 92
88 void set_icon_observer(ExtensionActionIconFactory::Observer* icon_observer) { 93 void set_icon_observer(ExtensionActionIconFactory::Observer* icon_observer) {
89 icon_observer_ = icon_observer; 94 icon_observer_ = icon_observer;
90 } 95 }
91 96
92 scoped_ptr<IconWithBadgeImageSource> GetIconImageSourceForTesting( 97 scoped_ptr<IconWithBadgeImageSource> GetIconImageSourceForTesting(
93 content::WebContents* web_contents, 98 content::WebContents* web_contents,
94 const gfx::Size& size); 99 const gfx::Size& size);
95 100
96 private: 101 private:
102 // Update button state to be pressed
103 void PressButton(bool grant_tab_permissions);
104 void PressButtonWithSlideOutIfEnabled(const base::Closure& closure);
105
106 // Update button state to be unpressed
107 void RaiseButton();
108
97 // ExtensionActionIconFactory::Observer: 109 // ExtensionActionIconFactory::Observer:
98 void OnIconUpdated() override; 110 void OnIconUpdated() override;
99 111
100 // ExtensionHostObserver: 112 // ExtensionHostObserver:
101 void OnExtensionHostDestroyed(const extensions::ExtensionHost* host) override; 113 void OnExtensionHostDestroyed(const extensions::ExtensionHost* host) override;
102 114
103 // Checks if the associated |extension| is still valid by checking its 115 // Checks if the associated |extension| is still valid by checking its
104 // status in the registry. Since the OnExtensionUnloaded() notifications are 116 // status in the registry. Since the OnExtensionUnloaded() notifications are
105 // not in a deterministic order, it's possible that the view tries to refresh 117 // not in a deterministic order, it's possible that the view tries to refresh
106 // itself before we're notified to remove it. 118 // itself before we're notified to remove it.
(...skipping 14 matching lines...) Expand all
121 // associated |popup_url|. |grant_tab_permissions| is true if active tab 133 // associated |popup_url|. |grant_tab_permissions| is true if active tab
122 // permissions should be given to the extension; this is only true if the 134 // permissions should be given to the extension; this is only true if the
123 // popup is opened through a user action. 135 // popup is opened through a user action.
124 // The popup may not be shown synchronously if the extension is hidden and 136 // The popup may not be shown synchronously if the extension is hidden and
125 // first needs to slide itself out. 137 // first needs to slide itself out.
126 // Returns true if a popup will be shown. 138 // Returns true if a popup will be shown.
127 bool TriggerPopupWithUrl(PopupShowAction show_action, 139 bool TriggerPopupWithUrl(PopupShowAction show_action,
128 const GURL& popup_url, 140 const GURL& popup_url,
129 bool grant_tab_permissions); 141 bool grant_tab_permissions);
130 142
143 // Begins the process of showing the sidebar for the extension action,
144 // given the associated |popup_url|.
145 // The sidebar may not be shown synchronously if the extension is hidden and
146 // first needs to slide itself out.
147 // Returns true if a sidebar will be shown.
148 bool TriggerSidebarWithUrl(const GURL& popup_url);
149
131 // Shows the popup with the given |host|. 150 // Shows the popup with the given |host|.
132 void ShowPopup(scoped_ptr<extensions::ExtensionViewHost> host, 151 void ShowPopup(scoped_ptr<extensions::ExtensionViewHost> host,
133 bool grant_tab_permissions, 152 bool grant_tab_permissions,
134 PopupShowAction show_action); 153 PopupShowAction show_action);
135 154
136 // Handles cleanup after the popup closes. 155 // Handles cleanup after the popup closes.
137 void OnPopupClosed(); 156 void OnPopupClosed();
138 157
139 // Returns the image source for the icon. 158 // Returns the image source for the icon.
140 scoped_ptr<IconWithBadgeImageSource> GetIconImageSource( 159 scoped_ptr<IconWithBadgeImageSource> GetIconImageSource(
(...skipping 13 matching lines...) Expand all
154 // The owning ToolbarActionsBar, if any. This will be null if this is a 173 // The owning ToolbarActionsBar, if any. This will be null if this is a
155 // page action without the toolbar redesign turned on. 174 // page action without the toolbar redesign turned on.
156 // TODO(devlin): Would this be better behind a delegate interface? On the one 175 // TODO(devlin): Would this be better behind a delegate interface? On the one
157 // hand, it's odd for this class to know about ToolbarActionsBar, but on the 176 // hand, it's odd for this class to know about ToolbarActionsBar, but on the
158 // other, yet-another-delegate-class might just confuse things. 177 // other, yet-another-delegate-class might just confuse things.
159 ToolbarActionsBar* toolbar_actions_bar_; 178 ToolbarActionsBar* toolbar_actions_bar_;
160 179
161 // The extension popup's host if the popup is visible; null otherwise. 180 // The extension popup's host if the popup is visible; null otherwise.
162 extensions::ExtensionViewHost* popup_host_; 181 extensions::ExtensionViewHost* popup_host_;
163 182
183 // The extension sidebar's host if the sidebar is visible; null otherwise.
184 scoped_ptr<extensions::ExtensionViewHost> sidebar_host_;
185
164 // The context menu model for the extension. 186 // The context menu model for the extension.
165 scoped_refptr<ExtensionContextMenuModel> context_menu_model_; 187 scoped_refptr<ExtensionContextMenuModel> context_menu_model_;
166 188
167 // Our view delegate. 189 // Our view delegate.
168 ToolbarActionViewDelegate* view_delegate_; 190 ToolbarActionViewDelegate* view_delegate_;
169 191
170 // The delegate to handle platform-specific implementations. 192 // The delegate to handle platform-specific implementations.
171 scoped_ptr<ExtensionActionPlatformDelegate> platform_delegate_; 193 scoped_ptr<ExtensionActionPlatformDelegate> platform_delegate_;
172 194
173 // The object that will be used to get the browser action icon for us. 195 // The object that will be used to get the browser action icon for us.
(...skipping 11 matching lines...) Expand all
185 207
186 ScopedObserver<extensions::ExtensionHost, extensions::ExtensionHostObserver> 208 ScopedObserver<extensions::ExtensionHost, extensions::ExtensionHostObserver>
187 popup_host_observer_; 209 popup_host_observer_;
188 210
189 base::WeakPtrFactory<ExtensionActionViewController> weak_factory_; 211 base::WeakPtrFactory<ExtensionActionViewController> weak_factory_;
190 212
191 DISALLOW_COPY_AND_ASSIGN(ExtensionActionViewController); 213 DISALLOW_COPY_AND_ASSIGN(ExtensionActionViewController);
192 }; 214 };
193 215
194 #endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_ 216 #endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_VIEW_CONTROLLER_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/sidebar_browsertest.cc ('k') | chrome/browser/ui/extensions/extension_action_view_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698