Home | History | Annotate | Download | only in html_viewer
      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 
     14 namespace mojo {
     15 
     16 class 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   virtual blink::PlatformThreadId threadId() 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 
     36 class WebThreadImpl : public WebThreadBase {
     37  public:
     38   explicit WebThreadImpl(const char* name);
     39   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   virtual bool isCurrentThread() const;
     50   virtual blink::PlatformThreadId threadId() const;
     51 
     52  private:
     53   scoped_ptr<base::Thread> thread_;
     54 };
     55 
     56 class WebThreadImplForMessageLoop : public WebThreadBase {
     57  public:
     58   explicit WebThreadImplForMessageLoop(
     59       base::MessageLoopProxy* message_loop);
     60   virtual ~WebThreadImplForMessageLoop();
     61 
     62   virtual void postTask(Task* task);
     63   virtual void postDelayedTask(Task* task, long long delay_ms);
     64 
     65   virtual void enterRunLoop();
     66   virtual void exitRunLoop();
     67 
     68  private:
     69   virtual bool isCurrentThread() const;
     70   virtual blink::PlatformThreadId threadId() const;
     71 
     72   scoped_refptr<base::MessageLoopProxy> message_loop_;
     73   blink::PlatformThreadId thread_id_;
     74 };
     75 
     76 }  // namespace mojo
     77 
     78 #endif  // MOJO_SERVICES_HTML_VIEWER_WEBTHREAD_IMPL_H_
     79