webthread_impl.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright 2014 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 CONTENT_CHILD_WEBTHREAD_IMPL_H_ 6#define CONTENT_CHILD_WEBTHREAD_IMPL_H_ 7 8#include <map> 9 10#include "base/memory/scoped_ptr.h" 11#include "base/threading/thread.h" 12#include "content/common/content_export.h" 13#include "third_party/WebKit/public/platform/WebThread.h" 14 15namespace content { 16 17class WebThreadBase : public blink::WebThread { 18 public: 19 virtual ~WebThreadBase(); 20 21 virtual void addTaskObserver(TaskObserver* observer); 22 virtual void removeTaskObserver(TaskObserver* observer); 23 24 virtual bool isCurrentThread() const = 0; 25 26 protected: 27 WebThreadBase(); 28 29 private: 30 class TaskObserverAdapter; 31 32 typedef std::map<TaskObserver*, TaskObserverAdapter*> TaskObserverMap; 33 TaskObserverMap task_observer_map_; 34}; 35 36class WebThreadImpl : public WebThreadBase { 37 public: 38 CONTENT_EXPORT explicit WebThreadImpl(const char* name); 39 CONTENT_EXPORT virtual ~WebThreadImpl(); 40 41 virtual void postTask(Task* task); 42 virtual void postDelayedTask(Task* task, long long delay_ms); 43 44 virtual void enterRunLoop(); 45 virtual void exitRunLoop(); 46 47 base::MessageLoop* message_loop() const { return thread_->message_loop(); } 48 49 private: 50 virtual bool isCurrentThread() const OVERRIDE; 51 scoped_ptr<base::Thread> thread_; 52}; 53 54class WebThreadImplForMessageLoop : public WebThreadBase { 55 public: 56 CONTENT_EXPORT explicit WebThreadImplForMessageLoop( 57 base::MessageLoopProxy* message_loop); 58 CONTENT_EXPORT virtual ~WebThreadImplForMessageLoop(); 59 60 virtual void postTask(Task* task); 61 virtual void postDelayedTask(Task* task, long long delay_ms); 62 63 virtual void enterRunLoop(); 64 virtual void exitRunLoop(); 65 66 private: 67 virtual bool isCurrentThread() const OVERRIDE; 68 scoped_refptr<base::MessageLoopProxy> message_loop_; 69}; 70 71} // namespace content 72 73#endif // CONTENT_CHILD_WEBTHREAD_IMPL_H_ 74