| 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));
|
| }
|
|
|