Chromium Code Reviews| Index: base/message_pump_win.h |
| diff --git a/base/message_pump_win.h b/base/message_pump_win.h |
| index fd461988ed9527569ff66849983306c8c868e790..330a27dae4eb494924b89251a2d12806a5edc920 100644 |
| --- a/base/message_pump_win.h |
| +++ b/base/message_pump_win.h |
| @@ -11,6 +11,7 @@ |
| #include "base/base_export.h" |
| #include "base/basictypes.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "base/message_pump.h" |
| #include "base/message_pump_dispatcher.h" |
| #include "base/message_pump_observer.h" |
| @@ -126,12 +127,40 @@ class BASE_EXPORT MessagePumpWin : public MessagePump { |
| // |
| class BASE_EXPORT MessagePumpForUI : public MessagePumpWin { |
| public: |
| + // A MessageFilter implements the common Peek/Translate/Dispatch code to deal |
| + // with windows messages. |
| + class BASE_EXPORT MessageFilter { |
| + public: |
| + virtual ~MessageFilter() {} |
| + virtual bool Init() = 0; |
|
darin (slow to review)
2012/09/06 03:56:55
nit: This "Init" method doesn't seem to be necessa
yoichio
2012/09/06 09:40:37
Done.
|
| + // Implements the functionality exposed by the OS through PeekMessage. |
| + virtual BOOL DoPeekMessage(MSG* messge, |
| + HWND window_handle, |
| + UINT msg_filter_min, |
| + UINT msg_filter_max, |
| + UINT remove_msg) = 0; |
| + // Returns true if |message| was consumed by the filter and no extra |
| + // processing is required. If this method returns false, it is the |
| + // responsibility of the caller to ensure that normal processing takes |
| + // place. |
| + // The priority to consume messages is the following: |
| + // - Native Windows' message filter (CallMsgFilter). |
| + // - MessageFilter::ProcessMessage. |
| + // - MessagePumpDispatcher. |
| + // - TranslateMessage / DispatchMessage. |
| + virtual bool ProcessMessage(const MSG& message) = 0; |
| + }; |
| // The application-defined code passed to the hook procedure. |
| static const int kMessageFilterCode = 0x5001; |
| MessagePumpForUI(); |
| virtual ~MessagePumpForUI(); |
| + // Sets a new MessageFilter. MessagePumpForUI takes ownership of |
| + // |message_filter|. When SetMessageFilter is called, old MessageFilter is |
| + // deleted. |
| + void SetMessageFilter(MessageFilter* message_filter); |
|
darin (slow to review)
2012/09/06 03:56:55
nit: argument type should be "scoped_ptr<MessageFi
yoichio
2012/09/06 09:40:37
Done.
|
| + |
| // MessagePump methods: |
| virtual void ScheduleWork(); |
| virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time); |
| @@ -142,15 +171,17 @@ class BASE_EXPORT MessagePumpForUI : public MessagePumpWin { |
| void PumpOutPendingPaintMessages(); |
| private: |
| - static LRESULT CALLBACK WndProcThunk( |
| - HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); |
| + static LRESULT CALLBACK WndProcThunk(HWND window_handle, |
| + UINT message, |
| + WPARAM wparam, |
| + LPARAM lparam); |
| virtual void DoRunLoop(); |
| void InitMessageWnd(); |
| void WaitForWork(); |
| void HandleWorkMessage(); |
| void HandleTimerMessage(); |
| bool ProcessNextWindowsMessage(); |
| - bool ProcessMessageHelper(const MSG& msg); |
| + bool ProcessMessageHelper(const MSG& message); |
| bool ProcessPumpReplacementMessage(); |
| // Instance of the module containing the window procedure. |
| @@ -158,6 +189,8 @@ class BASE_EXPORT MessagePumpForUI : public MessagePumpWin { |
| // A hidden message-only window. |
| HWND message_hwnd_; |
| + |
| + scoped_ptr<MessageFilter> message_filter_; |
| }; |
| //----------------------------------------------------------------------------- |