Home | History | Annotate | Download | only in shared_worker
      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