Home | History | Annotate | Download | only in service_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_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
      6 #define CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/id_map.h"
     13 #include "base/strings/string16.h"
     14 #include "content/child/webmessageportchannel_impl.h"
     15 #include "content/common/service_worker/service_worker_types.h"
     16 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
     17 #include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
     18 #include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
     19 
     20 namespace blink {
     21 class WebServiceWorkerContextProxy;
     22 }
     23 
     24 namespace IPC {
     25 class Message;
     26 }
     27 
     28 namespace content {
     29 
     30 class EmbeddedWorkerContextClient;
     31 
     32 // TODO(kinuko): This should implement WebServiceWorkerContextClient
     33 // rather than having EmbeddedWorkerContextClient implement it.
     34 // See the header comment in embedded_worker_context_client.h for the
     35 // potential EW/SW layering concerns.
     36 class ServiceWorkerScriptContext {
     37  public:
     38   ServiceWorkerScriptContext(
     39       EmbeddedWorkerContextClient* embedded_context,
     40       blink::WebServiceWorkerContextProxy* proxy);
     41   ~ServiceWorkerScriptContext();
     42 
     43   void OnMessageReceived(const IPC::Message& message);
     44 
     45   void DidHandleActivateEvent(int request_id,
     46                               blink::WebServiceWorkerEventResult);
     47   void DidHandleInstallEvent(int request_id,
     48                              blink::WebServiceWorkerEventResult result);
     49   void DidHandleFetchEvent(int request_id,
     50                            ServiceWorkerFetchEventResult result,
     51                            const ServiceWorkerResponse& response);
     52   void DidHandleSyncEvent(int request_id);
     53   void GetClientDocuments(
     54       blink::WebServiceWorkerClientsCallbacks* callbacks);
     55   void PostMessageToDocument(
     56       int client_id,
     57       const base::string16& message,
     58       scoped_ptr<blink::WebMessagePortChannelArray> channels);
     59 
     60  private:
     61   typedef IDMap<blink::WebServiceWorkerClientsCallbacks, IDMapOwnPointer>
     62       ClientsCallbacksMap;
     63 
     64   // Send a message to the browser.
     65   void Send(IPC::Message* message);
     66 
     67   void OnActivateEvent(int request_id);
     68   void OnInstallEvent(int request_id, int active_version_id);
     69   void OnFetchEvent(int request_id, const ServiceWorkerFetchRequest& request);
     70   void OnSyncEvent(int request_id);
     71   void OnPushEvent(int request_id, const std::string& data);
     72   void OnPostMessage(const base::string16& message,
     73                      const std::vector<int>& sent_message_port_ids,
     74                      const std::vector<int>& new_routing_ids);
     75   void OnDidGetClientDocuments(
     76       int request_id, const std::vector<int>& client_ids);
     77 
     78   // Get routing_id for sending message to the ServiceWorkerVersion
     79   // in the browser process.
     80   int GetRoutingID() const;
     81 
     82   // Not owned; embedded_context_ owns this.
     83   EmbeddedWorkerContextClient* embedded_context_;
     84 
     85   // Not owned; this object is destroyed when proxy_ becomes invalid.
     86   blink::WebServiceWorkerContextProxy* proxy_;
     87 
     88   // Used for incoming messages from the browser for which an outgoing response
     89   // back to the browser is expected, the id must be sent back with the
     90   // response.
     91   int current_request_id_;
     92 
     93   // Pending callbacks for GetClientDocuments().
     94   ClientsCallbacksMap pending_clients_callbacks_;
     95 
     96   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerScriptContext);
     97 };
     98 
     99 }  // namespace content
    100 
    101 #endif  // CONTENT_RENDERER_SERVICE_WORKER_SERVICE_WORKER_SCRIPT_CONTEXT_H_
    102