OLD | NEW |
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/toolbar_view.h" | 5 #include "chrome/browser/ui/views/toolbar/toolbar_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/i18n/number_formatting.h" | 10 #include "base/i18n/number_formatting.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "base/trace_event/trace_event.h" | 12 #include "base/trace_event/trace_event.h" |
13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
14 #include "chrome/app/chrome_command_ids.h" | 14 #include "chrome/app/chrome_command_ids.h" |
15 #include "chrome/browser/chrome_notification_types.h" | 15 #include "chrome/browser/chrome_notification_types.h" |
16 #include "chrome/browser/command_updater.h" | 16 #include "chrome/browser/command_updater.h" |
| 17 #include "chrome/browser/extensions/extension_commands_global_registry.h" |
17 #include "chrome/browser/extensions/extension_util.h" | 18 #include "chrome/browser/extensions/extension_util.h" |
18 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/browser/themes/theme_properties.h" | 20 #include "chrome/browser/themes/theme_properties.h" |
20 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/browser_command_controller.h" | 22 #include "chrome/browser/ui/browser_command_controller.h" |
22 #include "chrome/browser/ui/browser_commands.h" | 23 #include "chrome/browser/ui/browser_commands.h" |
23 #include "chrome/browser/ui/browser_content_setting_bubble_model_delegate.h" | 24 #include "chrome/browser/ui/browser_content_setting_bubble_model_delegate.h" |
24 #include "chrome/browser/ui/browser_tabstrip.h" | 25 #include "chrome/browser/ui/browser_tabstrip.h" |
25 #include "chrome/browser/ui/browser_window.h" | 26 #include "chrome/browser/ui/browser_window.h" |
26 #include "chrome/browser/ui/global_error/global_error_service.h" | 27 #include "chrome/browser/ui/global_error/global_error_service.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 | 115 |
115 } // namespace | 116 } // namespace |
116 | 117 |
117 // static | 118 // static |
118 const char ToolbarView::kViewClassName[] = "ToolbarView"; | 119 const char ToolbarView::kViewClassName[] = "ToolbarView"; |
119 | 120 |
120 //////////////////////////////////////////////////////////////////////////////// | 121 //////////////////////////////////////////////////////////////////////////////// |
121 // ToolbarView, public: | 122 // ToolbarView, public: |
122 | 123 |
123 ToolbarView::ToolbarView(Browser* browser) | 124 ToolbarView::ToolbarView(Browser* browser) |
124 : back_(nullptr), | 125 : back_(NULL), |
125 forward_(nullptr), | 126 forward_(NULL), |
126 reload_(nullptr), | 127 reload_(NULL), |
127 home_(nullptr), | 128 home_(NULL), |
128 location_bar_(nullptr), | 129 location_bar_(NULL), |
129 browser_actions_(nullptr), | 130 browser_actions_(NULL), |
130 app_menu_button_(nullptr), | 131 app_menu_button_(NULL), |
131 browser_(browser), | 132 browser_(browser), |
132 badge_controller_(browser->profile(), this), | 133 badge_controller_(browser->profile(), this) { |
133 display_mode_(browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP) | |
134 ? DISPLAYMODE_NORMAL | |
135 : DISPLAYMODE_LOCATION) { | |
136 set_id(VIEW_ID_TOOLBAR); | 134 set_id(VIEW_ID_TOOLBAR); |
137 | 135 |
138 SetEventTargeter( | 136 SetEventTargeter( |
139 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); | 137 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); |
140 | 138 |
141 chrome::AddCommandObserver(browser_, IDC_BACK, this); | 139 chrome::AddCommandObserver(browser_, IDC_BACK, this); |
142 chrome::AddCommandObserver(browser_, IDC_FORWARD, this); | 140 chrome::AddCommandObserver(browser_, IDC_FORWARD, this); |
143 chrome::AddCommandObserver(browser_, IDC_RELOAD, this); | 141 chrome::AddCommandObserver(browser_, IDC_RELOAD, this); |
144 chrome::AddCommandObserver(browser_, IDC_HOME, this); | 142 chrome::AddCommandObserver(browser_, IDC_HOME, this); |
145 chrome::AddCommandObserver(browser_, IDC_LOAD_NEW_TAB_PAGE, this); | 143 chrome::AddCommandObserver(browser_, IDC_LOAD_NEW_TAB_PAGE, this); |
146 | 144 |
| 145 display_mode_ = DISPLAYMODE_LOCATION; |
| 146 if (browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)) |
| 147 display_mode_ = DISPLAYMODE_NORMAL; |
| 148 |
147 if (OutdatedUpgradeBubbleView::IsAvailable()) { | 149 if (OutdatedUpgradeBubbleView::IsAvailable()) { |
148 registrar_.Add(this, chrome::NOTIFICATION_OUTDATED_INSTALL, | 150 registrar_.Add(this, chrome::NOTIFICATION_OUTDATED_INSTALL, |
149 content::NotificationService::AllSources()); | 151 content::NotificationService::AllSources()); |
150 registrar_.Add(this, chrome::NOTIFICATION_OUTDATED_INSTALL_NO_AU, | 152 registrar_.Add(this, chrome::NOTIFICATION_OUTDATED_INSTALL_NO_AU, |
151 content::NotificationService::AllSources()); | 153 content::NotificationService::AllSources()); |
152 } | 154 } |
153 #if defined(OS_WIN) | 155 #if defined(OS_WIN) |
154 registrar_.Add(this, chrome::NOTIFICATION_CRITICAL_UPGRADE_INSTALLED, | 156 registrar_.Add(this, chrome::NOTIFICATION_CRITICAL_UPGRADE_INSTALLED, |
155 content::NotificationService::AllSources()); | 157 content::NotificationService::AllSources()); |
156 #endif | 158 #endif |
157 } | 159 } |
158 | 160 |
159 ToolbarView::~ToolbarView() { | 161 ToolbarView::~ToolbarView() { |
160 // NOTE: Don't remove the command observers here. This object gets destroyed | 162 // NOTE: Don't remove the command observers here. This object gets destroyed |
161 // after the Browser (which owns the CommandUpdater), so the CommandUpdater is | 163 // after the Browser (which owns the CommandUpdater), so the CommandUpdater is |
162 // already gone. | 164 // already gone. |
163 } | 165 } |
164 | 166 |
165 void ToolbarView::Init() { | 167 void ToolbarView::Init() { |
166 location_bar_ = | 168 GetWidget()->AddObserver(this); |
167 new LocationBarView(browser_, browser_->profile(), | |
168 browser_->command_controller()->command_updater(), | |
169 this, !is_display_mode_normal()); | |
170 | |
171 if (!is_display_mode_normal()) { | |
172 AddChildView(location_bar_); | |
173 location_bar_->Init(); | |
174 return; | |
175 } | |
176 | 169 |
177 back_ = new BackButton( | 170 back_ = new BackButton( |
178 browser_->profile(), this, | 171 browser_->profile(), this, |
179 new BackForwardMenuModel(browser_, BackForwardMenuModel::BACKWARD_MENU)); | 172 new BackForwardMenuModel(browser_, BackForwardMenuModel::BACKWARD_MENU)); |
180 back_->set_triggerable_event_flags( | 173 back_->set_triggerable_event_flags( |
181 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); | 174 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); |
182 back_->set_tag(IDC_BACK); | 175 back_->set_tag(IDC_BACK); |
183 back_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_BACK)); | 176 back_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_BACK)); |
184 back_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_BACK)); | 177 back_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_BACK)); |
185 back_->set_id(VIEW_ID_BACK_BUTTON); | 178 back_->set_id(VIEW_ID_BACK_BUTTON); |
186 back_->Init(); | 179 back_->Init(); |
187 | 180 |
188 forward_ = new ToolbarButton( | 181 forward_ = new ToolbarButton( |
189 browser_->profile(), this, | 182 browser_->profile(), this, |
190 new BackForwardMenuModel(browser_, BackForwardMenuModel::FORWARD_MENU)); | 183 new BackForwardMenuModel(browser_, BackForwardMenuModel::FORWARD_MENU)); |
191 forward_->set_triggerable_event_flags( | 184 forward_->set_triggerable_event_flags( |
192 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); | 185 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); |
193 forward_->set_tag(IDC_FORWARD); | 186 forward_->set_tag(IDC_FORWARD); |
194 forward_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_FORWARD)); | 187 forward_->SetTooltipText(l10n_util::GetStringUTF16(IDS_TOOLTIP_FORWARD)); |
195 forward_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FORWARD)); | 188 forward_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_FORWARD)); |
196 forward_->set_id(VIEW_ID_FORWARD_BUTTON); | 189 forward_->set_id(VIEW_ID_FORWARD_BUTTON); |
197 forward_->Init(); | 190 forward_->Init(); |
198 | 191 |
| 192 location_bar_ = new LocationBarView( |
| 193 browser_, browser_->profile(), |
| 194 browser_->command_controller()->command_updater(), this, |
| 195 display_mode_ == DISPLAYMODE_LOCATION); |
| 196 |
199 reload_ = new ReloadButton(browser_->profile(), | 197 reload_ = new ReloadButton(browser_->profile(), |
200 browser_->command_controller()->command_updater()); | 198 browser_->command_controller()->command_updater()); |
201 reload_->set_triggerable_event_flags( | 199 reload_->set_triggerable_event_flags( |
202 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); | 200 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); |
203 reload_->set_tag(IDC_RELOAD); | 201 reload_->set_tag(IDC_RELOAD); |
204 reload_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_RELOAD)); | 202 reload_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_RELOAD)); |
205 reload_->set_id(VIEW_ID_RELOAD_BUTTON); | 203 reload_->set_id(VIEW_ID_RELOAD_BUTTON); |
206 reload_->Init(); | 204 reload_->Init(); |
207 | 205 |
208 home_ = new HomeButton(this, browser_); | 206 home_ = new HomeButton(this, browser_); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 // Accessibility specific tooltip text. | 267 // Accessibility specific tooltip text. |
270 if (content::BrowserAccessibilityState::GetInstance()-> | 268 if (content::BrowserAccessibilityState::GetInstance()-> |
271 IsAccessibleBrowser()) { | 269 IsAccessibleBrowser()) { |
272 back_->SetTooltipText( | 270 back_->SetTooltipText( |
273 l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLTIP_BACK)); | 271 l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLTIP_BACK)); |
274 forward_->SetTooltipText( | 272 forward_->SetTooltipText( |
275 l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLTIP_FORWARD)); | 273 l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLTIP_FORWARD)); |
276 } | 274 } |
277 } | 275 } |
278 | 276 |
| 277 void ToolbarView::OnWidgetActivationChanged(views::Widget* widget, |
| 278 bool active) { |
| 279 extensions::ExtensionCommandsGlobalRegistry* registry = |
| 280 extensions::ExtensionCommandsGlobalRegistry::Get(browser_->profile()); |
| 281 if (active) { |
| 282 registry->set_registry_for_active_window( |
| 283 browser_actions_->extension_keybinding_registry()); |
| 284 } else if (registry->registry_for_active_window() == |
| 285 browser_actions_->extension_keybinding_registry()) { |
| 286 registry->set_registry_for_active_window(nullptr); |
| 287 } |
| 288 } |
| 289 |
279 void ToolbarView::Update(WebContents* tab) { | 290 void ToolbarView::Update(WebContents* tab) { |
280 if (location_bar_) | 291 if (location_bar_) |
281 location_bar_->Update(tab); | 292 location_bar_->Update(tab); |
282 if (browser_actions_) | 293 if (browser_actions_) |
283 browser_actions_->RefreshToolbarActionViews(); | 294 browser_actions_->RefreshToolbarActionViews(); |
284 if (reload_) | 295 if (reload_) |
285 reload_->set_menu_enabled(chrome::IsDebuggerAttachedToCurrentTab(browser_)); | 296 reload_->set_menu_enabled(chrome::IsDebuggerAttachedToCurrentTab(browser_)); |
286 } | 297 } |
287 | 298 |
288 void ToolbarView::ResetTabState(WebContents* tab) { | 299 void ToolbarView::ResetTabState(WebContents* tab) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 views::Widget* bubble_widget) { | 333 views::Widget* bubble_widget) { |
323 if (bubble_widget && | 334 if (bubble_widget && |
324 (anchor_view == location_bar()->star_view() || | 335 (anchor_view == location_bar()->star_view() || |
325 anchor_view == location_bar()->save_credit_card_icon_view() || | 336 anchor_view == location_bar()->save_credit_card_icon_view() || |
326 anchor_view == location_bar()->translate_icon_view())) { | 337 anchor_view == location_bar()->translate_icon_view())) { |
327 DCHECK(anchor_view); | 338 DCHECK(anchor_view); |
328 bubble_widget->AddObserver(static_cast<BubbleIconView*>(anchor_view)); | 339 bubble_widget->AddObserver(static_cast<BubbleIconView*>(anchor_view)); |
329 } | 340 } |
330 } | 341 } |
331 | 342 |
| 343 void ToolbarView::ExecuteExtensionCommand( |
| 344 const extensions::Extension* extension, |
| 345 const extensions::Command& command) { |
| 346 browser_actions_->ExecuteExtensionCommand(extension, command); |
| 347 } |
| 348 |
332 int ToolbarView::GetMaxBrowserActionsWidth() const { | 349 int ToolbarView::GetMaxBrowserActionsWidth() const { |
333 // The browser actions container is allowed to grow, but only up until the | 350 // The browser actions container is allowed to grow, but only up until the |
334 // omnibox reaches its minimum size. So its maximum allowed width is its | 351 // omnibox reaches its minimum size. So its maximum allowed width is its |
335 // current size, plus any that the omnibox could give up. | 352 // current size, plus any that the omnibox could give up. |
336 return browser_actions_->width() + | 353 return browser_actions_->width() + |
337 (location_bar_->width() - location_bar_->GetMinimumSize().width()); | 354 (location_bar_->width() - location_bar_->GetMinimumSize().width()); |
338 } | 355 } |
339 | 356 |
340 //////////////////////////////////////////////////////////////////////////////// | 357 //////////////////////////////////////////////////////////////////////////////// |
341 // ToolbarView, AccessiblePaneView overrides: | 358 // ToolbarView, AccessiblePaneView overrides: |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 gfx::Size ToolbarView::GetPreferredSize() const { | 493 gfx::Size ToolbarView::GetPreferredSize() const { |
477 return GetSizeInternal(&View::GetPreferredSize); | 494 return GetSizeInternal(&View::GetPreferredSize); |
478 } | 495 } |
479 | 496 |
480 gfx::Size ToolbarView::GetMinimumSize() const { | 497 gfx::Size ToolbarView::GetMinimumSize() const { |
481 return GetSizeInternal(&View::GetMinimumSize); | 498 return GetSizeInternal(&View::GetMinimumSize); |
482 } | 499 } |
483 | 500 |
484 void ToolbarView::Layout() { | 501 void ToolbarView::Layout() { |
485 // If we have not been initialized yet just do nothing. | 502 // If we have not been initialized yet just do nothing. |
486 if (!location_bar_) | 503 if (back_ == NULL) |
487 return; | 504 return; |
488 | 505 |
489 if (!is_display_mode_normal()) { | 506 if (!is_display_mode_normal()) { |
490 location_bar_->SetBounds(0, PopupTopSpacing(), width(), | 507 location_bar_->SetBounds(0, PopupTopSpacing(), width(), |
491 location_bar_->GetPreferredSize().height()); | 508 location_bar_->GetPreferredSize().height()); |
492 return; | 509 return; |
493 } | 510 } |
494 | 511 |
495 // We assume all child elements except the location bar are the same height. | 512 // We assume all child elements except the location bar are the same height. |
496 // Set child_y such that buttons appear vertically centered. | 513 // Set child_y such that buttons appear vertically centered. |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 // Extend the app menu to the screen's right edge in maximized mode just like | 602 // Extend the app menu to the screen's right edge in maximized mode just like |
586 // we extend the back button to the left edge. | 603 // we extend the back button to the left edge. |
587 if (maximized) | 604 if (maximized) |
588 app_menu_width += insets.right(); | 605 app_menu_width += insets.right(); |
589 app_menu_button_->SetBounds(next_element_x, child_y, app_menu_width, | 606 app_menu_button_->SetBounds(next_element_x, child_y, app_menu_width, |
590 child_height); | 607 child_height); |
591 app_menu_button_->SetTrailingMargin(maximized ? insets.right() : 0); | 608 app_menu_button_->SetTrailingMargin(maximized ? insets.right() : 0); |
592 } | 609 } |
593 | 610 |
594 void ToolbarView::OnThemeChanged() { | 611 void ToolbarView::OnThemeChanged() { |
595 if (is_display_mode_normal()) | 612 LoadImages(); |
596 LoadImages(); | |
597 } | 613 } |
598 | 614 |
599 const char* ToolbarView::GetClassName() const { | 615 const char* ToolbarView::GetClassName() const { |
600 return kViewClassName; | 616 return kViewClassName; |
601 } | 617 } |
602 | 618 |
603 bool ToolbarView::AcceleratorPressed(const ui::Accelerator& accelerator) { | 619 bool ToolbarView::AcceleratorPressed(const ui::Accelerator& accelerator) { |
604 const views::View* focused_view = focus_manager()->GetFocusedView(); | 620 const views::View* focused_view = focus_manager()->GetFocusedView(); |
605 if (focused_view && (focused_view->id() == VIEW_ID_OMNIBOX)) | 621 if (focused_view && (focused_view->id() == VIEW_ID_OMNIBOX)) |
606 return false; // Let the omnibox handle all accelerator events. | 622 return false; // Let the omnibox handle all accelerator events. |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 void ToolbarView::OnShowHomeButtonChanged() { | 822 void ToolbarView::OnShowHomeButtonChanged() { |
807 Layout(); | 823 Layout(); |
808 SchedulePaint(); | 824 SchedulePaint(); |
809 } | 825 } |
810 | 826 |
811 int ToolbarView::content_shadow_height() const { | 827 int ToolbarView::content_shadow_height() const { |
812 return GetLayoutConstant( | 828 return GetLayoutConstant( |
813 (browser_->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH) ? | 829 (browser_->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH) ? |
814 TOOLBAR_CONTENT_SHADOW_HEIGHT_ASH : TOOLBAR_CONTENT_SHADOW_HEIGHT); | 830 TOOLBAR_CONTENT_SHADOW_HEIGHT_ASH : TOOLBAR_CONTENT_SHADOW_HEIGHT); |
815 } | 831 } |
OLD | NEW |