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_impl.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_impl.h')
-rw-r--r-- | base/message_loop_proxy_impl.h | 61 |
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_ + |