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