OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 #include "ui/views/controls/textfield/textfield.h" | 140 #include "ui/views/controls/textfield/textfield.h" |
141 #include "ui/views/controls/webview/webview.h" | 141 #include "ui/views/controls/webview/webview.h" |
142 #include "ui/views/focus/external_focus_tracker.h" | 142 #include "ui/views/focus/external_focus_tracker.h" |
143 #include "ui/views/focus/view_storage.h" | 143 #include "ui/views/focus/view_storage.h" |
144 #include "ui/views/layout/grid_layout.h" | 144 #include "ui/views/layout/grid_layout.h" |
145 #include "ui/views/widget/native_widget.h" | 145 #include "ui/views/widget/native_widget.h" |
146 #include "ui/views/widget/root_view.h" | 146 #include "ui/views/widget/root_view.h" |
147 #include "ui/views/widget/widget.h" | 147 #include "ui/views/widget/widget.h" |
148 #include "ui/views/window/dialog_delegate.h" | 148 #include "ui/views/window/dialog_delegate.h" |
149 | 149 |
| 150 #if defined(OS_CHROMEOS) |
| 151 #include "chrome/browser/ui/ash/ash_util.h" |
| 152 #endif // defined(OS_CHROMEOS) |
| 153 |
150 #if !defined(OS_CHROMEOS) | 154 #if !defined(OS_CHROMEOS) |
151 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" | 155 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" |
152 #endif | 156 #endif // !defined(OS_CHROMEOS) |
153 | |
154 #if defined(USE_ASH) | |
155 #include "chrome/browser/ui/ash/ash_util.h" | |
156 #endif | |
157 | 157 |
158 #if defined(USE_AURA) | 158 #if defined(USE_AURA) |
159 #include "ui/aura/client/window_parenting_client.h" | 159 #include "ui/aura/client/window_parenting_client.h" |
160 #include "ui/aura/window.h" | 160 #include "ui/aura/window.h" |
161 #include "ui/aura/window_tree_host.h" | 161 #include "ui/aura/window_tree_host.h" |
162 #endif | 162 #endif |
163 | 163 |
164 #if defined(OS_WIN) | 164 #if defined(OS_WIN) |
165 #include "base/win/windows_version.h" | 165 #include "base/win/windows_version.h" |
166 #include "chrome/browser/win/jumplist.h" | 166 #include "chrome/browser/win/jumplist.h" |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 // The background image starts tiling horizontally at the window left edge and | 519 // The background image starts tiling horizontally at the window left edge and |
520 // vertically at the top edge of the horizontal tab strip (or where it would | 520 // vertically at the top edge of the horizontal tab strip (or where it would |
521 // be). We expect our parent's origin to be the window origin. | 521 // be). We expect our parent's origin to be the window origin. |
522 gfx::Point window_point(point + GetMirroredPosition().OffsetFromOrigin()); | 522 gfx::Point window_point(point + GetMirroredPosition().OffsetFromOrigin()); |
523 window_point.Offset(frame_->GetThemeBackgroundXInset(), | 523 window_point.Offset(frame_->GetThemeBackgroundXInset(), |
524 -frame_->GetTopInset(false)); | 524 -frame_->GetTopInset(false)); |
525 return window_point; | 525 return window_point; |
526 } | 526 } |
527 | 527 |
528 bool BrowserView::IsTabStripVisible() const { | 528 bool BrowserView::IsTabStripVisible() const { |
529 if (immersive_mode_controller_->ShouldHideTopViews() && | |
530 immersive_mode_controller_->ShouldHideTabIndicators()) { | |
531 return false; | |
532 } | |
533 | |
534 // Return false if this window does not normally display a tabstrip. | 529 // Return false if this window does not normally display a tabstrip. |
535 if (!browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)) | 530 if (!browser_->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)) |
536 return false; | 531 return false; |
537 | 532 |
538 // Return false if the tabstrip has not yet been created (by InitViews()), | 533 // Return false if the tabstrip has not yet been created (by InitViews()), |
539 // since callers may otherwise try to access it. Note that we can't just check | 534 // since callers may otherwise try to access it. Note that we can't just check |
540 // this alone, as the tabstrip is created unconditionally even for windows | 535 // this alone, as the tabstrip is created unconditionally even for windows |
541 // that won't display it. | 536 // that won't display it. |
542 return tabstrip_ != nullptr; | 537 return tabstrip_ != nullptr; |
543 } | 538 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 } | 581 } |
587 | 582 |
588 WebContents* BrowserView::GetActiveWebContents() const { | 583 WebContents* BrowserView::GetActiveWebContents() const { |
589 return browser_->tab_strip_model()->GetActiveWebContents(); | 584 return browser_->tab_strip_model()->GetActiveWebContents(); |
590 } | 585 } |
591 | 586 |
592 /////////////////////////////////////////////////////////////////////////////// | 587 /////////////////////////////////////////////////////////////////////////////// |
593 // BrowserView, BrowserWindow implementation: | 588 // BrowserView, BrowserWindow implementation: |
594 | 589 |
595 void BrowserView::Show() { | 590 void BrowserView::Show() { |
596 #if !defined(OS_WIN) && !defined(USE_ASH) | 591 #if !defined(OS_WIN) && !defined(OS_CHROMEOS) |
597 // The Browser associated with this browser window must become the active | 592 // The Browser associated with this browser window must become the active |
598 // browser at the time |Show()| is called. This is the natural behavior under | 593 // browser at the time |Show()| is called. This is the natural behavior under |
599 // Windows and Ash, but other platforms will not trigger | 594 // Windows and Chrome OS, but other platforms will not trigger |
600 // OnWidgetActivationChanged() until we return to the runloop. Therefore any | 595 // OnWidgetActivationChanged() until we return to the runloop. Therefore any |
601 // calls to Browser::GetLastActive() will return the wrong result if we do not | 596 // calls to Browser::GetLastActive() will return the wrong result if we do not |
602 // explicitly set it here. | 597 // explicitly set it here. |
603 // A similar block also appears in BrowserWindowCocoa::Show(). | 598 // A similar block also appears in BrowserWindowCocoa::Show(). |
604 BrowserList::SetLastActive(browser()); | 599 BrowserList::SetLastActive(browser()); |
605 #endif | 600 #endif |
606 | 601 |
607 // If the window is already visible, just activate it. | 602 // If the window is already visible, just activate it. |
608 if (frame_->IsVisible()) { | 603 if (frame_->IsVisible()) { |
609 frame_->Activate(); | 604 frame_->Activate(); |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
985 void BrowserView::FullscreenStateChanged() { | 980 void BrowserView::FullscreenStateChanged() { |
986 CHECK(!IsFullscreen()); | 981 CHECK(!IsFullscreen()); |
987 ProcessFullscreen(false, GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE); | 982 ProcessFullscreen(false, GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE); |
988 } | 983 } |
989 | 984 |
990 LocationBar* BrowserView::GetLocationBar() const { | 985 LocationBar* BrowserView::GetLocationBar() const { |
991 return GetLocationBarView(); | 986 return GetLocationBarView(); |
992 } | 987 } |
993 | 988 |
994 void BrowserView::SetFocusToLocationBar(bool select_all) { | 989 void BrowserView::SetFocusToLocationBar(bool select_all) { |
995 // On Windows, changing focus to the location bar causes the browser | 990 // On Windows, changing focus to the location bar causes the browser window to |
996 // window to become active. This can steal focus if the user has | 991 // become active. This can steal focus if the user has another window open |
997 // another window open already. On ChromeOS, changing focus makes a | 992 // already. On Chrome OS, changing focus makes a view believe it has a focus |
998 // view believe it has a focus even if the widget doens't have a | 993 // even if the widget doens't have a focus. Either cases, we need to ignore |
999 // focus. Either cases, we need to ignore this when the browser | 994 // this when the browser window isn't active. |
1000 // window isn't active. | |
1001 #if defined(OS_WIN) || defined(OS_CHROMEOS) | 995 #if defined(OS_WIN) || defined(OS_CHROMEOS) |
1002 if (!force_location_bar_focus_ && !IsActive()) | 996 if (!force_location_bar_focus_ && !IsActive()) |
1003 return; | 997 return; |
1004 #endif | 998 #endif |
1005 | 999 |
1006 // Temporarily reveal the top-of-window views (if not already revealed) so | 1000 // Temporarily reveal the top-of-window views (if not already revealed) so |
1007 // that the location bar view is visible and is considered focusable. If the | 1001 // that the location bar view is visible and is considered focusable. If the |
1008 // location bar view gains focus, |immersive_mode_controller_| will keep the | 1002 // location bar view gains focus, |immersive_mode_controller_| will keep the |
1009 // top-of-window views revealed. | 1003 // top-of-window views revealed. |
1010 std::unique_ptr<ImmersiveRevealedLock> focus_reveal_lock( | 1004 std::unique_ptr<ImmersiveRevealedLock> focus_reveal_lock( |
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1651 return window_title; | 1645 return window_title; |
1652 } | 1646 } |
1653 return base::string16(); | 1647 return base::string16(); |
1654 } | 1648 } |
1655 | 1649 |
1656 views::View* BrowserView::GetInitiallyFocusedView() { | 1650 views::View* BrowserView::GetInitiallyFocusedView() { |
1657 return nullptr; | 1651 return nullptr; |
1658 } | 1652 } |
1659 | 1653 |
1660 bool BrowserView::ShouldShowWindowTitle() const { | 1654 bool BrowserView::ShouldShowWindowTitle() const { |
1661 #if defined(USE_ASH) | 1655 #if defined(OS_CHROMEOS) |
1662 // For Ash only, trusted windows (apps and settings) do not show a title, | 1656 // For Chrome OS only, trusted windows (apps and settings) do not show a |
1663 // crbug.com/119411. Child windows (i.e. popups) do show a title. | 1657 // title, crbug.com/119411. Child windows (i.e. popups) do show a title. |
1664 if (browser_->is_trusted_source()) | 1658 if (browser_->is_trusted_source()) |
1665 return false; | 1659 return false; |
1666 #endif // USE_ASH | 1660 #endif // OS_CHROMEOS |
1667 | 1661 |
1668 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); | 1662 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); |
1669 } | 1663 } |
1670 | 1664 |
1671 gfx::ImageSkia BrowserView::GetWindowAppIcon() { | 1665 gfx::ImageSkia BrowserView::GetWindowAppIcon() { |
1672 if (browser_->is_app()) { | 1666 if (browser_->is_app()) { |
1673 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents(); | 1667 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents(); |
1674 extensions::TabHelper* extensions_tab_helper = | 1668 extensions::TabHelper* extensions_tab_helper = |
1675 contents ? extensions::TabHelper::FromWebContents(contents) : nullptr; | 1669 contents ? extensions::TabHelper::FromWebContents(contents) : nullptr; |
1676 if (extensions_tab_helper && extensions_tab_helper->GetExtensionAppIcon()) | 1670 if (extensions_tab_helper && extensions_tab_helper->GetExtensionAppIcon()) |
1677 return gfx::ImageSkia::CreateFrom1xBitmap( | 1671 return gfx::ImageSkia::CreateFrom1xBitmap( |
1678 *extensions_tab_helper->GetExtensionAppIcon()); | 1672 *extensions_tab_helper->GetExtensionAppIcon()); |
1679 } | 1673 } |
1680 | 1674 |
1681 return GetWindowIcon(); | 1675 return GetWindowIcon(); |
1682 } | 1676 } |
1683 | 1677 |
1684 gfx::ImageSkia BrowserView::GetWindowIcon() { | 1678 gfx::ImageSkia BrowserView::GetWindowIcon() { |
1685 // Use the default icon for devtools. | 1679 // Use the default icon for devtools. |
1686 if (browser_->is_devtools()) | 1680 if (browser_->is_devtools()) |
1687 return gfx::ImageSkia(); | 1681 return gfx::ImageSkia(); |
1688 | 1682 |
1689 if (browser_->is_app() || browser_->is_type_popup()) | 1683 if (browser_->is_app() || browser_->is_type_popup()) |
1690 return browser_->GetCurrentPageIcon().AsImageSkia(); | 1684 return browser_->GetCurrentPageIcon().AsImageSkia(); |
1691 return gfx::ImageSkia(); | 1685 return gfx::ImageSkia(); |
1692 } | 1686 } |
1693 | 1687 |
1694 bool BrowserView::ShouldShowWindowIcon() const { | 1688 bool BrowserView::ShouldShowWindowIcon() const { |
1695 #if defined(USE_ASH) | 1689 #if defined(OS_CHROMEOS) |
1696 // For Ash only, trusted windows (apps and settings) do not show an icon, | 1690 // For Chrome OS only, trusted windows (apps and settings) do not show an |
1697 // crbug.com/119411. Child windows (i.e. popups) do show an icon. | 1691 // icon, crbug.com/119411. Child windows (i.e. popups) do show an icon. |
1698 if (browser_->is_trusted_source()) | 1692 if (browser_->is_trusted_source()) |
1699 return false; | 1693 return false; |
1700 #endif // USE_ASH | 1694 #endif // OS_CHROMEOS |
1701 | 1695 |
1702 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); | 1696 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); |
1703 } | 1697 } |
1704 | 1698 |
1705 bool BrowserView::ExecuteWindowsCommand(int command_id) { | 1699 bool BrowserView::ExecuteWindowsCommand(int command_id) { |
1706 // This function handles WM_SYSCOMMAND, WM_APPCOMMAND, and WM_COMMAND. | 1700 // This function handles WM_SYSCOMMAND, WM_APPCOMMAND, and WM_COMMAND. |
1707 #if defined(OS_WIN) | 1701 #if defined(OS_WIN) |
1708 if (command_id == IDC_DEBUG_FRAME_TOGGLE) | 1702 if (command_id == IDC_DEBUG_FRAME_TOGGLE) |
1709 GetWidget()->DebugToggleFrameType(); | 1703 GetWidget()->DebugToggleFrameType(); |
1710 #endif | 1704 #endif |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2345 // order to let the layout occur. | 2339 // order to let the layout occur. |
2346 in_process_fullscreen_ = false; | 2340 in_process_fullscreen_ = false; |
2347 ToolbarSizeChanged(false); | 2341 ToolbarSizeChanged(false); |
2348 | 2342 |
2349 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents(); | 2343 WebContents* contents = browser_->tab_strip_model()->GetActiveWebContents(); |
2350 if (contents && PermissionRequestManager::FromWebContents(contents)) | 2344 if (contents && PermissionRequestManager::FromWebContents(contents)) |
2351 PermissionRequestManager::FromWebContents(contents)->UpdateAnchorPosition(); | 2345 PermissionRequestManager::FromWebContents(contents)->UpdateAnchorPosition(); |
2352 } | 2346 } |
2353 | 2347 |
2354 bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const { | 2348 bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const { |
2355 #if defined(USE_ASH) | 2349 #if defined(OS_CHROMEOS) |
2356 // Kiosk mode needs the whole screen. | 2350 // Kiosk mode needs the whole screen. |
2357 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) | 2351 if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) |
2358 return false; | 2352 return false; |
2359 | 2353 |
2360 return url.is_empty(); | 2354 return url.is_empty(); |
2361 #else | 2355 #else |
2362 // No immersive except in Ash. | 2356 // No immersive except in Chrome OS. |
2363 return false; | 2357 return false; |
2364 #endif // !USE_ASH | 2358 #endif |
2365 } | 2359 } |
2366 | 2360 |
2367 void BrowserView::LoadAccelerators() { | 2361 void BrowserView::LoadAccelerators() { |
2368 views::FocusManager* focus_manager = GetFocusManager(); | 2362 views::FocusManager* focus_manager = GetFocusManager(); |
2369 DCHECK(focus_manager); | 2363 DCHECK(focus_manager); |
2370 | 2364 |
2371 // Let's fill our own accelerator table. | 2365 // Let's fill our own accelerator table. |
2372 const bool is_app_mode = chrome::IsRunningInForcedAppMode(); | 2366 const bool is_app_mode = chrome::IsRunningInForcedAppMode(); |
2373 const std::vector<AcceleratorMapping> accelerator_list(GetAcceleratorList()); | 2367 const std::vector<AcceleratorMapping> accelerator_list(GetAcceleratorList()); |
2374 for (const auto& entry : accelerator_list) { | 2368 for (const auto& entry : accelerator_list) { |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2643 } | 2637 } |
2644 | 2638 |
2645 extensions::ActiveTabPermissionGranter* | 2639 extensions::ActiveTabPermissionGranter* |
2646 BrowserView::GetActiveTabPermissionGranter() { | 2640 BrowserView::GetActiveTabPermissionGranter() { |
2647 content::WebContents* web_contents = GetActiveWebContents(); | 2641 content::WebContents* web_contents = GetActiveWebContents(); |
2648 if (!web_contents) | 2642 if (!web_contents) |
2649 return nullptr; | 2643 return nullptr; |
2650 return extensions::TabHelper::FromWebContents(web_contents) | 2644 return extensions::TabHelper::FromWebContents(web_contents) |
2651 ->active_tab_permission_granter(); | 2645 ->active_tab_permission_granter(); |
2652 } | 2646 } |
OLD | NEW |