message_loop_proxy_impl.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef BASE_MESSAGE_LOOP_PROXY_IMPL_H_ 6#define BASE_MESSAGE_LOOP_PROXY_IMPL_H_ 7#pragma once 8 9#include "base/lock.h" 10#include "base/message_loop.h" 11#include "base/message_loop_proxy.h" 12 13namespace base { 14 15// A stock implementation of MessageLoopProxy that takes in a MessageLoop 16// and keeps track of its lifetime using the MessageLoop DestructionObserver. 17// For now a MessageLoopProxyImpl can only be created for the current thread. 18class MessageLoopProxyImpl : public MessageLoopProxy, 19 public MessageLoop::DestructionObserver { 20 public: 21 virtual ~MessageLoopProxyImpl(); 22 23 // MessageLoopProxy implementation 24 virtual bool PostTask(const tracked_objects::Location& from_here, 25 Task* task); 26 virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 27 Task* task, int64 delay_ms); 28 virtual bool PostNonNestableTask(const tracked_objects::Location& from_here, 29 Task* task); 30 virtual bool PostNonNestableDelayedTask( 31 const tracked_objects::Location& from_here, 32 Task* task, 33 int64 delay_ms); 34 virtual bool BelongsToCurrentThread(); 35 36 // MessageLoop::DestructionObserver implementation 37 virtual void WillDestroyCurrentMessageLoop(); 38 39 protected: 40 // Override OnDestruct so that we can delete the object on the target message 41 // loop if it still exists. 42 virtual void OnDestruct() const; 43 44 private: 45 MessageLoopProxyImpl(); 46 bool PostTaskHelper(const tracked_objects::Location& from_here, 47 Task* task, int64 delay_ms, bool nestable); 48 49 // For the factory method to work 50 friend class MessageLoopProxy; 51 52 // The lock that protects access to target_message_loop_. 53 mutable Lock message_loop_lock_; 54 MessageLoop* target_message_loop_; 55 56 DISALLOW_COPY_AND_ASSIGN(MessageLoopProxyImpl); 57}; 58 59} // namespace base 60 61#endif // BASE_MESSAGE_LOOP_PROXY_IMPL_H_ 62 63