// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/browser.h"

#include "base/strings/utf_string_conversions.h"
#include "base/win/metro.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
#include "win8/util/win8_util.h"

namespace {

void NewWindowMaybeMetro(Browser* source_browser, Profile* profile) {
  chrome::HostDesktopType host_desktop_type =
      source_browser->host_desktop_type();
  if (win8::IsSingleWindowMetroMode()) {
    typedef void (*FlipFrameWindows)();

    static FlipFrameWindows flip_window_fn = reinterpret_cast<FlipFrameWindows>(
        ::GetProcAddress(base::win::GetMetroModule(), "FlipFrameWindows"));
    DCHECK(flip_window_fn);

    Browser* browser = chrome::FindTabbedBrowser(profile, false,
                                                 host_desktop_type);

    if (!browser) {
      chrome::OpenEmptyWindow(profile, host_desktop_type);
      return;
    }

    chrome::NewTab(browser);

    if (browser != source_browser) {
      // Tell the metro_driver to flip our window. This causes the current
      // browser window to be hidden and the next window to be shown.
      flip_window_fn();
    }
  } else {
    NewEmptyWindow(profile, host_desktop_type);
  }
}

}  // namespace

namespace chrome {

void NewWindow(Browser* browser) {
  NewWindowMaybeMetro(browser, browser->profile()->GetOriginalProfile());
}

void NewIncognitoWindow(Browser* browser) {
  NewWindowMaybeMetro(browser, browser->profile()->GetOffTheRecordProfile());
}

}  // namespace chrome

void Browser::SetMetroSnapMode(bool enable) {
  fullscreen_controller_->SetMetroSnapMode(enable);
}
