webthread_impl.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Copyright 2014 The Chromium Authors. All rights reserved.
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project// found in the LICENSE file.
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef CONTENT_CHILD_WEBTHREAD_IMPL_H_
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CONTENT_CHILD_WEBTHREAD_IMPL_H_
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <map>
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/memory/scoped_ptr.h"
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "base/threading/thread.h"
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "content/common/content_export.h"
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "third_party/WebKit/public/platform/WebThread.h"
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectnamespace content {
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass CONTENT_EXPORT WebThreadBase : public blink::WebThread {
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public:
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual ~WebThreadBase();
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void addTaskObserver(TaskObserver* observer);
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void removeTaskObserver(TaskObserver* observer);
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual bool isCurrentThread() const = 0;
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project protected:
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  WebThreadBase();
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private:
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  class TaskObserverAdapter;
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  typedef std::map<TaskObserver*, TaskObserverAdapter*> TaskObserverMap;
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  TaskObserverMap task_observer_map_;
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass CONTENT_EXPORT WebThreadImpl : public WebThreadBase {
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public:
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  explicit WebThreadImpl(const char* name);
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual ~WebThreadImpl();
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void postTask(Task* task);
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void postDelayedTask(Task* task, long long delay_ms);
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void enterRunLoop();
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void exitRunLoop();
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  base::MessageLoop* message_loop() const { return thread_->message_loop(); }
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual bool isCurrentThread() const OVERRIDE;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private:
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  scoped_ptr<base::Thread> thread_;
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectclass WebThreadImplForMessageLoop : public WebThreadBase {
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project public:
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  CONTENT_EXPORT explicit WebThreadImplForMessageLoop(
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project      base::MessageLoopProxy* message_loop);
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  CONTENT_EXPORT virtual ~WebThreadImplForMessageLoop();
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void postTask(Task* task) OVERRIDE;
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void postDelayedTask(Task* task, long long delay_ms) OVERRIDE;
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void enterRunLoop() OVERRIDE;
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual void exitRunLoop() OVERRIDE;
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project private:
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  virtual bool isCurrentThread() const OVERRIDE;
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project  scoped_refptr<base::MessageLoopProxy> message_loop_;
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} // namespace content
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif  // CONTENT_CHILD_WEBTHREAD_IMPL_H_
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project