// Copyright (c) 2015 The Chromium Embedded Framework 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 "tests/cefclient/browser/temp_window_win.h"

#include <windows.h>

#include "include/base/cef_logging.h"

namespace client {

namespace {

const wchar_t kWndClass[] = L"Client_TempWindow";

// Create the temp window.
HWND CreateTempWindow() {
  HINSTANCE hInstance = ::GetModuleHandle(NULL);

  WNDCLASSEX wc = {0};
  wc.cbSize = sizeof(wc);
  wc.lpfnWndProc = DefWindowProc;
  wc.hInstance = hInstance;
  wc.lpszClassName = kWndClass;
  RegisterClassEx(&wc);

  // Create a 1x1 pixel hidden window.
  return CreateWindow(kWndClass, 0, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, 0,
                      1, 1, NULL, NULL, hInstance, NULL);
}

TempWindowWin* g_temp_window = nullptr;

}  // namespace

TempWindowWin::TempWindowWin() : hwnd_(NULL) {
  DCHECK(!g_temp_window);
  g_temp_window = this;

  hwnd_ = CreateTempWindow();
  CHECK(hwnd_);
}

TempWindowWin::~TempWindowWin() {
  g_temp_window = nullptr;
  DCHECK(hwnd_);
  DestroyWindow(hwnd_);
}

// static
CefWindowHandle TempWindowWin::GetWindowHandle() {
  DCHECK(g_temp_window);
  return g_temp_window->hwnd_;
}

}  // namespace client
