1// Copyright (c) 2012 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_WORKER_WORKER_THREAD_H_
6#define CONTENT_WORKER_WORKER_THREAD_H_
7
8#include <set>
9
10#include "content/child/child_thread.h"
11
12struct WorkerProcessMsg_CreateWorker_Params;
13
14namespace content {
15class AppCacheDispatcher;
16class DBMessageFilter;
17class IndexedDBMessageFilter;
18class WebDatabaseObserverImpl;
19class WebSharedWorkerStub;
20class WorkerWebKitPlatformSupportImpl;
21
22class WorkerThread : public ChildThread {
23 public:
24  WorkerThread();
25  virtual ~WorkerThread();
26  virtual void Shutdown() OVERRIDE;
27
28  // Returns the one worker thread.
29  static WorkerThread* current();
30
31  // Invoked from stub constructors/destructors. Stubs own themselves.
32  void AddWorkerStub(WebSharedWorkerStub* stub);
33  void RemoveWorkerStub(WebSharedWorkerStub* stub);
34
35  AppCacheDispatcher* appcache_dispatcher() {
36    return appcache_dispatcher_.get();
37  }
38
39 private:
40  virtual bool OnControlMessageReceived(const IPC::Message& msg) OVERRIDE;
41  virtual void OnChannelError() OVERRIDE;
42
43  void OnCreateWorker(const WorkerProcessMsg_CreateWorker_Params& params);
44
45  scoped_ptr<WorkerWebKitPlatformSupportImpl> webkit_platform_support_;
46  scoped_ptr<AppCacheDispatcher> appcache_dispatcher_;
47  scoped_ptr<WebDatabaseObserverImpl> web_database_observer_impl_;
48  scoped_refptr<DBMessageFilter> db_message_filter_;
49  scoped_refptr<IndexedDBMessageFilter> indexed_db_message_filter_;
50
51  typedef std::set<WebSharedWorkerStub*> WorkerStubsList;
52  WorkerStubsList worker_stubs_;
53
54  DISALLOW_COPY_AND_ASSIGN(WorkerThread);
55};
56
57}  // namespace content
58
59#endif  // CONTENT_WORKER_WORKER_THREAD_H_
60