service_worker_dispatcher.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright 2013 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_CHILD_SERVICE_WORKER_SERVICE_WORKER_DISPATCHER_H_ 6#define CONTENT_CHILD_SERVICE_WORKER_SERVICE_WORKER_DISPATCHER_H_ 7 8#include <map> 9 10#include "base/id_map.h" 11#include "base/memory/ref_counted.h" 12#include "base/strings/string16.h" 13#include "content/child/worker_task_runner.h" 14#include "third_party/WebKit/public/platform/WebServiceWorkerError.h" 15#include "third_party/WebKit/public/platform/WebServiceWorkerProvider.h" 16 17class GURL; 18 19namespace blink { 20class WebURL; 21} 22 23namespace IPC { 24class Message; 25} 26 27namespace content { 28class ServiceWorkerMessageFilter; 29class ThreadSafeSender; 30class WebServiceWorkerImpl; 31 32// This class manages communication with the browser process about 33// registration of the service worker, exposed to renderer and worker 34// scripts through methods like navigator.registerServiceWorker(). 35class ServiceWorkerDispatcher : public WorkerTaskRunner::Observer { 36 public: 37 explicit ServiceWorkerDispatcher(ThreadSafeSender* thread_safe_sender); 38 virtual ~ServiceWorkerDispatcher(); 39 40 void OnMessageReceived(const IPC::Message& msg); 41 bool Send(IPC::Message* msg); 42 43 // Corresponds to navigator.serviceWorker.register() 44 void RegisterServiceWorker( 45 const GURL& pattern, 46 const GURL& script_url, 47 blink::WebServiceWorkerProvider::WebServiceWorkerCallbacks* callbacks); 48 // Corresponds to navigator.serviceWorker.unregister() 49 void UnregisterServiceWorker( 50 const GURL& pattern, 51 blink::WebServiceWorkerProvider::WebServiceWorkerCallbacks* callbacks); 52 53 // Called when navigator.serviceWorker is instantiated or detached 54 // for a document whose provider can be identified by |provider_id|. 55 void AddScriptClient(int provider_id, 56 blink::WebServiceWorkerProviderClient* client); 57 void RemoveScriptClient(int provider_id); 58 59 // |thread_safe_sender| needs to be passed in because if the call leads to 60 // construction it will be needed. 61 static ServiceWorkerDispatcher* ThreadSpecificInstance( 62 ThreadSafeSender* thread_safe_sender); 63 64 private: 65 typedef std::map<int, blink::WebServiceWorkerProviderClient*> ScriptClientMap; 66 67 // WorkerTaskRunner::Observer implementation. 68 virtual void OnWorkerRunLoopStopped() OVERRIDE; 69 70 // The asynchronous success response to RegisterServiceWorker. 71 void OnRegistered(int32 thread_id, 72 int32 request_id, 73 int handle_id); 74 // The asynchronous success response to UregisterServiceWorker. 75 void OnUnregistered(int32 thread_id, 76 int32 request_id); 77 void OnRegistrationError(int32 thread_id, 78 int32 request_id, 79 blink::WebServiceWorkerError::ErrorType error_type, 80 const base::string16& message); 81 82 IDMap<blink::WebServiceWorkerProvider::WebServiceWorkerCallbacks, 83 IDMapOwnPointer> pending_callbacks_; 84 ScriptClientMap script_clients_; 85 86 scoped_refptr<ThreadSafeSender> thread_safe_sender_; 87 88 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerDispatcher); 89}; 90 91} // namespace content 92 93#endif // CONTENT_CHILD_SERVICE_WORKER_SERVICE_WORKER_DISPATCHER_H_ 94