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 <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 #include "chrome/browser/ui/tabs/tab_menu_model.h" | 56 #include "chrome/browser/ui/tabs/tab_menu_model.h" |
57 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 57 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
58 #include "chrome/browser/ui/view_ids.h" | 58 #include "chrome/browser/ui/view_ids.h" |
59 #include "chrome/browser/ui/views/accelerator_table.h" | 59 #include "chrome/browser/ui/views/accelerator_table.h" |
60 #include "chrome/browser/ui/views/accessibility/invert_bubble_view.h" | 60 #include "chrome/browser/ui/views/accessibility/invert_bubble_view.h" |
61 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" | 61 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
62 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" | 62 #include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h" |
63 #include "chrome/browser/ui/views/browser_dialogs.h" | 63 #include "chrome/browser/ui/views/browser_dialogs.h" |
64 #include "chrome/browser/ui/views/download/download_in_progress_dialog_view.h" | 64 #include "chrome/browser/ui/views/download/download_in_progress_dialog_view.h" |
65 #include "chrome/browser/ui/views/download/download_shelf_view.h" | 65 #include "chrome/browser/ui/views/download/download_shelf_view.h" |
| 66 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" |
66 #include "chrome/browser/ui/views/extensions/bookmark_app_bubble_view.h" | 67 #include "chrome/browser/ui/views/extensions/bookmark_app_bubble_view.h" |
67 #include "chrome/browser/ui/views/frame/browser_view_layout.h" | 68 #include "chrome/browser/ui/views/frame/browser_view_layout.h" |
68 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" | 69 #include "chrome/browser/ui/views/frame/browser_view_layout_delegate.h" |
69 #include "chrome/browser/ui/views/frame/contents_layout_manager.h" | 70 #include "chrome/browser/ui/views/frame/contents_layout_manager.h" |
70 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" | 71 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h" |
71 #include "chrome/browser/ui/views/frame/top_container_view.h" | 72 #include "chrome/browser/ui/views/frame/top_container_view.h" |
72 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h" | 73 #include "chrome/browser/ui/views/frame/web_contents_close_handler.h" |
73 #include "chrome/browser/ui/views/fullscreen_exit_bubble_views.h" | |
74 #include "chrome/browser/ui/views/infobars/infobar_container_view.h" | 74 #include "chrome/browser/ui/views/infobars/infobar_container_view.h" |
75 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" | 75 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
76 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" | 76 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" |
77 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" | 77 #include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" |
78 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h" | 78 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h" |
79 #include "chrome/browser/ui/views/profiles/avatar_menu_bubble_view.h" | 79 #include "chrome/browser/ui/views/profiles/avatar_menu_bubble_view.h" |
80 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h" | 80 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h" |
81 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" | 81 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" |
82 #include "chrome/browser/ui/views/settings_api_bubble_helper_views.h" | 82 #include "chrome/browser/ui/views/settings_api_bubble_helper_views.h" |
83 #include "chrome/browser/ui/views/status_bubble_views.h" | 83 #include "chrome/browser/ui/views/status_bubble_views.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 } | 282 } |
283 | 283 |
284 bool IsToolbarVisible() const override { | 284 bool IsToolbarVisible() const override { |
285 return browser_view_->IsToolbarVisible(); | 285 return browser_view_->IsToolbarVisible(); |
286 } | 286 } |
287 | 287 |
288 bool IsBookmarkBarVisible() const override { | 288 bool IsBookmarkBarVisible() const override { |
289 return browser_view_->IsBookmarkBarVisible(); | 289 return browser_view_->IsBookmarkBarVisible(); |
290 } | 290 } |
291 | 291 |
292 FullscreenExitBubbleViews* GetFullscreenExitBubble() const override { | 292 ExclusiveAccessBubbleViews* GetExclusiveAccessBubble() const override { |
293 return browser_view_->fullscreen_exit_bubble(); | 293 return browser_view_->exclusive_access_bubble(); |
294 } | 294 } |
295 | 295 |
296 private: | 296 private: |
297 BrowserView* browser_view_; | 297 BrowserView* browser_view_; |
298 | 298 |
299 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutDelegateImpl); | 299 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayoutDelegateImpl); |
300 }; | 300 }; |
301 | 301 |
302 /////////////////////////////////////////////////////////////////////////////// | 302 /////////////////////////////////////////////////////////////////////////////// |
303 // BookmarkExtensionBackground, private: | 303 // BookmarkExtensionBackground, private: |
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
867 | 867 |
868 void BrowserView::Minimize() { | 868 void BrowserView::Minimize() { |
869 frame_->Minimize(); | 869 frame_->Minimize(); |
870 } | 870 } |
871 | 871 |
872 void BrowserView::Restore() { | 872 void BrowserView::Restore() { |
873 frame_->Restore(); | 873 frame_->Restore(); |
874 } | 874 } |
875 | 875 |
876 void BrowserView::EnterFullscreen(const GURL& url, | 876 void BrowserView::EnterFullscreen(const GURL& url, |
877 FullscreenExitBubbleType bubble_type, | 877 ExclusiveAccessBubbleType bubble_type, |
878 bool with_toolbar) { | 878 bool with_toolbar) { |
879 if (IsFullscreen()) | 879 if (IsFullscreen()) |
880 return; // Nothing to do. | 880 return; // Nothing to do. |
881 | 881 |
882 ProcessFullscreen(true, NORMAL_FULLSCREEN, url, bubble_type); | 882 ProcessFullscreen(true, NORMAL_FULLSCREEN, url, bubble_type); |
883 } | 883 } |
884 | 884 |
885 void BrowserView::ExitFullscreen() { | 885 void BrowserView::ExitFullscreen() { |
886 if (!IsFullscreen()) | 886 if (!IsFullscreen()) |
887 return; // Nothing to do. | 887 return; // Nothing to do. |
888 | 888 |
889 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), FEB_TYPE_NONE); | 889 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), |
| 890 EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE); |
890 } | 891 } |
891 | 892 |
892 void BrowserView::UpdateFullscreenExitBubbleContent( | 893 void BrowserView::UpdateFullscreenExitBubbleContent( |
893 const GURL& url, | 894 const GURL& url, |
894 FullscreenExitBubbleType bubble_type) { | 895 ExclusiveAccessBubbleType bubble_type) { |
895 // Immersive mode has no exit bubble because it has a visible strip at the | 896 // Immersive mode has no exit bubble because it has a visible strip at the |
896 // top that gives the user a hover target. | 897 // top that gives the user a hover target. |
897 // TODO(jamescook): Figure out what to do with mouse-lock. | 898 // TODO(jamescook): Figure out what to do with mouse-lock. |
898 if (bubble_type == FEB_TYPE_NONE || ShouldUseImmersiveFullscreenForUrl(url)) { | 899 if (bubble_type == EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE || |
899 fullscreen_bubble_.reset(); | 900 ShouldUseImmersiveFullscreenForUrl(url)) { |
900 } else if (fullscreen_bubble_.get()) { | 901 exclusive_access_bubble_.reset(); |
901 fullscreen_bubble_->UpdateContent(url, bubble_type); | 902 } else if (exclusive_access_bubble_.get()) { |
| 903 exclusive_access_bubble_->UpdateContent(url, bubble_type); |
902 } else { | 904 } else { |
903 fullscreen_bubble_.reset(new FullscreenExitBubbleViews( | 905 exclusive_access_bubble_.reset( |
904 this, url, bubble_type)); | 906 new ExclusiveAccessBubbleViews(this, url, bubble_type)); |
905 } | 907 } |
906 } | 908 } |
907 | 909 |
908 bool BrowserView::ShouldHideUIForFullscreen() const { | 910 bool BrowserView::ShouldHideUIForFullscreen() const { |
909 // Immersive mode needs UI for the slide-down top panel. | 911 // Immersive mode needs UI for the slide-down top panel. |
910 if (immersive_mode_controller_->IsEnabled()) | 912 if (immersive_mode_controller_->IsEnabled()) |
911 return false; | 913 return false; |
912 | 914 |
913 return IsFullscreen(); | 915 return IsFullscreen(); |
914 } | 916 } |
915 | 917 |
916 bool BrowserView::IsFullscreen() const { | 918 bool BrowserView::IsFullscreen() const { |
917 return frame_->IsFullscreen(); | 919 return frame_->IsFullscreen(); |
918 } | 920 } |
919 | 921 |
920 bool BrowserView::IsFullscreenBubbleVisible() const { | 922 bool BrowserView::IsFullscreenBubbleVisible() const { |
921 return fullscreen_bubble_ != nullptr; | 923 return exclusive_access_bubble_ != nullptr; |
922 } | 924 } |
923 | 925 |
924 bool BrowserView::SupportsFullscreenWithToolbar() const { | 926 bool BrowserView::SupportsFullscreenWithToolbar() const { |
925 return false; | 927 return false; |
926 } | 928 } |
927 | 929 |
928 void BrowserView::UpdateFullscreenWithToolbar(bool with_toolbar) { | 930 void BrowserView::UpdateFullscreenWithToolbar(bool with_toolbar) { |
929 // This is currently a Mac only feature. | 931 // This is currently a Mac only feature. |
930 NOTIMPLEMENTED(); | 932 NOTIMPLEMENTED(); |
931 } | 933 } |
932 | 934 |
933 bool BrowserView::IsFullscreenWithToolbar() const { | 935 bool BrowserView::IsFullscreenWithToolbar() const { |
934 return false; | 936 return false; |
935 } | 937 } |
936 | 938 |
937 #if defined(OS_WIN) | 939 #if defined(OS_WIN) |
938 void BrowserView::SetMetroSnapMode(bool enable) { | 940 void BrowserView::SetMetroSnapMode(bool enable) { |
939 LOCAL_HISTOGRAM_COUNTS("Metro.SnapModeToggle", enable); | 941 LOCAL_HISTOGRAM_COUNTS("Metro.SnapModeToggle", enable); |
940 ProcessFullscreen(enable, METRO_SNAP_FULLSCREEN, GURL(), FEB_TYPE_NONE); | 942 ProcessFullscreen(enable, METRO_SNAP_FULLSCREEN, GURL(), |
| 943 EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE); |
941 } | 944 } |
942 | 945 |
943 bool BrowserView::IsInMetroSnapMode() const { | 946 bool BrowserView::IsInMetroSnapMode() const { |
944 return false; | 947 return false; |
945 } | 948 } |
946 #endif // defined(OS_WIN) | 949 #endif // defined(OS_WIN) |
947 | 950 |
948 void BrowserView::RestoreFocus() { | 951 void BrowserView::RestoreFocus() { |
949 WebContents* selected_web_contents = GetActiveWebContents(); | 952 WebContents* selected_web_contents = GetActiveWebContents(); |
950 if (selected_web_contents) | 953 if (selected_web_contents) |
951 selected_web_contents->RestoreFocus(); | 954 selected_web_contents->RestoreFocus(); |
952 } | 955 } |
953 | 956 |
954 void BrowserView::FullscreenStateChanged() { | 957 void BrowserView::FullscreenStateChanged() { |
955 CHECK(!IsFullscreen()); | 958 CHECK(!IsFullscreen()); |
956 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), FEB_TYPE_NONE); | 959 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), |
| 960 EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE); |
957 } | 961 } |
958 | 962 |
959 void BrowserView::ToolbarSizeChanged(bool is_animating) { | 963 void BrowserView::ToolbarSizeChanged(bool is_animating) { |
960 // The call to SetMaxTopArrowHeight() below can result in reentrancy; | 964 // The call to SetMaxTopArrowHeight() below can result in reentrancy; |
961 // |call_state| tracks whether we're reentrant. We can't just early-return in | 965 // |call_state| tracks whether we're reentrant. We can't just early-return in |
962 // this case because we need to layout again so the infobar container's bounds | 966 // this case because we need to layout again so the infobar container's bounds |
963 // are set correctly. | 967 // are set correctly. |
964 static CallState call_state = NORMAL; | 968 static CallState call_state = NORMAL; |
965 | 969 |
966 // A reentrant call can (and should) use the fast resize path unless both it | 970 // A reentrant call can (and should) use the fast resize path unless both it |
(...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2188 // TODO(jamescook): This function always returns true. Remove it and figure | 2192 // TODO(jamescook): This function always returns true. Remove it and figure |
2189 // out when layout is actually required. | 2193 // out when layout is actually required. |
2190 needs_layout |= MaybeShowInfoBar(contents); | 2194 needs_layout |= MaybeShowInfoBar(contents); |
2191 if (needs_layout) | 2195 if (needs_layout) |
2192 Layout(); | 2196 Layout(); |
2193 } | 2197 } |
2194 | 2198 |
2195 void BrowserView::ProcessFullscreen(bool fullscreen, | 2199 void BrowserView::ProcessFullscreen(bool fullscreen, |
2196 FullscreenMode mode, | 2200 FullscreenMode mode, |
2197 const GURL& url, | 2201 const GURL& url, |
2198 FullscreenExitBubbleType bubble_type) { | 2202 ExclusiveAccessBubbleType bubble_type) { |
2199 if (in_process_fullscreen_) | 2203 if (in_process_fullscreen_) |
2200 return; | 2204 return; |
2201 in_process_fullscreen_ = true; | 2205 in_process_fullscreen_ = true; |
2202 | 2206 |
2203 // Reduce jankiness during the following position changes by: | 2207 // Reduce jankiness during the following position changes by: |
2204 // * Hiding the window until it's in the final position | 2208 // * Hiding the window until it's in the final position |
2205 // * Ignoring all intervening Layout() calls, which resize the webpage and | 2209 // * Ignoring all intervening Layout() calls, which resize the webpage and |
2206 // thus are slow and look ugly (enforced via |in_process_fullscreen_|). | 2210 // thus are slow and look ugly (enforced via |in_process_fullscreen_|). |
2207 LocationBarView* location_bar = GetLocationBarView(); | 2211 LocationBarView* location_bar = GetLocationBarView(); |
2208 | 2212 |
2209 if (mode == METRO_SNAP_FULLSCREEN || !fullscreen) { | 2213 if (mode == METRO_SNAP_FULLSCREEN || !fullscreen) { |
2210 // Hide the fullscreen bubble as soon as possible, since the mode toggle can | 2214 // Hide the fullscreen bubble as soon as possible, since the mode toggle can |
2211 // take enough time for the user to notice. | 2215 // take enough time for the user to notice. |
2212 fullscreen_bubble_.reset(); | 2216 exclusive_access_bubble_.reset(); |
2213 } | 2217 } |
2214 | 2218 |
2215 if (fullscreen) { | 2219 if (fullscreen) { |
2216 // Move focus out of the location bar if necessary. | 2220 // Move focus out of the location bar if necessary. |
2217 views::FocusManager* focus_manager = GetFocusManager(); | 2221 views::FocusManager* focus_manager = GetFocusManager(); |
2218 DCHECK(focus_manager); | 2222 DCHECK(focus_manager); |
2219 // Look for focus in the location bar itself or any child view. | 2223 // Look for focus in the location bar itself or any child view. |
2220 if (location_bar->Contains(focus_manager->GetFocusedView())) | 2224 if (location_bar->Contains(focus_manager->GetFocusedView())) |
2221 focus_manager->ClearFocus(); | 2225 focus_manager->ClearFocus(); |
2222 } | 2226 } |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2524 !GetLocationBar()->GetOmniboxView()->model()->popup_model()->IsOpen()) { | 2528 !GetLocationBar()->GetOmniboxView()->model()->popup_model()->IsOpen()) { |
2525 gfx::Point icon_bottom( | 2529 gfx::Point icon_bottom( |
2526 toolbar_->location_bar()->GetLocationBarAnchorPoint()); | 2530 toolbar_->location_bar()->GetLocationBarAnchorPoint()); |
2527 ConvertPointToTarget(toolbar_->location_bar(), this, &icon_bottom); | 2531 ConvertPointToTarget(toolbar_->location_bar(), this, &icon_bottom); |
2528 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(nullptr)); | 2532 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(nullptr)); |
2529 ConvertPointToTarget(infobar_container_, this, &infobar_top); | 2533 ConvertPointToTarget(infobar_container_, this, &infobar_top); |
2530 top_arrow_height = infobar_top.y() - icon_bottom.y(); | 2534 top_arrow_height = infobar_top.y() - icon_bottom.y(); |
2531 } | 2535 } |
2532 return top_arrow_height; | 2536 return top_arrow_height; |
2533 } | 2537 } |
OLD | NEW |