Index: trunk/src/base/message_loop/message_loop_proxy_impl.h |
=================================================================== |
--- trunk/src/base/message_loop/message_loop_proxy_impl.h (revision 212951) |
+++ trunk/src/base/message_loop/message_loop_proxy_impl.h (working copy) |
@@ -6,24 +6,17 @@ |
#define BASE_MESSAGE_LOOP_MESSAGE_LOOP_PROXY_IMPL_H_ |
#include "base/base_export.h" |
-#include "base/memory/ref_counted.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/message_loop/message_loop_proxy.h" |
-#include "base/pending_task.h" |
-#include "base/threading/platform_thread.h" |
+#include "base/synchronization/lock.h" |
namespace base { |
-namespace internal { |
-class IncomingTaskQueue; |
- |
// A stock implementation of MessageLoopProxy that is created and managed by a |
// MessageLoop. For now a MessageLoopProxyImpl can only be created as part of a |
// MessageLoop. |
class BASE_EXPORT MessageLoopProxyImpl : public MessageLoopProxy { |
public: |
- explicit MessageLoopProxyImpl( |
- scoped_refptr<IncomingTaskQueue> incoming_queue); |
- |
// MessageLoopProxy implementation |
virtual bool PostDelayedTask(const tracked_objects::Location& from_here, |
const base::Closure& task, |
@@ -34,20 +27,36 @@ |
base::TimeDelta delay) OVERRIDE; |
virtual bool RunsTasksOnCurrentThread() const OVERRIDE; |
- private: |
- friend class RefCountedThreadSafe<MessageLoopProxyImpl>; |
+ protected: |
virtual ~MessageLoopProxyImpl(); |
- // THe incoming queue receiving all posted tasks. |
- scoped_refptr<IncomingTaskQueue> incoming_queue_; |
+ // Override OnDestruct so that we can delete the object on the target message |
+ // loop if it still exists. |
+ virtual void OnDestruct() const OVERRIDE; |
- // ID of the thread |this| was created on. |
- PlatformThreadId valid_thread_id_; |
+ private: |
+ // Allow the MessageLoop to create a MessageLoopProxyImpl. |
+ friend class MessageLoop; |
+ friend class DeleteHelper<MessageLoopProxyImpl>; |
+ MessageLoopProxyImpl(); |
+ |
+ // Called directly by MessageLoop::~MessageLoop. |
+ virtual void WillDestroyCurrentMessageLoop(); |
+ |
+ |
+ bool PostTaskHelper(const tracked_objects::Location& from_here, |
+ const base::Closure& task, |
+ base::TimeDelta delay, |
+ bool nestable); |
+ |
+ // The lock that protects access to target_message_loop_. |
+ mutable base::Lock message_loop_lock_; |
+ MessageLoop* target_message_loop_; |
+ |
DISALLOW_COPY_AND_ASSIGN(MessageLoopProxyImpl); |
}; |
-} // namespace internal |
} // namespace base |
#endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_PROXY_IMPL_H_ |