- add sources.
[platform/framework/web/crosswalk.git] / src / content / worker / websharedworker_stub.h
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_WEBSHAREDWORKER_STUB_H_
6 #define CONTENT_WORKER_WEBSHAREDWORKER_STUB_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "content/worker/websharedworkerclient_proxy.h"
10 #include "content/worker/worker_webapplicationcachehost_impl.h"
11 #include "ipc/ipc_listener.h"
12 #include "third_party/WebKit/public/web/WebSharedWorker.h"
13 #include "url/gurl.h"
14
15 namespace WebKit {
16 class WebSharedWorker;
17 }
18
19 namespace content {
20
21 class SharedWorkerDevToolsAgent;
22
23 // This class creates a WebSharedWorker, and translates incoming IPCs to the
24 // appropriate WebSharedWorker APIs.
25 class WebSharedWorkerStub : public IPC::Listener {
26  public:
27   WebSharedWorkerStub(const string16& name, int route_id,
28                       const WorkerAppCacheInitInfo& appcache_init_info);
29
30   // IPC::Listener implementation.
31   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
32   virtual void OnChannelError() OVERRIDE;
33
34   // Invoked when the WebSharedWorkerClientProxy is shutting down.
35   void Shutdown();
36
37   // Called after terminating the worker context to make sure that the worker
38   // actually terminates (is not stuck in an infinite loop).
39   void EnsureWorkerContextTerminates();
40
41   WebSharedWorkerClientProxy* client() { return &client_; }
42
43   const WorkerAppCacheInitInfo& appcache_init_info() const {
44     return appcache_init_info_;
45   }
46
47   // Returns the script url of this worker.
48   const GURL& url();
49
50
51  private:
52   virtual ~WebSharedWorkerStub();
53
54   void OnConnect(int sent_message_port_id, int routing_id);
55   void OnStartWorkerContext(
56       const GURL& url, const string16& user_agent, const string16& source_code,
57       const string16& content_security_policy,
58       WebKit::WebContentSecurityPolicyType policy_type);
59
60   void OnTerminateWorkerContext();
61
62   int route_id_;
63   WorkerAppCacheInitInfo appcache_init_info_;
64
65   // WebSharedWorkerClient that responds to outgoing API calls
66   // from the worker object.
67   WebSharedWorkerClientProxy client_;
68
69   WebKit::WebSharedWorker* impl_;
70   string16 name_;
71   bool started_;
72   GURL url_;
73   scoped_ptr<SharedWorkerDevToolsAgent> worker_devtools_agent_;
74
75   typedef std::pair<int, int> PendingConnectInfo;
76   typedef std::vector<PendingConnectInfo> PendingConnectInfoList;
77   PendingConnectInfoList pending_connects_;
78
79   DISALLOW_COPY_AND_ASSIGN(WebSharedWorkerStub);
80 };
81
82 }  // namespace content
83
84 #endif  // CONTENT_WORKER_WEBSHAREDWORKER_STUB_H_