Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Side by Side Diff: base/win/message_window.h

Issue 16020005: Fixed the racy code around the message-only window in base::MessagePumpForUI on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_HOST_WIN_MESSAGE_WINDOW_H_ 5 #ifndef BASE_WIN_MESSAGE_WINDOW_H_
6 #define REMOTING_HOST_WIN_MESSAGE_WINDOW_H_ 6 #define BASE_WIN_MESSAGE_WINDOW_H_
7 7
8 #include <windows.h> 8 #include <windows.h>
9 9
10 #include <string> 10 #include <string>
11 11
12 #include "base/base_export.h"
12 #include "base/basictypes.h" 13 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 14 #include "base/compiler_specific.h"
14 #include "base/threading/non_thread_safe.h" 15 #include "base/threading/non_thread_safe.h"
15 16
16 namespace remoting { 17 namespace base {
17 namespace win { 18 namespace win {
18 19
19 // Implements a message-only window. 20 // Implements a message-only window.
20 class MessageWindow : base::NonThreadSafe { 21 class BASE_EXPORT MessageWindow : public base::NonThreadSafe {
21 public: 22 public:
22 // Handles incoming window messages. 23 // Handles incoming window messages.
23 class Delegate { 24 class BASE_EXPORT Delegate {
24 public: 25 public:
25 virtual ~Delegate() {} 26 virtual ~Delegate() {}
26 27
27 virtual bool HandleMessage(HWND hwnd, 28 virtual bool HandleMessage(HWND hwnd,
28 UINT message, 29 UINT message,
29 WPARAM wparam, 30 WPARAM wparam,
30 LPARAM lparam, 31 LPARAM lparam,
31 LRESULT* result) = 0; 32 LRESULT* result) = 0;
32 }; 33 };
33 34
34 MessageWindow(); 35 MessageWindow();
35 MessageWindow(const std::string& class_name, HINSTANCE instance);
36 ~MessageWindow(); 36 ~MessageWindow();
37 37
38 // Registers the window class and creates the window. The incoming messages 38 // Registers the window class and creates the window. The incoming messages
39 // will be handled by |delegate|. |delegate| must outlive |this|. 39 // will be handled by |delegate|. |delegate| must outlive |this|.
40 bool Create(Delegate* delegate); 40 bool Create(Delegate* delegate);
41 41
42 HWND hwnd() const { return window_; } 42 HWND hwnd() const { return window_; }
43 43
44 private: 44 private:
45 // Invoked by the OS to process incoming window messages. 45 // Invoked by the OS to process incoming window messages.
46 static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, 46 static LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam,
47 LPARAM lparam); 47 LPARAM lparam);
48 48
49 // Atom representing the registered window class. 49 // Atom representing the registered window class.
50 ATOM atom_; 50 ATOM atom_;
51 51
52 // MessageWindow class name. 52 // MessageWindow class name.
53 std::string class_name_; 53 std::string class_name_;
54 54
55 // Instance of the module containing the window procedure. 55 // Instance of the module containing the window procedure.
56 HINSTANCE instance_; 56 HINSTANCE instance_;
57 57
58 // Handle of the input window. 58 // Handle of the input window.
59 HWND window_; 59 HWND window_;
60 60
61 DISALLOW_COPY_AND_ASSIGN(MessageWindow); 61 DISALLOW_COPY_AND_ASSIGN(MessageWindow);
62 }; 62 };
63 63
64 } // namespace win 64 } // namespace win
65 } // namespace remoting 65 } // namespace base
66 66
67 #endif // REMOTING_HOST_WIN_MESSAGE_WINDOW_H_ 67 #endif // BASE_WIN_MESSAGE_WINDOW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698