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 CONTENT_RENDERER_SHARED_WORKER_EMBEDDED_SHARED_WORKER_STUB_H 6 #define CONTENT_RENDERER_SHARED_WORKER_EMBEDDED_SHARED_WORKER_STUB_H 7 8 #include <vector> 9 10 #include "content/child/child_message_filter.h" 11 #include "content/child/scoped_child_process_reference.h" 12 #include "ipc/ipc_listener.h" 13 #include "third_party/WebKit/public/platform/WebString.h" 14 #include "third_party/WebKit/public/web/WebContentSecurityPolicy.h" 15 #include "third_party/WebKit/public/web/WebSharedWorkerClient.h" 16 #include "url/gurl.h" 17 18 namespace blink { 19 class WebApplicationCacheHost; 20 class WebApplicationCacheHostClient; 21 class WebMessagePortChannel; 22 class WebNotificationPresenter; 23 class WebSecurityOrigin; 24 class WebSharedWorker; 25 class WebWorkerPermissionClientProxy; 26 } 27 28 namespace content { 29 class SharedWorkerDevToolsAgent; 30 class WebApplicationCacheHostImpl; 31 class WebMessagePortChannelImpl; 32 33 class EmbeddedSharedWorkerStub : public IPC::Listener, 34 public blink::WebSharedWorkerClient { 35 public: 36 EmbeddedSharedWorkerStub( 37 const GURL& url, 38 const base::string16& name, 39 const base::string16& content_security_policy, 40 blink::WebContentSecurityPolicyType security_policy_type, 41 bool pause_on_start, 42 int route_id); 43 44 // IPC::Listener implementation. 45 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 46 virtual void OnChannelError() OVERRIDE; 47 48 // blink::WebSharedWorkerClient implementation. 49 virtual void workerContextClosed() OVERRIDE; 50 virtual void workerContextDestroyed() OVERRIDE; 51 virtual void workerScriptLoaded() OVERRIDE; 52 virtual void workerScriptLoadFailed() OVERRIDE; 53 virtual void selectAppCacheID(long long) OVERRIDE; 54 virtual blink::WebNotificationPresenter* notificationPresenter() OVERRIDE; 55 virtual blink::WebApplicationCacheHost* createApplicationCacheHost( 56 blink::WebApplicationCacheHostClient*) OVERRIDE; 57 virtual blink::WebWorkerPermissionClientProxy* 58 createWorkerPermissionClientProxy( 59 const blink::WebSecurityOrigin& origin) OVERRIDE; 60 virtual void dispatchDevToolsMessage( 61 const blink::WebString& message) OVERRIDE; 62 virtual void saveDevToolsAgentState(const blink::WebString& state) OVERRIDE; 63 64 private: 65 virtual ~EmbeddedSharedWorkerStub(); 66 67 void Shutdown(); 68 bool Send(IPC::Message* message); 69 70 // WebSharedWorker will own |channel|. 71 void ConnectToChannel(WebMessagePortChannelImpl* channel); 72 73 void OnConnect(int sent_message_port_id, int routing_id); 74 void OnTerminateWorkerContext(); 75 76 int route_id_; 77 base::string16 name_; 78 bool runing_; 79 GURL url_; 80 blink::WebSharedWorker* impl_; 81 scoped_ptr<SharedWorkerDevToolsAgent> worker_devtools_agent_; 82 83 typedef std::vector<WebMessagePortChannelImpl*> PendingChannelList; 84 PendingChannelList pending_channels_; 85 86 ScopedChildProcessReference process_ref_; 87 WebApplicationCacheHostImpl* app_cache_host_; 88 DISALLOW_COPY_AND_ASSIGN(EmbeddedSharedWorkerStub); 89 }; 90 91 } // namespace content 92 93 #endif // CONTENT_RENDERER_SHARED_WORKER_EMBEDDED_SHARED_WORKER_STUB_H 94