Index: chrome/browser/ui/views/frame/browser_view.cc |
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc |
index e840de3abbf3720f7155e8b8ace703592f7cdacc..b4e2592170e769a8e624170e3c753ca0cdac6233 100644 |
--- a/chrome/browser/ui/views/frame/browser_view.cc |
+++ b/chrome/browser/ui/views/frame/browser_view.cc |
@@ -770,14 +770,14 @@ void BrowserView::EnterFullscreen( |
if (IsFullscreen()) |
return; // Nothing to do. |
- ProcessFullscreen(true, url, bubble_type); |
+ ProcessFullscreen(true, FOR_DESKTOP, url, bubble_type); |
} |
void BrowserView::ExitFullscreen() { |
if (!IsFullscreen()) |
return; // Nothing to do. |
- ProcessFullscreen(false, GURL(), FEB_TYPE_NONE); |
+ ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); |
} |
void BrowserView::UpdateFullscreenExitBubbleContent( |
@@ -805,17 +805,33 @@ void BrowserView::FullScreenStateChanged() { |
if (IsFullscreen()) { |
if (fullscreen_request_.pending) { |
fullscreen_request_.pending = false; |
- ProcessFullscreen(true, fullscreen_request_.url, |
+ ProcessFullscreen(true, FOR_DESKTOP, |
+ fullscreen_request_.url, |
fullscreen_request_.bubble_type); |
} else { |
- ProcessFullscreen(true, GURL(), |
+ ProcessFullscreen(true, FOR_DESKTOP, GURL(), |
FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION); |
} |
} else { |
- ProcessFullscreen(false, GURL(), FEB_TYPE_NONE); |
+ ProcessFullscreen(false, FOR_DESKTOP, GURL(), FEB_TYPE_NONE); |
} |
} |
+#if defined(OS_WIN) |
+void BrowserView::SetMetroSnapMode(bool enable) { |
+ ProcessFullscreen(enable, FOR_METRO, GURL(), FEB_TYPE_NONE); |
+} |
+ |
+bool BrowserView::IsInMetroSnapMode() const { |
+#if defined(USE_AURA) |
+ return false; |
+#else |
+ return static_cast<views::NativeWidgetWin*>( |
+ frame_->native_widget())->IsInMetroSnapMode(); |
+#endif |
+} |
+#endif // defined(OS_WIN) |
+ |
void BrowserView::RestoreFocus() { |
WebContents* selected_web_contents = GetActiveWebContents(); |
if (selected_web_contents) |
@@ -2086,6 +2102,7 @@ bool BrowserView::UpdateChildViewAndLayout(views::View* new_view, |
} |
void BrowserView::ProcessFullscreen(bool fullscreen, |
+ FullscreenType type, |
const GURL& url, |
FullscreenExitBubbleType bubble_type) { |
// Reduce jankiness during the following position changes by: |
@@ -2098,7 +2115,8 @@ void BrowserView::ProcessFullscreen(bool fullscreen, |
OmniboxViewWin* omnibox_view = |
static_cast<OmniboxViewWin*>(location_bar->GetLocationEntry()); |
#endif |
- if (!fullscreen) { |
+ |
+ if (!fullscreen && type != FOR_METRO) { |
// Hide the fullscreen bubble as soon as possible, since the mode toggle can |
// take enough time for the user to notice. |
fullscreen_bubble_.reset(); |
@@ -2125,15 +2143,23 @@ void BrowserView::ProcessFullscreen(bool fullscreen, |
PushForceHidden(); |
#endif |
- // Toggle fullscreen mode. |
- frame_->SetFullscreen(fullscreen); |
+ if (type == FOR_METRO) { |
+#if defined(OS_WIN) && !defined(USE_AURA) |
+ // Enter metro snap mode. |
+ static_cast<views::NativeWidgetWin*>( |
+ frame_->native_widget())->SetMetroSnapFullscreen(fullscreen); |
+#endif |
+ } else { |
+ // Toggle fullscreen mode. |
+ frame_->SetFullscreen(fullscreen); |
+ } |
browser_->WindowFullscreenStateChanged(); |
if (fullscreen) { |
bool is_kiosk = |
CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); |
- if (!is_kiosk) { |
+ if (!is_kiosk && type != FOR_METRO) { |
fullscreen_bubble_.reset(new FullscreenExitBubbleViews( |
GetWidget(), browser_.get(), url, bubble_type)); |
} |