Index: base/message_pump_win.h |
diff --git a/base/message_pump_win.h b/base/message_pump_win.h |
index e6ea233da1c6eb0ef0ecac610bff275ac837964e..96081877eb9a2a2d36c2ae6aac7d77d3ddbea8e7 100644 |
--- a/base/message_pump_win.h |
+++ b/base/message_pump_win.h |
@@ -9,6 +9,7 @@ |
#include <list> |
+#include "base/basictypes.h" |
#include "base/lock.h" |
#include "base/message_pump.h" |
#include "base/observer_list.h" |
@@ -23,7 +24,7 @@ namespace base { |
class MessagePumpWin : public MessagePump { |
public: |
// An Observer is an object that receives global notifications from the |
- // MessageLoop. |
+ // UI MessageLoop. |
// |
// NOTE: An Observer implementation should be extremely fast! |
// |
@@ -283,6 +284,21 @@ class MessagePumpForIO : public MessagePumpWin { |
DWORD error) = 0; |
}; |
+ // An IOObserver is an object that receives IO notifications from the |
+ // MessagePump. |
+ // |
+ // NOTE: An IOObserver implementation should be extremely fast! |
+ class IOObserver { |
+ public: |
+ IOObserver() {} |
+ |
+ virtual void WillProcessIOEvent() = 0; |
+ virtual void DidProcessIOEvent() = 0; |
+ |
+ protected: |
+ virtual ~IOObserver() {} |
+ }; |
+ |
// The extended context that should be used as the base structure on every |
// overlapped IO operation. |handler| must be set to the registered IOHandler |
// for the given file when the operation is started, and it can be set to NULL |
@@ -320,6 +336,9 @@ class MessagePumpForIO : public MessagePumpWin { |
// caller is willing to allow pausing regular task dispatching on this thread. |
bool WaitForIOCompletion(DWORD timeout, IOHandler* filter); |
+ void AddIOObserver(IOObserver* obs); |
+ void RemoveIOObserver(IOObserver* obs); |
+ |
private: |
struct IOItem { |
IOHandler* handler; |
@@ -333,12 +352,16 @@ class MessagePumpForIO : public MessagePumpWin { |
bool MatchCompletedIOItem(IOHandler* filter, IOItem* item); |
bool GetIOItem(DWORD timeout, IOItem* item); |
bool ProcessInternalIOItem(const IOItem& item); |
+ void WillProcessIOEvent(); |
+ void DidProcessIOEvent(); |
// The completion port associated with this thread. |
ScopedHandle port_; |
// This list will be empty almost always. It stores IO completions that have |
// not been delivered yet because somebody was doing cleanup. |
std::list<IOItem> completed_io_; |
+ |
+ ObserverList<IOObserver> io_observers_; |
}; |
} // namespace base |