summaryrefslogtreecommitdiffstats
path: root/base/message_loop_proxy.h
diff options
context:
space:
mode:
authorsanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-06 18:34:24 +0000
committersanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-06 18:34:24 +0000
commit656475d275524893e4e9b1f02469fe470721a14e (patch)
tree76198770e24f0bea147c10a50ae2a3bf9c7f7274 /base/message_loop_proxy.h
parent7e19edf7255b366b5e4b9b0bb77caf9842a37f1b (diff)
downloadchromium_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.h28
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_