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_ 85