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

Side by Side Diff: chrome/browser/ui/views/toolbar/browser_action_view.cc

Issue 411063003: Combine BrowserActionView and BrowserActionButton (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "chrome/browser/ui/views/toolbar/browser_action_view.h" 5 #include "chrome/browser/ui/views/toolbar/browser_action_view.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
(...skipping 26 matching lines...) Expand all
37 namespace { 37 namespace {
38 38
39 // We have smaller insets than normal STYLE_TEXTBUTTON buttons so that we can 39 // We have smaller insets than normal STYLE_TEXTBUTTON buttons so that we can
40 // fit user supplied icons in without clipping them. 40 // fit user supplied icons in without clipping them.
41 const int kBorderInset = 4; 41 const int kBorderInset = 4;
42 42
43 } // namespace 43 } // namespace
44 44
45 //////////////////////////////////////////////////////////////////////////////// 45 ////////////////////////////////////////////////////////////////////////////////
46 // BrowserActionView 46 // BrowserActionView
47
48 BrowserActionView::BrowserActionView(const Extension* extension, 47 BrowserActionView::BrowserActionView(const Extension* extension,
49 Browser* browser, 48 Browser* browser,
50 BrowserActionView::Delegate* delegate) 49 BrowserActionView::Delegate* delegate)
51 : delegate_(delegate) {
52 set_id(VIEW_ID_BROWSER_ACTION);
53 button_.reset(new BrowserActionButton(extension, browser, delegate_));
54 button_->set_drag_controller(delegate_);
55 button_->set_owned_by_client();
56 AddChildView(button_.get());
57 button_->UpdateState();
58 }
59
60 BrowserActionView::~BrowserActionView() {
61 }
62
63 gfx::ImageSkia BrowserActionView::GetIconWithBadge() {
64 return button_->GetIconWithBadge();
65 }
66
67 void BrowserActionView::Layout() {
68 button_->SetBounds(0, 0, width(), height());
69 }
70
71 void BrowserActionView::GetAccessibleState(ui::AXViewState* state) {
72 state->name = l10n_util::GetStringUTF16(
73 IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION);
74 state->role = ui::AX_ROLE_GROUP;
75 }
76
77 gfx::Size BrowserActionView::GetPreferredSize() const {
78 return gfx::Size(BrowserActionsContainer::IconWidth(false),
79 BrowserActionsContainer::IconHeight());
80 }
81
82 void BrowserActionView::PaintChildren(gfx::Canvas* canvas,
83 const views::CullSet& cull_set) {
84 View::PaintChildren(canvas, cull_set);
85 ExtensionAction* action = button_->extension_action();
86 int tab_id = button_->view_controller()->GetCurrentTabId();
87 if (tab_id >= 0)
88 action->PaintBadge(canvas, GetLocalBounds(), tab_id);
89 }
90
91 ////////////////////////////////////////////////////////////////////////////////
92 // BrowserActionButton
93
94 BrowserActionButton::BrowserActionButton(const Extension* extension,
95 Browser* browser,
96 BrowserActionView::Delegate* delegate)
97 : MenuButton(this, base::string16(), NULL, false), 50 : MenuButton(this, base::string16(), NULL, false),
98 view_controller_(new ExtensionActionViewController( 51 view_controller_(new ExtensionActionViewController(
99 extension, 52 extension,
100 browser, 53 browser,
101 extensions::ExtensionActionManager::Get(browser->profile())-> 54 extensions::ExtensionActionManager::Get(browser->profile())->
102 GetBrowserAction(*extension), 55 GetBrowserAction(*extension),
103 this)), 56 this)),
104 delegate_(delegate), 57 delegate_(delegate),
105 called_registered_extension_command_(false), 58 called_registered_extension_command_(false),
106 icon_observer_(NULL) { 59 icon_observer_(NULL) {
60 set_id(VIEW_ID_BROWSER_ACTION);
107 SetHorizontalAlignment(gfx::ALIGN_CENTER); 61 SetHorizontalAlignment(gfx::ALIGN_CENTER);
108 set_context_menu_controller(view_controller_.get()); 62 set_context_menu_controller(view_controller_.get());
109 63 set_drag_controller(delegate_);
110 // No UpdateState() here because View hierarchy not setup yet. Our parent
111 // should call UpdateState() after creation.
112 64
113 content::NotificationSource notification_source = 65 content::NotificationSource notification_source =
114 content::Source<Profile>(browser->profile()->GetOriginalProfile()); 66 content::Source<Profile>(browser->profile()->GetOriginalProfile());
115 registrar_.Add(this, 67 registrar_.Add(this,
116 extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED, 68 extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED,
117 content::Source<ExtensionAction>(extension_action())); 69 content::Source<ExtensionAction>(extension_action()));
118 registrar_.Add(this, 70 registrar_.Add(this,
119 extensions::NOTIFICATION_EXTENSION_COMMAND_ADDED, 71 extensions::NOTIFICATION_EXTENSION_COMMAND_ADDED,
120 notification_source); 72 notification_source);
121 registrar_.Add(this, 73 registrar_.Add(this,
122 extensions::NOTIFICATION_EXTENSION_COMMAND_REMOVED, 74 extensions::NOTIFICATION_EXTENSION_COMMAND_REMOVED,
123 notification_source); 75 notification_source);
124 76
125 // We also listen for browser theme changes on linux because a switch from or 77 // We also listen for browser theme changes on linux because a switch from or
126 // to GTK requires that we regrab our browser action images. 78 // to GTK requires that we regrab our browser action images.
127 registrar_.Add( 79 registrar_.Add(
128 this, 80 this,
129 chrome::NOTIFICATION_BROWSER_THEME_CHANGED, 81 chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
130 content::Source<ThemeService>( 82 content::Source<ThemeService>(
131 ThemeServiceFactory::GetForProfile(browser->profile()))); 83 ThemeServiceFactory::GetForProfile(browser->profile())));
84
85 UpdateState();
132 } 86 }
133 87
134 void BrowserActionButton::ViewHierarchyChanged( 88 BrowserActionView::~BrowserActionView() {
89 }
90
91 void BrowserActionView::ViewHierarchyChanged(
135 const ViewHierarchyChangedDetails& details) { 92 const ViewHierarchyChangedDetails& details) {
136 if (details.is_add && !called_registered_extension_command_ && 93 if (details.is_add && !called_registered_extension_command_ &&
137 GetFocusManager()) { 94 GetFocusManager()) {
138 view_controller_->RegisterCommand(); 95 view_controller_->RegisterCommand();
139 called_registered_extension_command_ = true; 96 called_registered_extension_command_ = true;
140 } 97 }
141 98
142 MenuButton::ViewHierarchyChanged(details); 99 MenuButton::ViewHierarchyChanged(details);
143 } 100 }
144 101
145 void BrowserActionButton::OnDragDone() { 102 void BrowserActionView::OnDragDone() {
146 delegate_->OnBrowserActionViewDragDone(); 103 delegate_->OnBrowserActionViewDragDone();
147 } 104 }
148 105
149 void BrowserActionButton::GetAccessibleState(ui::AXViewState* state) { 106 gfx::Size BrowserActionView::GetPreferredSize() const {
107 return gfx::Size(BrowserActionsContainer::IconWidth(false),
108 BrowserActionsContainer::IconHeight());
109 }
110
111 void BrowserActionView::PaintChildren(gfx::Canvas* canvas,
112 const views::CullSet& cull_set) {
113 View::PaintChildren(canvas, cull_set);
114 int tab_id = view_controller_->GetCurrentTabId();
115 if (tab_id >= 0)
116 extension_action()->PaintBadge(canvas, GetLocalBounds(), tab_id);
117 }
118
119 void BrowserActionView::GetAccessibleState(ui::AXViewState* state) {
150 views::MenuButton::GetAccessibleState(state); 120 views::MenuButton::GetAccessibleState(state);
121 state->name = l10n_util::GetStringUTF16(
122 IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION);
151 state->role = ui::AX_ROLE_BUTTON; 123 state->role = ui::AX_ROLE_BUTTON;
152 } 124 }
153 125
154 void BrowserActionButton::ButtonPressed(views::Button* sender, 126 void BrowserActionView::ButtonPressed(views::Button* sender,
155 const ui::Event& event) { 127 const ui::Event& event) {
156 view_controller_->ExecuteActionByUser(); 128 view_controller_->ExecuteActionByUser();
157 } 129 }
158 130
159 void BrowserActionButton::UpdateState() { 131 void BrowserActionView::UpdateState() {
160 int tab_id = view_controller_->GetCurrentTabId(); 132 int tab_id = view_controller_->GetCurrentTabId();
161 if (tab_id < 0) 133 if (tab_id < 0)
162 return; 134 return;
163 135
164 if (!IsEnabled(tab_id)) { 136 if (!IsEnabled(tab_id)) {
165 SetState(views::CustomButton::STATE_DISABLED); 137 SetState(views::CustomButton::STATE_DISABLED);
166 } else { 138 } else {
167 SetState(menu_visible_ ? 139 SetState(menu_visible_ ?
168 views::CustomButton::STATE_PRESSED : 140 views::CustomButton::STATE_PRESSED :
169 views::CustomButton::STATE_NORMAL); 141 views::CustomButton::STATE_NORMAL);
(...skipping 13 matching lines...) Expand all
183 gfx::ImageSkiaOperations::CreateSuperimposedImage(bg, icon)); 155 gfx::ImageSkiaOperations::CreateSuperimposedImage(bg, icon));
184 } 156 }
185 157
186 // If the browser action name is empty, show the extension name instead. 158 // If the browser action name is empty, show the extension name instead.
187 std::string title = extension_action()->GetTitle(tab_id); 159 std::string title = extension_action()->GetTitle(tab_id);
188 base::string16 name = 160 base::string16 name =
189 base::UTF8ToUTF16(title.empty() ? extension()->name() : title); 161 base::UTF8ToUTF16(title.empty() ? extension()->name() : title);
190 SetTooltipText(name); 162 SetTooltipText(name);
191 SetAccessibleName(name); 163 SetAccessibleName(name);
192 164
193 parent()->SchedulePaint(); 165 SchedulePaint();
194 } 166 }
195 167
196 bool BrowserActionButton::IsPopup() { 168 bool BrowserActionView::IsPopup() {
197 int tab_id = view_controller_->GetCurrentTabId(); 169 int tab_id = view_controller_->GetCurrentTabId();
198 return (tab_id < 0) ? false : extension_action()->HasPopup(tab_id); 170 return (tab_id < 0) ? false : extension_action()->HasPopup(tab_id);
199 } 171 }
200 172
201 void BrowserActionButton::Observe(int type, 173 void BrowserActionView::Observe(int type,
202 const content::NotificationSource& source, 174 const content::NotificationSource& source,
203 const content::NotificationDetails& details) { 175 const content::NotificationDetails& details) {
204 switch (type) { 176 switch (type) {
205 case extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED: 177 case extensions::NOTIFICATION_EXTENSION_BROWSER_ACTION_UPDATED:
206 UpdateState(); 178 UpdateState();
207 // The browser action may have become visible/hidden so we need to make 179 // The browser action may have become visible/hidden so we need to make
208 // sure the state gets updated. 180 // sure the state gets updated.
209 delegate_->OnBrowserActionVisibilityChanged(); 181 delegate_->OnBrowserActionVisibilityChanged();
210 break; 182 break;
211 case extensions::NOTIFICATION_EXTENSION_COMMAND_ADDED: 183 case extensions::NOTIFICATION_EXTENSION_COMMAND_ADDED:
212 case extensions::NOTIFICATION_EXTENSION_COMMAND_REMOVED: { 184 case extensions::NOTIFICATION_EXTENSION_COMMAND_REMOVED: {
213 std::pair<const std::string, const std::string>* payload = 185 std::pair<const std::string, const std::string>* payload =
(...skipping 11 matching lines...) Expand all
225 } 197 }
226 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED: 198 case chrome::NOTIFICATION_BROWSER_THEME_CHANGED:
227 UpdateState(); 199 UpdateState();
228 break; 200 break;
229 default: 201 default:
230 NOTREACHED(); 202 NOTREACHED();
231 break; 203 break;
232 } 204 }
233 } 205 }
234 206
235 bool BrowserActionButton::Activate() { 207 bool BrowserActionView::Activate() {
236 if (!IsPopup()) 208 if (!IsPopup())
237 return true; 209 return true;
238 210
239 view_controller_->ExecuteActionByUser(); 211 view_controller_->ExecuteActionByUser();
240 212
241 // TODO(erikkay): Run a nested modal loop while the mouse is down to 213 // TODO(erikkay): Run a nested modal loop while the mouse is down to
242 // enable menu-like drag-select behavior. 214 // enable menu-like drag-select behavior.
243 215
244 // The return value of this method is returned via OnMousePressed. 216 // The return value of this method is returned via OnMousePressed.
245 // We need to return false here since we're handing off focus to another 217 // We need to return false here since we're handing off focus to another
246 // widget/view, and true will grab it right back and try to send events 218 // widget/view, and true will grab it right back and try to send events
247 // to us. 219 // to us.
248 return false; 220 return false;
249 } 221 }
250 222
251 bool BrowserActionButton::OnMousePressed(const ui::MouseEvent& event) { 223 bool BrowserActionView::OnMousePressed(const ui::MouseEvent& event) {
252 if (!event.IsRightMouseButton()) { 224 if (!event.IsRightMouseButton()) {
253 return IsPopup() ? MenuButton::OnMousePressed(event) : 225 return IsPopup() ? MenuButton::OnMousePressed(event) :
254 LabelButton::OnMousePressed(event); 226 LabelButton::OnMousePressed(event);
255 } 227 }
256 228
257 if (!views::View::ShouldShowContextMenuOnMousePress()) { 229 if (!views::View::ShouldShowContextMenuOnMousePress()) {
258 // See comments in MenuButton::Activate() as to why this is needed. 230 // See comments in MenuButton::Activate() as to why this is needed.
259 SetMouseHandler(NULL); 231 SetMouseHandler(NULL);
260 232
261 ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE); 233 ShowContextMenu(gfx::Point(), ui::MENU_SOURCE_MOUSE);
262 } 234 }
263 return false; 235 return false;
264 } 236 }
265 237
266 void BrowserActionButton::OnMouseReleased(const ui::MouseEvent& event) { 238 void BrowserActionView::OnMouseReleased(const ui::MouseEvent& event) {
267 if (IsPopup() || view_controller_->is_menu_running()) { 239 if (IsPopup() || view_controller_->is_menu_running()) {
268 // TODO(erikkay) this never actually gets called (probably because of the 240 // TODO(erikkay) this never actually gets called (probably because of the
269 // loss of focus). 241 // loss of focus).
270 MenuButton::OnMouseReleased(event); 242 MenuButton::OnMouseReleased(event);
271 } else { 243 } else {
272 LabelButton::OnMouseReleased(event); 244 LabelButton::OnMouseReleased(event);
273 } 245 }
274 } 246 }
275 247
276 void BrowserActionButton::OnMouseExited(const ui::MouseEvent& event) { 248 void BrowserActionView::OnMouseExited(const ui::MouseEvent& event) {
277 if (IsPopup() || view_controller_->is_menu_running()) 249 if (IsPopup() || view_controller_->is_menu_running())
278 MenuButton::OnMouseExited(event); 250 MenuButton::OnMouseExited(event);
279 else 251 else
280 LabelButton::OnMouseExited(event); 252 LabelButton::OnMouseExited(event);
281 } 253 }
282 254
283 bool BrowserActionButton::OnKeyReleased(const ui::KeyEvent& event) { 255 bool BrowserActionView::OnKeyReleased(const ui::KeyEvent& event) {
284 return IsPopup() ? MenuButton::OnKeyReleased(event) : 256 return IsPopup() ? MenuButton::OnKeyReleased(event) :
285 LabelButton::OnKeyReleased(event); 257 LabelButton::OnKeyReleased(event);
286 } 258 }
287 259
288 void BrowserActionButton::OnGestureEvent(ui::GestureEvent* event) { 260 void BrowserActionView::OnGestureEvent(ui::GestureEvent* event) {
289 if (IsPopup()) 261 if (IsPopup())
290 MenuButton::OnGestureEvent(event); 262 MenuButton::OnGestureEvent(event);
291 else 263 else
292 LabelButton::OnGestureEvent(event); 264 LabelButton::OnGestureEvent(event);
293 } 265 }
294 266
295 scoped_ptr<LabelButtonBorder> BrowserActionButton::CreateDefaultBorder() const { 267 scoped_ptr<LabelButtonBorder> BrowserActionView::CreateDefaultBorder() const {
296 scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder(); 268 scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder();
297 border->set_insets(gfx::Insets(kBorderInset, kBorderInset, 269 border->set_insets(gfx::Insets(kBorderInset, kBorderInset,
298 kBorderInset, kBorderInset)); 270 kBorderInset, kBorderInset));
299 return border.Pass(); 271 return border.Pass();
300 } 272 }
301 273
302 void BrowserActionButton::SetButtonPushed() { 274 void BrowserActionView::SetButtonPushed() {
303 SetState(views::CustomButton::STATE_PRESSED); 275 SetState(views::CustomButton::STATE_PRESSED);
304 menu_visible_ = true; 276 menu_visible_ = true;
305 } 277 }
306 278
307 void BrowserActionButton::SetButtonNotPushed() { 279 void BrowserActionView::SetButtonNotPushed() {
308 SetState(views::CustomButton::STATE_NORMAL); 280 SetState(views::CustomButton::STATE_NORMAL);
309 menu_visible_ = false; 281 menu_visible_ = false;
310 } 282 }
311 283
312 bool BrowserActionButton::IsEnabled(int tab_id) const { 284 bool BrowserActionView::IsEnabled(int tab_id) const {
313 return view_controller_->extension_action()->GetIsVisible(tab_id); 285 return view_controller_->extension_action()->GetIsVisible(tab_id);
314 } 286 }
315 287
316 gfx::ImageSkia BrowserActionButton::GetIconWithBadge() { 288 gfx::ImageSkia BrowserActionView::GetIconWithBadge() {
317 int tab_id = view_controller_->GetCurrentTabId(); 289 int tab_id = view_controller_->GetCurrentTabId();
318 gfx::Size spacing(0, ToolbarView::kVertSpacing); 290 gfx::Size spacing(0, ToolbarView::kVertSpacing);
319 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia(); 291 gfx::ImageSkia icon = *view_controller_->GetIcon(tab_id).ToImageSkia();
320 if (!IsEnabled(tab_id)) 292 if (!IsEnabled(tab_id))
321 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25); 293 icon = gfx::ImageSkiaOperations::CreateTransparentImage(icon, .25);
322 return extension_action()->GetIconWithBadge(icon, tab_id, spacing); 294 return extension_action()->GetIconWithBadge(icon, tab_id, spacing);
323 } 295 }
324 296
325 gfx::ImageSkia BrowserActionButton::GetIconForTest() { 297 gfx::ImageSkia BrowserActionView::GetIconForTest() {
326 return GetImage(views::Button::STATE_NORMAL); 298 return GetImage(views::Button::STATE_NORMAL);
327 } 299 }
328 300
329 BrowserActionButton::~BrowserActionButton() { 301 void BrowserActionView::OnIconUpdated() {
330 }
331
332 void BrowserActionButton::OnIconUpdated() {
333 UpdateState(); 302 UpdateState();
334 if (icon_observer_) 303 if (icon_observer_)
335 icon_observer_->OnIconUpdated(GetIconWithBadge()); 304 icon_observer_->OnIconUpdated(GetIconWithBadge());
336 } 305 }
337 306
338 views::View* BrowserActionButton::GetAsView() { 307 views::View* BrowserActionView::GetAsView() {
339 return this; 308 return this;
340 } 309 }
341 310
342 bool BrowserActionButton::IsShownInMenu() { 311 bool BrowserActionView::IsShownInMenu() {
343 return delegate_->ShownInsideMenu(); 312 return delegate_->ShownInsideMenu();
344 } 313 }
345 314
346 views::FocusManager* BrowserActionButton::GetFocusManagerForAccelerator() { 315 views::FocusManager* BrowserActionView::GetFocusManagerForAccelerator() {
347 return GetFocusManager(); 316 return GetFocusManager();
348 } 317 }
349 318
350 views::Widget* BrowserActionButton::GetParentForContextMenu() { 319 views::Widget* BrowserActionView::GetParentForContextMenu() {
351 // RunMenuAt expects a nested menu to be parented by the same widget as the 320 // RunMenuAt expects a nested menu to be parented by the same widget as the
352 // already visible menu, in this case the Chrome menu. 321 // already visible menu, in this case the Chrome menu.
353 return delegate_->ShownInsideMenu() ? 322 return delegate_->ShownInsideMenu() ?
354 BrowserView::GetBrowserViewForBrowser(view_controller_->browser()) 323 BrowserView::GetBrowserViewForBrowser(view_controller_->browser())
355 ->toolbar()->app_menu()->GetWidget() : 324 ->toolbar()->app_menu()->GetWidget() :
356 GetWidget(); 325 GetWidget();
357 } 326 }
358 327
359 views::View* BrowserActionButton::GetReferenceViewForPopup() { 328 views::View* BrowserActionView::GetReferenceViewForPopup() {
360 // Browser actions in the overflow menu can still show popups, so we may need 329 // Browser actions in the overflow menu can still show popups, so we may need
361 // a reference view other than this button's parent. If so, use the overflow 330 // a reference view other than this button's parent. If so, use the overflow
362 // view. 331 // view.
363 return parent()->visible() ? this : delegate_->GetOverflowReferenceView(); 332 return visible() ? this : delegate_->GetOverflowReferenceView();
364 } 333 }
365 334
366 content::WebContents* BrowserActionButton::GetCurrentWebContents() { 335 content::WebContents* BrowserActionView::GetCurrentWebContents() {
367 return delegate_->GetCurrentWebContents(); 336 return delegate_->GetCurrentWebContents();
368 } 337 }
369 338
370 void BrowserActionButton::HideActivePopup() { 339 void BrowserActionView::HideActivePopup() {
371 delegate_->HideActivePopup(); 340 delegate_->HideActivePopup();
372 } 341 }
373 342
374 void BrowserActionButton::OnPopupShown(bool grant_tab_permissions) { 343 void BrowserActionView::OnPopupShown(bool grant_tab_permissions) {
375 delegate_->SetPopupOwner(this); 344 delegate_->SetPopupOwner(this);
376 if (grant_tab_permissions) 345 if (grant_tab_permissions)
377 SetButtonPushed(); 346 SetButtonPushed();
378 } 347 }
379 348
380 void BrowserActionButton::CleanupPopup() { 349 void BrowserActionView::CleanupPopup() {
381 // We need to do these actions synchronously (instead of closing and then 350 // We need to do these actions synchronously (instead of closing and then
382 // performing the rest of the cleanup in OnWidgetDestroyed()) because 351 // performing the rest of the cleanup in OnWidgetDestroyed()) because
383 // OnWidgetDestroyed() can be called asynchronously from Close(), and we need 352 // OnWidgetDestroyed() can be called asynchronously from Close(), and we need
384 // to keep the delegate's popup owner up-to-date. 353 // to keep the delegate's popup owner up-to-date.
385 SetButtonNotPushed(); 354 SetButtonNotPushed();
386 delegate_->SetPopupOwner(NULL); 355 delegate_->SetPopupOwner(NULL);
387 } 356 }
388 357
389 void BrowserActionButton::OnWillShowContextMenus() { 358 void BrowserActionView::OnWillShowContextMenus() {
390 SetButtonPushed(); 359 SetButtonPushed();
391 } 360 }
392 361
393 void BrowserActionButton::OnContextMenuDone() { 362 void BrowserActionView::OnContextMenuDone() {
394 SetButtonNotPushed(); 363 SetButtonNotPushed();
395 } 364 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698