• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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