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 10 namespace gfx { 11 12 // static 13 SingletonHwnd* SingletonHwnd::GetInstance() { 14 return Singleton<SingletonHwnd>::get(); 15 } 16 17 void SingletonHwnd::AddObserver(Observer* observer) { 18 observer_list_.AddObserver(observer); 19 } 20 21 void SingletonHwnd::RemoveObserver(Observer* observer) { 22 if (!hwnd()) 23 return; 24 observer_list_.RemoveObserver(observer); 25 } 26 27 BOOL 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 39 SingletonHwnd::SingletonHwnd() { 40 if (!base::MessageLoop::current() || 41 base::MessageLoop::current()->type() != base::MessageLoop::TYPE_UI) { 42 // Creating this window in (e.g.) a renderer inhibits shutdown on 43 // Windows. See http://crbug.com/230122 and http://crbug.com/236039. 44 DLOG(ERROR) << "Cannot create windows on non-UI thread!"; 45 return; 46 } 47 WindowImpl::Init(NULL, Rect()); 48 } 49 50 SingletonHwnd::~SingletonHwnd() { 51 } 52 53 } // namespace gfx 54