| 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 | 
|---|