#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_param_traits.h"
#include "third_party/WebKit/public/platform/WebServiceWorkerError.h"
+#include "third_party/WebKit/public/platform/WebServiceWorkerEventResult.h"
#include "url/gurl.h"
#undef IPC_MESSAGE_EXPORT
IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerError::ErrorType,
blink::WebServiceWorkerError::ErrorTypeLast)
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerEventResult,
+ blink::WebServiceWorkerEventResultLast)
+
+IPC_ENUM_TRAITS_MAX_VALUE(blink::WebServiceWorkerState,
+ blink::WebServiceWorkerStateLast)
+
IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerFetchRequest)
IPC_STRUCT_TRAITS_MEMBER(url)
IPC_STRUCT_TRAITS_MEMBER(method)
IPC_STRUCT_TRAITS_MEMBER(headers)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerObjectInfo)
+ IPC_STRUCT_TRAITS_MEMBER(handle_id)
+ IPC_STRUCT_TRAITS_MEMBER(scope)
+ IPC_STRUCT_TRAITS_MEMBER(url)
+ IPC_STRUCT_TRAITS_MEMBER(state)
+IPC_STRUCT_TRAITS_END()
+
+//---------------------------------------------------------------------------
// Messages sent from the child process to the browser.
-IPC_MESSAGE_CONTROL4(ServiceWorkerHostMsg_RegisterServiceWorker,
- int32 /* thread_id */,
- int32 /* request_id */,
+IPC_MESSAGE_CONTROL5(ServiceWorkerHostMsg_RegisterServiceWorker,
+ int /* thread_id */,
+ int /* request_id */,
+ int /* provider_id */,
GURL /* scope */,
GURL /* script_url */)
-IPC_MESSAGE_CONTROL3(ServiceWorkerHostMsg_UnregisterServiceWorker,
- int32 /* thread_id */,
- int32 /* request_id */,
+IPC_MESSAGE_CONTROL4(ServiceWorkerHostMsg_UnregisterServiceWorker,
+ int /* thread_id */,
+ int /* request_id */,
+ int /* provider_id */,
GURL /* scope (url pattern) */)
// Sends a 'message' event to a service worker (renderer->browser).
-IPC_MESSAGE_CONTROL3(ServiceWorkerHostMsg_PostMessage,
- int64 /* registration_id */,
+IPC_MESSAGE_CONTROL3(ServiceWorkerHostMsg_PostMessageToWorker,
+ int /* handle_id */,
base::string16 /* message */,
std::vector<int> /* sent_message_port_ids */)
+// Informs the browser of a new ServiceWorkerProvider in the child process,
+// |provider_id| is unique within its child process.
+IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_ProviderCreated,
+ int /* provider_id */)
+
+// Informs the browser of a ServiceWorkerProvider being destroyed.
+IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_ProviderDestroyed,
+ int /* provider_id */)
+
+// Increments and decrements the ServiceWorker object's reference
+// counting in the browser side. The ServiceWorker object is created
+// with ref-count==1 initially.
+IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount,
+ int /* handle_id */)
+IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount,
+ int /* handle_id */)
+
+// Informs the browser that |provider_id| is associated
+// with a service worker script running context and
+// |version_id| identifies which ServcieWorkerVersion.
+IPC_MESSAGE_CONTROL2(ServiceWorkerHostMsg_SetVersionId,
+ int /* provider_id */,
+ int64 /* version_id */)
+
+// Informs the browser that event handling has finished.
+// Routed to the target ServiceWorkerVersion.
+IPC_MESSAGE_ROUTED2(ServiceWorkerHostMsg_InstallEventFinished,
+ int /* request_id */,
+ blink::WebServiceWorkerEventResult)
+IPC_MESSAGE_ROUTED2(ServiceWorkerHostMsg_ActivateEventFinished,
+ int /* request_id */,
+ blink::WebServiceWorkerEventResult);
+IPC_MESSAGE_ROUTED3(ServiceWorkerHostMsg_FetchEventFinished,
+ int /* request_id */,
+ content::ServiceWorkerFetchEventResult,
+ content::ServiceWorkerResponse)
+IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_SyncEventFinished,
+ int /* request_id */)
+
+// Asks the browser to retrieve documents controlled by the sender
+// ServiceWorker.
+IPC_MESSAGE_ROUTED1(ServiceWorkerHostMsg_GetClientDocuments,
+ int /* request_id */)
+
+// Sends a 'message' event to a client document (renderer->browser).
+IPC_MESSAGE_ROUTED3(ServiceWorkerHostMsg_PostMessageToDocument,
+ int /* client_id */,
+ base::string16 /* message */,
+ std::vector<int> /* sent_message_port_ids */)
+
+//---------------------------------------------------------------------------
// Messages sent from the browser to the child process.
+//
+// NOTE: All ServiceWorkerMsg messages not sent via EmbeddedWorker must have
+// a thread_id as their first field so that ServiceWorkerMessageFilter can
+// extract it and dispatch the message to the correct ServiceWorkerDispatcher
+// on the correct thread.
-// Response to ServiceWorkerMsg_RegisterServiceWorker
+// Response to ServiceWorkerMsg_RegisterServiceWorker.
IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_ServiceWorkerRegistered,
- int32 /* thread_id */,
- int32 /* request_id */,
- int64 /* service_worker_id */)
+ int /* thread_id */,
+ int /* request_id */,
+ content::ServiceWorkerObjectInfo)
-// Response to ServiceWorkerMsg_UnregisterServiceWorker
+// Response to ServiceWorkerMsg_UnregisterServiceWorker.
IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_ServiceWorkerUnregistered,
- int32 /* thread_id */,
- int32 /* request_id */)
+ int /* thread_id */,
+ int /* request_id */)
// Sent when any kind of registration error occurs during a
// RegisterServiceWorker / UnregisterServiceWorker handler above.
IPC_MESSAGE_CONTROL4(ServiceWorkerMsg_ServiceWorkerRegistrationError,
- int32 /* thread_id */,
- int32 /* request_id */,
+ int /* thread_id */,
+ int /* request_id */,
blink::WebServiceWorkerError::ErrorType /* code */,
base::string16 /* message */)
-// Sent via EmbeddedWorker to dispatch install event.
-IPC_MESSAGE_CONTROL1(ServiceWorkerMsg_InstallEvent,
- int /* active_version_embedded_worker_id */)
+// Informs the child process that the ServiceWorker's state has changed.
+IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_ServiceWorkerStateChanged,
+ int /* thread_id */,
+ int /* handle_id */,
+ blink::WebServiceWorkerState)
-// Sent via EmbeddedWorker to dispatch fetch event.
-IPC_MESSAGE_CONTROL1(ServiceWorkerMsg_FetchEvent,
- content::ServiceWorkerFetchRequest)
+// Tells the child process to set the current ServiceWorker for the given
+// provider.
+IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_SetCurrentServiceWorker,
+ int /* thread_id */,
+ int /* provider_id */,
+ content::ServiceWorkerObjectInfo)
-// Sends a 'message' event to a service worker (browser->EmbeddedWorker).
-IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_Message,
+// Sends a 'message' event to a client document (browser->renderer).
+IPC_MESSAGE_CONTROL5(ServiceWorkerMsg_MessageToDocument,
+ int /* thread_id */,
+ int /* provider_id */,
base::string16 /* message */,
std::vector<int> /* sent_message_port_ids */,
std::vector<int> /* new_routing_ids */)
-// Informs the browser of a new ServiceWorkerProvider in the child process,
-// |provider_id| is unique within its child process.
-IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_ProviderCreated,
- int /* provider_id */)
-
-// Informs the browser of a ServiceWorkerProvider being destroyed.
-IPC_MESSAGE_CONTROL1(ServiceWorkerHostMsg_ProviderDestroyed,
- int /* provider_id */)
-
-// Informs the browser of a new scriptable API client in the child process.
-IPC_MESSAGE_CONTROL2(ServiceWorkerHostMsg_AddScriptClient,
- int /* thread_id */,
- int /* provider_id */)
-
-// Informs the browser that the scriptable API client is unregistered.
-IPC_MESSAGE_CONTROL2(ServiceWorkerHostMsg_RemoveScriptClient,
- int /* thread_id */,
- int /* provider_id */)
-
-// Informs the browser that install event handling has finished.
-// Sent via EmbeddedWorker. If there was an exception during the
-// event handling it'll be reported back separately (to be propagated
-// to the documents).
-IPC_MESSAGE_CONTROL0(ServiceWorkerHostMsg_InstallEventFinished)
+// Sent via EmbeddedWorker to dispatch events.
+IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_InstallEvent,
+ int /* request_id */,
+ int /* active_version_id */)
+IPC_MESSAGE_CONTROL1(ServiceWorkerMsg_ActivateEvent,
+ int /* request_id */)
+IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_FetchEvent,
+ int /* request_id */,
+ content::ServiceWorkerFetchRequest)
+IPC_MESSAGE_CONTROL1(ServiceWorkerMsg_SyncEvent,
+ int /* request_id */)
+IPC_MESSAGE_CONTROL3(ServiceWorkerMsg_MessageToWorker,
+ base::string16 /* message */,
+ std::vector<int> /* sent_message_port_ids */,
+ std::vector<int> /* new_routing_ids */)
-// Informs the browser that fetch event handling has finished.
-IPC_MESSAGE_CONTROL2(ServiceWorkerHostMsg_FetchEventFinished,
- content::ServiceWorkerFetchEventResult,
- content::ServiceWorkerResponse)
+// Sent via EmbeddedWorker as a response of GetClientDocuments.
+IPC_MESSAGE_CONTROL2(ServiceWorkerMsg_DidGetClientDocuments,
+ int /* request_id */,
+ std::vector<int> /* client_ids */)