summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/frame/browser_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views/frame/browser_view.cc')
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 5e5ec9c..7ae027f 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -121,6 +121,7 @@
#include "ui/views/window/dialog_delegate.h"
#if defined(USE_ASH)
+#include "ash/ash_switches.h"
#include "ash/launcher/launcher.h"
#include "ash/launcher/launcher_model.h"
#include "ash/shell.h"
@@ -194,6 +195,19 @@ bool ShouldSaveOrRestoreWindowPos() {
return true;
}
+// Returns whether immersive mode should replace fullscreen, which should only
+// occur for "browser-fullscreen" and not for "tab-fullscreen" (which has a URL
+// for the tab entering fullscreen).
+bool UseImmersiveFullscreen(const GURL& url) {
+#if defined(USE_ASH)
+ bool is_browser_fullscreen = url.is_empty();
+ return is_browser_fullscreen &&
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ ash::switches::kAshImmersiveMode);
+#endif
+ return false;
+}
+
} // namespace
///////////////////////////////////////////////////////////////////////////////
@@ -766,7 +780,10 @@ void BrowserView::ExitFullscreen() {
void BrowserView::UpdateFullscreenExitBubbleContent(
const GURL& url,
FullscreenExitBubbleType bubble_type) {
- if (bubble_type == FEB_TYPE_NONE) {
+ // Immersive mode has no exit bubble because it has a visible strip at the
+ // top that gives the user a hover target.
+ // TODO(jamescook): Figure out what to do with mouse-lock.
+ if (bubble_type == FEB_TYPE_NONE || UseImmersiveFullscreen(url)) {
fullscreen_bubble_.reset();
} else if (fullscreen_bubble_.get()) {
fullscreen_bubble_->UpdateContent(url, bubble_type);
@@ -776,6 +793,14 @@ void BrowserView::UpdateFullscreenExitBubbleContent(
}
}
+bool BrowserView::ShouldHideUIForFullscreen() const {
+#if defined(USE_ASH)
+ // Immersive reveal needs UI for the slide-down top panel.
+ return IsFullscreen() && !immersive_mode_controller_->IsRevealed();
+#endif
+ return IsFullscreen();
+}
+
bool BrowserView::IsFullscreen() const {
return frame_->IsFullscreen();
}
@@ -2282,7 +2307,9 @@ void BrowserView::ProcessFullscreen(bool fullscreen,
browser_->WindowFullscreenStateChanged();
if (fullscreen) {
- if (!chrome::IsRunningInAppMode() && type != FOR_METRO) {
+ if (!chrome::IsRunningInAppMode() &&
+ type != FOR_METRO &&
+ !UseImmersiveFullscreen(url)) {
fullscreen_bubble_.reset(new FullscreenExitBubbleViews(
GetWidget(), browser_.get(), url, bubble_type));
}
@@ -2296,6 +2323,9 @@ void BrowserView::ProcessFullscreen(bool fullscreen,
#endif
}
+ if (UseImmersiveFullscreen(url))
+ immersive_mode_controller_->SetEnabled(fullscreen);
+
// Undo our anti-jankiness hacks and force the window to re-layout now that
// it's in its final position.
ignore_layout_ = false;