summaryrefslogtreecommitdiffstats
path: root/base/message_loop_proxy_impl.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_impl.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_impl.h')
-rw-r--r--base/message_loop_proxy_impl.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/base/message_loop_proxy_impl.h b/base/message_loop_proxy_impl.h
new file mode 100644
index 0000000..f895532
--- /dev/null
+++ b/base/message_loop_proxy_impl.h
@@ -0,0 +1,61 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_MESSAGE_LOOP_PROXY_IMPL_H_
+#define BASE_MESSAGE_LOOP_PROXY_IMPL_H_
+
+#include "base/lock.h"
+#include "base/message_loop.h"
+#include "base/message_loop_proxy.h"
+
+namespace base {
+
+// A stock implementation of MessageLoopProxy that takes in a MessageLoop
+// and keeps track of its lifetime using the MessageLoop DestructionObserver.
+// For now a MessageLoopProxyImpl can only be created for the current thread.
+class MessageLoopProxyImpl : public MessageLoopProxy,
+ public MessageLoop::DestructionObserver {
+ public:
+ ~MessageLoopProxyImpl();
+
+ // MessageLoopProxy implementation
+ virtual bool PostTask(const tracked_objects::Location& from_here,
+ Task* task);
+ virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
+ Task* task, int64 delay_ms);
+ virtual bool PostNonNestableTask(const tracked_objects::Location& from_here,
+ Task* task);
+ virtual bool PostNonNestableDelayedTask(
+ const tracked_objects::Location& from_here,
+ Task* task,
+ int64 delay_ms);
+ virtual bool BelongsToCurrentThread();
+
+// MessageLoop::DestructionObserver implementation
+ void WillDestroyCurrentMessageLoop();
+
+ protected:
+ // Override OnDestruct so that we can delete the object on the target message
+ // loop if it still exists.
+ virtual void OnDestruct();
+
+ private:
+ MessageLoopProxyImpl();
+ bool PostTaskHelper(const tracked_objects::Location& from_here,
+ Task* task, int64 delay_ms, bool nestable);
+
+ // For the factory method to work
+ friend class MessageLoopProxy;
+
+ // The lock that protects access to target_message_loop_.
+ Lock message_loop_lock_;
+ MessageLoop* target_message_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(MessageLoopProxyImpl);
+};
+
+} // namespace base
+
+#endif // BASE_MESSAGE_LOOP_PROXY_IMPL_H_
+