| Index: content/common/service_worker/service_worker_event_dispatcher.mojom
 | 
| diff --git a/content/common/service_worker/service_worker_event_dispatcher.mojom b/content/common/service_worker/service_worker_event_dispatcher.mojom
 | 
| index 42d1218c722ed180f477bab8fddc1260c56e745b..446cda0c87ab279e78e4b0a4e81df85f2e0d8234 100644
 | 
| --- a/content/common/service_worker/service_worker_event_dispatcher.mojom
 | 
| +++ b/content/common/service_worker/service_worker_event_dispatcher.mojom
 | 
| @@ -11,6 +11,7 @@ import "mojo/common/time.mojom";
 | 
|  import "third_party/WebKit/public/platform/modules/background_sync/background_sync.mojom";
 | 
|  import "third_party/WebKit/public/platform/modules/fetch/fetch_api_request.mojom";
 | 
|  import "third_party/WebKit/public/platform/modules/serviceworker/service_worker_event_status.mojom";
 | 
| +import "third_party/WebKit/public/platform/modules/serviceworker/service_worker_stream_handle.mojom";
 | 
|  import "url/mojo/origin.mojom";
 | 
|  
 | 
|  [Native]
 | 
| @@ -50,6 +51,26 @@ struct ExtendableMessageEvent {
 | 
|    ExtendableMessageEventSource source;
 | 
|  };
 | 
|  
 | 
| +// Browser-side interface which is passed through DispatchFetchEvent. The
 | 
| +// renderer uses this interface to respond to a fetch event. This interface is
 | 
| +// only used for responses where the body is a stream or doesn't exist. When the
 | 
| +// body is a blob, the legacy IPC (ServiceWorkerHostMsg_FetchEventResponse) is
 | 
| +// used.
 | 
| +// TODO(shimazu): Use this interface for all responses after the blob system is
 | 
| +// mojoified: https://crbug.com/611935.
 | 
| +interface ServiceWorkerFetchResponseCallback {
 | 
| +  // Responds to the request with |response|. The body is empty.
 | 
| +  OnResponse(ServiceWorkerResponse response,
 | 
| +             mojo.common.mojom.Time dispatch_event_time);
 | 
| +  // Responds to the request with |response|. The body is returned as a stream.
 | 
| +  OnResponseStream(ServiceWorkerResponse response,
 | 
| +                   blink.mojom.ServiceWorkerStreamHandle body_as_stream,
 | 
| +                   mojo.common.mojom.Time dispatch_event_time);
 | 
| +  // Provides no response to the request. The browser will fall back to the
 | 
| +  // network.
 | 
| +  OnFallback(mojo.common.mojom.Time dispatch_event_time);
 | 
| +};
 | 
| +
 | 
|  // Renderer-side interface bound to ServiceWorkerContextClient for dispatching
 | 
|  // events.
 | 
|  // Those events expecting such response
 | 
| @@ -74,10 +95,16 @@ interface ServiceWorkerEventDispatcher {
 | 
|                                   array<BackgroundFetchSettledFetch> fetches)
 | 
|        => (blink.mojom.ServiceWorkerEventStatus status,
 | 
|            mojo.common.mojom.Time dispatch_event_time);
 | 
| -  // |fetch_event_id| is used internally when sending the response back to the
 | 
| -  // browser process.
 | 
| +  // The callback is called once the event finishes, which means the event
 | 
| +  // handler ran and all outstanding respondWith() and waitUntil() promises have
 | 
| +  // settled. |response_callback| is called once the promise to respondWith()
 | 
| +  // settles, or when the event handler ran without calling respondWith().
 | 
| +  // |fetch_event_id| is used internally when sending the response with a blob
 | 
| +  // body back to the browser process. In that case, |response_callback| won't
 | 
| +  // be called.
 | 
|    DispatchFetchEvent(int32 fetch_event_id, blink.mojom.FetchAPIRequest request,
 | 
| -                     FetchEventPreloadHandle? preload_handle)
 | 
| +                     FetchEventPreloadHandle? preload_handle,
 | 
| +                     ServiceWorkerFetchResponseCallback response_callback)
 | 
|        => (blink.mojom.ServiceWorkerEventStatus status,
 | 
|            mojo.common.mojom.Time dispatch_event_time);
 | 
|    DispatchNotificationClickEvent(string notification_id,
 | 
| 
 |