Chromium Code Reviews| 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 895 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 906 | 906 |
| 907 void BrowserView::Restore() { | 907 void BrowserView::Restore() { |
| 908 frame_->Restore(); | 908 frame_->Restore(); |
| 909 } | 909 } |
| 910 | 910 |
| 911 void BrowserView::EnterFullscreen( | 911 void BrowserView::EnterFullscreen( |
| 912 const GURL& url, FullscreenExitBubbleType bubble_type) { | 912 const GURL& url, FullscreenExitBubbleType bubble_type) { |
| 913 if (IsFullscreen()) | 913 if (IsFullscreen()) |
| 914 return; // Nothing to do. | 914 return; // Nothing to do. |
| 915 | 915 |
| 916 ProcessFullscreen(true, FOR_DESKTOP, url, bubble_type); | 916 ProcessFullscreen(true, NORMAL_FULLSCREEN, url, bubble_type); |
| 917 } | 917 } |
| 918 | 918 |
| 919 void BrowserView::ExitFullscreen() { | 919 void BrowserView::ExitFullscreen() { |
| 920 if (!IsFullscreen()) | 920 if (!IsFullscreen()) |
| 921 return; // Nothing to do. | 921 return; // Nothing to do. |
| 922 | 922 |
| 923 ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); | 923 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), FEB_TYPE_NONE); |
| 924 } | 924 } |
| 925 | 925 |
| 926 void BrowserView::UpdateFullscreenExitBubbleContent( | 926 void BrowserView::UpdateFullscreenExitBubbleContent( |
| 927 const GURL& url, | 927 const GURL& url, |
| 928 FullscreenExitBubbleType bubble_type) { | 928 FullscreenExitBubbleType bubble_type) { |
| 929 // Immersive mode has no exit bubble because it has a visible strip at the | 929 // Immersive mode has no exit bubble because it has a visible strip at the |
| 930 // top that gives the user a hover target. | 930 // top that gives the user a hover target. |
| 931 // TODO(jamescook): Figure out what to do with mouse-lock. | 931 // TODO(jamescook): Figure out what to do with mouse-lock. |
| 932 if (bubble_type == FEB_TYPE_NONE || ShouldUseImmersiveFullscreenForUrl(url)) { | 932 if (bubble_type == FEB_TYPE_NONE || ShouldUseImmersiveFullscreenForUrl(url)) { |
| 933 fullscreen_bubble_.reset(); | 933 fullscreen_bubble_.reset(); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 951 return frame_->IsFullscreen(); | 951 return frame_->IsFullscreen(); |
| 952 } | 952 } |
| 953 | 953 |
| 954 bool BrowserView::IsFullscreenBubbleVisible() const { | 954 bool BrowserView::IsFullscreenBubbleVisible() const { |
| 955 return fullscreen_bubble_ != NULL; | 955 return fullscreen_bubble_ != NULL; |
| 956 } | 956 } |
| 957 | 957 |
| 958 #if defined(OS_WIN) | 958 #if defined(OS_WIN) |
| 959 void BrowserView::SetMetroSnapMode(bool enable) { | 959 void BrowserView::SetMetroSnapMode(bool enable) { |
| 960 HISTOGRAM_COUNTS("Metro.SnapModeToggle", enable); | 960 HISTOGRAM_COUNTS("Metro.SnapModeToggle", enable); |
| 961 ProcessFullscreen(enable, FOR_METRO, GURL(), FEB_TYPE_NONE); | 961 ProcessFullscreen(enable, METRO_SNAP_FULLSCREEN, GURL(), FEB_TYPE_NONE); |
| 962 } | 962 } |
| 963 | 963 |
| 964 bool BrowserView::IsInMetroSnapMode() const { | 964 bool BrowserView::IsInMetroSnapMode() const { |
| 965 return false; | 965 return false; |
| 966 } | 966 } |
| 967 #endif // defined(OS_WIN) | 967 #endif // defined(OS_WIN) |
| 968 | 968 |
| 969 void BrowserView::RestoreFocus() { | 969 void BrowserView::RestoreFocus() { |
| 970 WebContents* selected_web_contents = GetActiveWebContents(); | 970 WebContents* selected_web_contents = GetActiveWebContents(); |
| 971 if (selected_web_contents) | 971 if (selected_web_contents) |
| 972 selected_web_contents->GetView()->RestoreFocus(); | 972 selected_web_contents->GetView()->RestoreFocus(); |
| 973 } | 973 } |
| 974 | 974 |
| 975 void BrowserView::SetWindowSwitcherButton(views::Button* button) { | 975 void BrowserView::SetWindowSwitcherButton(views::Button* button) { |
| 976 if (window_switcher_button_) | 976 if (window_switcher_button_) |
| 977 RemoveChildView(window_switcher_button_); | 977 RemoveChildView(window_switcher_button_); |
| 978 window_switcher_button_ = button; | 978 window_switcher_button_ = button; |
| 979 } | 979 } |
| 980 | 980 |
| 981 void BrowserView::FullscreenStateChanged() { | 981 void BrowserView::FullscreenStateChanged() { |
| 982 CHECK(!IsFullscreen()); | 982 CHECK(!IsFullscreen()); |
| 983 ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); | 983 ProcessFullscreen(false, NORMAL_FULLSCREEN, GURL(), FEB_TYPE_NONE); |
| 984 } | 984 } |
| 985 | 985 |
| 986 void BrowserView::ToolbarSizeChanged(bool is_animating) { | 986 void BrowserView::ToolbarSizeChanged(bool is_animating) { |
| 987 // The call to InfoBarContainer::SetMaxTopArrowHeight() below can result in | 987 // The call to InfoBarContainer::SetMaxTopArrowHeight() below can result in |
| 988 // reentrancy; |call_state| tracks whether we're reentrant. We can't just | 988 // reentrancy; |call_state| tracks whether we're reentrant. We can't just |
| 989 // early-return in this case because we need to layout again so the infobar | 989 // early-return in this case because we need to layout again so the infobar |
| 990 // container's bounds are set correctly. | 990 // container's bounds are set correctly. |
| 991 static CallState call_state = NORMAL; | 991 static CallState call_state = NORMAL; |
| 992 | 992 |
| 993 // A reentrant call can (and should) use the fast resize path unless both it | 993 // A reentrant call can (and should) use the fast resize path unless both it |
| (...skipping 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2166 void BrowserView::UpdateUIForContents(WebContents* contents) { | 2166 void BrowserView::UpdateUIForContents(WebContents* contents) { |
| 2167 bool needs_layout = MaybeShowBookmarkBar(contents); | 2167 bool needs_layout = MaybeShowBookmarkBar(contents); |
| 2168 // TODO(jamescook): This function always returns true. Remove it and figure | 2168 // TODO(jamescook): This function always returns true. Remove it and figure |
| 2169 // out when layout is actually required. | 2169 // out when layout is actually required. |
| 2170 needs_layout |= MaybeShowInfoBar(contents); | 2170 needs_layout |= MaybeShowInfoBar(contents); |
| 2171 if (needs_layout) | 2171 if (needs_layout) |
| 2172 Layout(); | 2172 Layout(); |
| 2173 } | 2173 } |
| 2174 | 2174 |
| 2175 void BrowserView::ProcessFullscreen(bool fullscreen, | 2175 void BrowserView::ProcessFullscreen(bool fullscreen, |
| 2176 FullscreenType type, | 2176 FullscreenMode mode, |
| 2177 const GURL& url, | 2177 const GURL& url, |
| 2178 FullscreenExitBubbleType bubble_type) { | 2178 FullscreenExitBubbleType bubble_type) { |
| 2179 if (in_process_fullscreen_) | 2179 if (in_process_fullscreen_) |
| 2180 return; | 2180 return; |
| 2181 in_process_fullscreen_ = true; | 2181 in_process_fullscreen_ = true; |
| 2182 | 2182 |
| 2183 // Reduce jankiness during the following position changes by: | 2183 // Reduce jankiness during the following position changes by: |
| 2184 // * Hiding the window until it's in the final position | 2184 // * Hiding the window until it's in the final position |
| 2185 // * Ignoring all intervening Layout() calls, which resize the webpage and | 2185 // * Ignoring all intervening Layout() calls, which resize the webpage and |
| 2186 // thus are slow and look ugly (enforced via |in_process_fullscreen_|). | 2186 // thus are slow and look ugly (enforced via |in_process_fullscreen_|). |
| 2187 LocationBarView* location_bar = GetLocationBarView(); | 2187 LocationBarView* location_bar = GetLocationBarView(); |
| 2188 | 2188 |
| 2189 if (type == FOR_METRO || !fullscreen) { | 2189 if (mode == METRO_SNAP_FULLSCREEN || !fullscreen) { |
| 2190 // Hide the fullscreen bubble as soon as possible, since the mode toggle can | 2190 // Hide the fullscreen bubble as soon as possible, since the mode toggle can |
| 2191 // take enough time for the user to notice. | 2191 // take enough time for the user to notice. |
| 2192 fullscreen_bubble_.reset(); | 2192 fullscreen_bubble_.reset(); |
| 2193 } | 2193 } |
| 2194 | 2194 |
| 2195 if (fullscreen) { | 2195 if (fullscreen) { |
| 2196 // Move focus out of the location bar if necessary. | 2196 // Move focus out of the location bar if necessary. |
| 2197 views::FocusManager* focus_manager = GetFocusManager(); | 2197 views::FocusManager* focus_manager = GetFocusManager(); |
| 2198 DCHECK(focus_manager); | 2198 DCHECK(focus_manager); |
| 2199 // Look for focus in the location bar itself or any child view. | 2199 // Look for focus in the location bar itself or any child view. |
| 2200 if (location_bar->Contains(focus_manager->GetFocusedView())) | 2200 if (location_bar->Contains(focus_manager->GetFocusedView())) |
| 2201 focus_manager->ClearFocus(); | 2201 focus_manager->ClearFocus(); |
| 2202 } | 2202 } |
| 2203 | 2203 |
| 2204 // Toggle fullscreen mode. | 2204 // Toggle fullscreen mode. |
| 2205 frame_->SetFullscreen(fullscreen); | 2205 frame_->SetFullscreen(fullscreen); |
| 2206 | 2206 |
| 2207 // Enable immersive before the browser refreshes its list of enabled commands. | 2207 // Enable immersive before the browser refreshes its list of enabled commands. |
| 2208 if (ShouldUseImmersiveFullscreenForUrl(url)) | 2208 if (mode != METRO_SNAP_FULLSCREEN && ShouldUseImmersiveFullscreenForUrl(url)) |
| 2209 immersive_mode_controller_->SetEnabled(fullscreen); | 2209 immersive_mode_controller_->SetEnabled(fullscreen); |
| 2210 | 2210 |
| 2211 browser_->WindowFullscreenStateChanged(); | 2211 browser_->WindowFullscreenStateChanged(); |
| 2212 | 2212 |
| 2213 if (fullscreen && !chrome::IsRunningInAppMode() && type != FOR_METRO) | 2213 if (fullscreen && !chrome::IsRunningInAppMode() && |
| 2214 mode != METRO_SNAP_FULLSCREEN) { | |
| 2214 UpdateFullscreenExitBubbleContent(url, bubble_type); | 2215 UpdateFullscreenExitBubbleContent(url, bubble_type); |
| 2216 } | |
| 2215 | 2217 |
| 2216 // Undo our anti-jankiness hacks and force a re-layout. We also need to | 2218 // Undo our anti-jankiness hacks and force a re-layout. We also need to |
| 2217 // recompute the height of the infobar top arrow because toggling in and out | 2219 // recompute the height of the infobar top arrow because toggling in and out |
| 2218 // of fullscreen changes it. Calling ToolbarSizeChanged() will do both these | 2220 // of fullscreen changes it. Calling ToolbarSizeChanged() will do both these |
| 2219 // things since it computes the arrow height directly and forces a layout | 2221 // things since it computes the arrow height directly and forces a layout |
| 2220 // indirectly via UpdateUIForContents(). Reset |in_process_fullscreen_| in | 2222 // indirectly via UpdateUIForContents(). Reset |in_process_fullscreen_| in |
| 2221 // order to let the layout occur. | 2223 // order to let the layout occur. |
| 2222 in_process_fullscreen_ = false; | 2224 in_process_fullscreen_ = false; |
| 2223 ToolbarSizeChanged(false); | 2225 ToolbarSizeChanged(false); |
| 2224 } | 2226 } |
| 2225 | 2227 |
| 2226 bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const { | 2228 bool BrowserView::ShouldUseImmersiveFullscreenForUrl(const GURL& url) const { |
| 2227 #if defined(OS_CHROMEOS) | 2229 #if defined(OS_CHROMEOS) |
|
pkotwicz
2014/03/18 14:56:47
Kiosk mode is not CrOS only (e.g. it is used in br
pkotwicz
2014/03/18 19:35:28
You still need to address this comment?
zturner
2014/03/18 20:54:55
Done.
| |
| 2228 // Kiosk mode needs the whole screen. | 2230 // Kiosk mode needs the whole screen. |
| 2229 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) | 2231 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode)) |
| 2230 return false; | 2232 return false; |
| 2231 bool is_browser_fullscreen = url.is_empty(); | 2233 #endif |
| 2232 return is_browser_fullscreen; | 2234 |
| 2233 #else | 2235 #if defined(USE_ASH) |
|
pkotwicz
2014/03/18 14:56:47
Is the #if defined() necessary here?
pkotwicz
2014/03/18 19:35:28
You still need to address this comment too?
zturner
2014/03/18 20:54:55
Linux Aura still doesn't support Ash, so I believe
pkotwicz
2014/03/18 21:54:32
Linux Aura should have HOST_DESKTOP_TYPE_ASH defin
zturner
2014/03/18 22:35:44
Fair enough. Done.
| |
| 2236 if (browser()->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH) | |
| 2237 return url.is_empty(); | |
| 2238 #endif | |
| 2239 | |
| 2234 return false; | 2240 return false; |
| 2235 #endif | |
| 2236 } | 2241 } |
| 2237 | 2242 |
| 2238 void BrowserView::LoadAccelerators() { | 2243 void BrowserView::LoadAccelerators() { |
| 2239 views::FocusManager* focus_manager = GetFocusManager(); | 2244 views::FocusManager* focus_manager = GetFocusManager(); |
| 2240 DCHECK(focus_manager); | 2245 DCHECK(focus_manager); |
| 2241 | 2246 |
| 2242 // Let's fill our own accelerator table. | 2247 // Let's fill our own accelerator table. |
| 2243 const bool is_app_mode = chrome::IsRunningInForcedAppMode(); | 2248 const bool is_app_mode = chrome::IsRunningInForcedAppMode(); |
| 2244 const std::vector<chrome::AcceleratorMapping> accelerator_list( | 2249 const std::vector<chrome::AcceleratorMapping> accelerator_list( |
| 2245 chrome::GetAcceleratorList()); | 2250 chrome::GetAcceleratorList()); |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2558 !GetLocationBar()->GetOmniboxView()->model()->popup_model()->IsOpen()) { | 2563 !GetLocationBar()->GetOmniboxView()->model()->popup_model()->IsOpen()) { |
| 2559 gfx::Point icon_bottom( | 2564 gfx::Point icon_bottom( |
| 2560 toolbar_->location_bar()->GetLocationBarAnchorPoint()); | 2565 toolbar_->location_bar()->GetLocationBarAnchorPoint()); |
| 2561 ConvertPointToTarget(toolbar_->location_bar(), this, &icon_bottom); | 2566 ConvertPointToTarget(toolbar_->location_bar(), this, &icon_bottom); |
| 2562 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(NULL)); | 2567 gfx::Point infobar_top(0, infobar_container_->GetVerticalOverlap(NULL)); |
| 2563 ConvertPointToTarget(infobar_container_, this, &infobar_top); | 2568 ConvertPointToTarget(infobar_container_, this, &infobar_top); |
| 2564 top_arrow_height = infobar_top.y() - icon_bottom.y(); | 2569 top_arrow_height = infobar_top.y() - icon_bottom.y(); |
| 2565 } | 2570 } |
| 2566 return top_arrow_height; | 2571 return top_arrow_height; |
| 2567 } | 2572 } |
| OLD | NEW |