diff options
author | sanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-06 18:34:24 +0000 |
---|---|---|
committer | sanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-06 18:34:24 +0000 |
commit | 656475d275524893e4e9b1f02469fe470721a14e (patch) | |
tree | 76198770e24f0bea147c10a50ae2a3bf9c7f7274 /base/message_loop_proxy.h | |
parent | 7e19edf7255b366b5e4b9b0bb77caf9842a37f1b (diff) | |
download | chromium_src-656475d275524893e4e9b1f02469fe470721a14e.zip chromium_src-656475d275524893e4e9b1f02469fe470721a14e.tar.gz chromium_src-656475d275524893e4e9b1f02469fe470721a14e.tar.bz2 |
Created a stock implementation of the MessageLoopProxy interface than can be used to create an implementation that targets the current thread's message loop.
BUG=None
TEST=Unit tests provided.
Review URL: http://codereview.chromium.org/1837003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46591 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_loop_proxy.h')
-rw-r--r-- | base/message_loop_proxy.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/base/message_loop_proxy.h b/base/message_loop_proxy.h index 4b6abce..26fd368 100644 --- a/base/message_loop_proxy.h +++ b/base/message_loop_proxy.h @@ -9,9 +9,15 @@ #include "base/ref_counted.h" #include "base/task.h" +namespace base { + +struct MessageLoopProxyTraits; + // This class provides a thread-safe refcounted interface to the Post* methods // of a message loop. This class can outlive the target message loop. -class MessageLoopProxy : public base::RefCountedThreadSafe<MessageLoopProxy> { +class MessageLoopProxy + : public base::RefCountedThreadSafe<MessageLoopProxy, + MessageLoopProxyTraits> { public: // These are the same methods in message_loop.h, but are guaranteed to either // get posted to the MessageLoop if it's still alive, or be deleted otherwise. @@ -42,7 +48,27 @@ class MessageLoopProxy : public base::RefCountedThreadSafe<MessageLoopProxy> { T* object) { return PostNonNestableTask(from_here, new ReleaseTask<T>(object)); } + + // Factory method for creating an implementation of MessageLoopProxy + // for the current thread. + static scoped_refptr<MessageLoopProxy> CreateForCurrentThread(); + + protected: + friend struct MessageLoopProxyTraits; + // Called when the proxy is about to be deleted. Subclasses can override this + // to provide deletion on specific threads. + virtual void OnDestruct() { + delete this; + } }; +struct MessageLoopProxyTraits { + static void Destruct(MessageLoopProxy* proxy) { + proxy->OnDestruct(); + } +}; + +} // namespace base + #endif // BASE_MESSAGE_LOOP_PROXY_H_ |