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