• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "base/win/wrapped_window_proc.h"
6 
7 #include "base/atomicops.h"
8 #include "base/logging.h"
9 #include "base/process/memory.h"
10 
11 namespace {
12 
13 base::win::WinProcExceptionFilter s_exception_filter = NULL;
14 
15 }  // namespace.
16 
17 namespace base {
18 namespace win {
19 
SetWinProcExceptionFilter(WinProcExceptionFilter filter)20 WinProcExceptionFilter SetWinProcExceptionFilter(
21     WinProcExceptionFilter filter) {
22   subtle::AtomicWord rv = subtle::NoBarrier_AtomicExchange(
23       reinterpret_cast<subtle::AtomicWord*>(&s_exception_filter),
24       reinterpret_cast<subtle::AtomicWord>(filter));
25   return reinterpret_cast<WinProcExceptionFilter>(rv);
26 }
27 
CallExceptionFilter(EXCEPTION_POINTERS * info)28 int CallExceptionFilter(EXCEPTION_POINTERS* info) {
29   return s_exception_filter ? s_exception_filter(info) :
30                               EXCEPTION_CONTINUE_SEARCH;
31 }
32 
InitializeWindowClass(const char16 * class_name,WNDPROC window_proc,UINT style,int class_extra,int window_extra,HCURSOR cursor,HBRUSH background,const char16 * menu_name,HICON large_icon,HICON small_icon,WNDCLASSEX * class_out)33 BASE_EXPORT void InitializeWindowClass(
34     const char16* class_name,
35     WNDPROC window_proc,
36     UINT style,
37     int class_extra,
38     int window_extra,
39     HCURSOR cursor,
40     HBRUSH background,
41     const char16* menu_name,
42     HICON large_icon,
43     HICON small_icon,
44     WNDCLASSEX* class_out) {
45   class_out->cbSize = sizeof(WNDCLASSEX);
46   class_out->style = style;
47   class_out->lpfnWndProc = window_proc;
48   class_out->cbClsExtra = class_extra;
49   class_out->cbWndExtra = window_extra;
50   class_out->hInstance = base::GetModuleFromAddress(window_proc);
51   class_out->hIcon = large_icon;
52   class_out->hCursor = cursor;
53   class_out->hbrBackground = background;
54   class_out->lpszMenuName = menu_name;
55   class_out->lpszClassName = class_name;
56   class_out->hIconSm = small_icon;
57 
58   // Check if |window_proc| is valid.
59   DCHECK(class_out->hInstance != NULL);
60 }
61 
62 }  // namespace win
63 }  // namespace base
64