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 9f517bfc47420b2889dd38a097d416cc85965e5e..abd0c16e287982e67273e02f07e9456894442673 100644 |
--- a/chrome/browser/ui/views/frame/browser_view.cc |
+++ b/chrome/browser/ui/views/frame/browser_view.cc |
@@ -769,14 +769,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( |
@@ -804,17 +804,24 @@ 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::ToggleMetroSnapMode(bool enable) { |
+ ProcessFullscreen(enable, FOR_METRO, GURL(), FEB_TYPE_NONE); |
+} |
+#endif // defined(OS_WIN) |
+ |
void BrowserView::RestoreFocus() { |
WebContents* selected_web_contents = GetSelectedWebContents(); |
if (selected_web_contents) |
@@ -2065,6 +2072,7 @@ bool BrowserView::UpdateChildViewAndLayout(views::View* new_view, |
} |
void BrowserView::ProcessFullscreen(bool fullscreen, |
+ ProcessFullscreenType type, |
const GURL& url, |
FullscreenExitBubbleType bubble_type) { |
// Reduce jankiness during the following position changes by: |
@@ -2077,7 +2085,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(); |
@@ -2104,15 +2113,22 @@ void BrowserView::ProcessFullscreen(bool fullscreen, |
PushForceHidden(); |
#endif |
- // Toggle fullscreen mode. |
- frame_->SetFullscreen(fullscreen); |
- |
- browser_->WindowFullscreenStateChanged(); |
+ if (type == FOR_METRO) { |
+#if defined(OS_WIN) |
+ // 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)); |
} |