1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/gfx/win/singleton_hwnd.h"
6
7#include "base/memory/singleton.h"
8#include "base/message_loop/message_loop.h"
9
10namespace gfx {
11
12// static
13SingletonHwnd* SingletonHwnd::GetInstance() {
14  return Singleton<SingletonHwnd>::get();
15}
16
17void SingletonHwnd::AddObserver(Observer* observer) {
18  observer_list_.AddObserver(observer);
19}
20
21void SingletonHwnd::RemoveObserver(Observer* observer) {
22  if (!hwnd())
23    return;
24  observer_list_.RemoveObserver(observer);
25}
26
27BOOL SingletonHwnd::ProcessWindowMessage(HWND window,
28                                         UINT message,
29                                         WPARAM wparam,
30                                         LPARAM lparam,
31                                         LRESULT& result,
32                                         DWORD msg_map_id) {
33  FOR_EACH_OBSERVER(Observer,
34                    observer_list_,
35                    OnWndProc(window, message, wparam, lparam));
36  return false;
37}
38
39SingletonHwnd::SingletonHwnd() {
40  if (!base::MessageLoopForUI::IsCurrent()) {
41    // Creating this window in (e.g.) a renderer inhibits shutdown on
42    // Windows. See http://crbug.com/230122 and http://crbug.com/236039.
43    DLOG(ERROR) << "Cannot create windows on non-UI thread!";
44    return;
45  }
46  WindowImpl::Init(NULL, Rect());
47}
48
49SingletonHwnd::~SingletonHwnd() {
50}
51
52}  // namespace gfx
53