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

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

Issue 10826262: Fixed Issue 141873. Crash when BrowserActionButton get disabled or hidden. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed Issue 141873 Created 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/views/browser_action_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser_action_view.h" 5 #include "chrome/browser/ui/views/browser_action_view.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/extensions/api/commands/command_service.h" 8 #include "chrome/browser/extensions/api/commands/command_service.h"
9 #include "chrome/browser/extensions/api/commands/command_service_factory.h" 9 #include "chrome/browser/extensions/api/commands/command_service_factory.h"
10 #include "chrome/browser/extensions/extension_context_menu_model.h" 10 #include "chrome/browser/extensions/extension_context_menu_model.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 BrowserActionView::BrowserActionView(const Extension* extension, 55 BrowserActionView::BrowserActionView(const Extension* extension,
56 Browser* browser, 56 Browser* browser,
57 BrowserActionView::Delegate* delegate) 57 BrowserActionView::Delegate* delegate)
58 : browser_(browser), 58 : browser_(browser),
59 delegate_(delegate), 59 delegate_(delegate),
60 button_(NULL), 60 button_(NULL),
61 extension_(extension) { 61 extension_(extension) {
62 } 62 }
63 63
64 BrowserActionView::~BrowserActionView() { 64 BrowserActionView::~BrowserActionView() {
65 button_->Destroy();
65 } 66 }
66 67
67 gfx::Canvas* BrowserActionView::GetIconWithBadge() { 68 gfx::Canvas* BrowserActionView::GetIconWithBadge() {
68 int tab_id = delegate_->GetCurrentTabId(); 69 int tab_id = delegate_->GetCurrentTabId();
69 70
70 SkBitmap icon = 71 SkBitmap icon =
71 *button_->extension()->browser_action()->GetIcon(tab_id).ToSkBitmap(); 72 *button_->extension()->browser_action()->GetIcon(tab_id).ToSkBitmap();
72 73
73 // Dim the icon if our button is disabled. 74 // Dim the icon if our button is disabled.
74 if (!button_->IsEnabled(tab_id)) 75 if (!button_->IsEnabled(tab_id))
(...skipping 17 matching lines...) Expand all
92 // button's preferred size, we use IconHeight(), since that's how big the 93 // button's preferred size, we use IconHeight(), since that's how big the
93 // button should be regardless of what it's displaying. 94 // button should be regardless of what it's displaying.
94 gfx::Point offset = delegate_->GetViewContentOffset(); 95 gfx::Point offset = delegate_->GetViewContentOffset();
95 button_->SetBounds(offset.x(), offset.y(), width() - offset.x(), 96 button_->SetBounds(offset.x(), offset.y(), width() - offset.x(),
96 BrowserActionsContainer::IconHeight()); 97 BrowserActionsContainer::IconHeight());
97 } 98 }
98 99
99 void BrowserActionView::ViewHierarchyChanged(bool is_add, 100 void BrowserActionView::ViewHierarchyChanged(bool is_add,
100 View* parent, 101 View* parent,
101 View* child) { 102 View* child) {
102 if (is_add && (child == this)) { 103 if (is_add && (child == this)) {
sky 2012/08/13 23:48:37 Can you also add GetWidget() != NULL && button_ ==
yefimt 2012/08/13 23:56:08 Done.
103 button_ = new BrowserActionButton(extension_, browser_, delegate_); 104 button_ = new BrowserActionButton(extension_, browser_, delegate_);
104 button_->set_drag_controller(delegate_); 105 button_->set_drag_controller(delegate_);
105 106 button_->set_owned_by_client();
106 AddChildView(button_); 107 AddChildView(button_);
107 button_->UpdateState(); 108 button_->UpdateState();
108 } 109 }
109 } 110 }
110 111
111 void BrowserActionView::GetAccessibleState(ui::AccessibleViewState* state) { 112 void BrowserActionView::GetAccessibleState(ui::AccessibleViewState* state) {
112 state->name = l10n_util::GetStringUTF16( 113 state->name = l10n_util::GetStringUTF16(
113 IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION); 114 IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION);
114 state->role = ui::AccessibilityTypes::ROLE_GROUPING; 115 state->role = ui::AccessibilityTypes::ROLE_GROUPING;
115 } 116 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 225
225 context_menu_ = menu_runner_->GetMenu(); 226 context_menu_ = menu_runner_->GetMenu();
226 gfx::Point screen_loc; 227 gfx::Point screen_loc;
227 views::View::ConvertPointToScreen(this, &screen_loc); 228 views::View::ConvertPointToScreen(this, &screen_loc);
228 if (menu_runner_->RunMenuAt(GetWidget(), NULL, gfx::Rect(screen_loc, size()), 229 if (menu_runner_->RunMenuAt(GetWidget(), NULL, gfx::Rect(screen_loc, size()),
229 views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) == 230 views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) ==
230 views::MenuRunner::MENU_DELETED) { 231 views::MenuRunner::MENU_DELETED) {
231 return; 232 return;
232 } 233 }
233 234
234 menu_runner_.reset();
sky 2012/08/13 23:48:37 This should stay.
yefimt 2012/08/13 23:56:08 Done, but I looked how other code does it and nobo
235 SetButtonNotPushed(); 235 SetButtonNotPushed();
236 context_menu_ = NULL; 236 context_menu_ = NULL;
237 } 237 }
238 238
239 void BrowserActionButton::OnImageLoaded(const gfx::Image& image, 239 void BrowserActionButton::OnImageLoaded(const gfx::Image& image,
240 const std::string& extension_id, 240 const std::string& extension_id,
241 int index) { 241 int index) {
242 browser_action_->CacheIcon(browser_action_->default_icon_path(), image); 242 browser_action_->CacheIcon(browser_action_->default_icon_path(), image);
243 243
244 // Call back to UpdateState() because a more specific icon might have been set 244 // Call back to UpdateState() because a more specific icon might have been set
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 445
446 extensions::Command browser_action_command; 446 extensions::Command browser_action_command;
447 if (!only_if_active || !command_service->GetBrowserActionCommand( 447 if (!only_if_active || !command_service->GetBrowserActionCommand(
448 extension_->id(), 448 extension_->id(),
449 extensions::CommandService::ACTIVE_ONLY, 449 extensions::CommandService::ACTIVE_ONLY,
450 &browser_action_command, 450 &browser_action_command,
451 NULL)) { 451 NULL)) {
452 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this); 452 GetFocusManager()->UnregisterAccelerator(*keybinding_.get(), this);
453 } 453 }
454 } 454 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/browser_action_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698