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 |