Home | History | Annotate | Download | only in web
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef WebServiceWorkerContextClient_h
     32 #define WebServiceWorkerContextClient_h
     33 
     34 #include "WebWorkerPermissionClientProxy.h"
     35 #include "public/platform/WebMessagePortChannel.h"
     36 #include "public/platform/WebServiceWorkerClientsInfo.h"
     37 #include "public/platform/WebServiceWorkerEventResult.h"
     38 #include "public/platform/WebURL.h"
     39 
     40 namespace blink {
     41 
     42 class WebDataSource;
     43 class WebServiceWorkerCacheStorage;
     44 class WebServiceWorkerContextProxy;
     45 class WebServiceWorkerNetworkProvider;
     46 class WebServiceWorkerResponse;
     47 class WebString;
     48 
     49 // This interface is implemented by the client. It is supposed to be created
     50 // on the main thread and then passed on to the worker thread.
     51 // by a newly created WorkerGlobalScope. All methods of this class, except
     52 // for createServiceWorkerNetworkProvider() and workerContextFailedToStart(),
     53 // are called on the worker thread.
     54 // FIXME: Split this into EmbeddedWorkerContextClient and
     55 // ServiceWorkerScriptContextClient when we decide to use EmbeddedWorker
     56 // framework for other implementation (like SharedWorker).
     57 class WebServiceWorkerContextClient {
     58 public:
     59     virtual ~WebServiceWorkerContextClient() { }
     60 
     61     // ServiceWorker specific method.
     62     virtual WebServiceWorkerCacheStorage* cacheStorage() { return 0; }
     63 
     64     // ServiceWorker specific method. Called when script accesses the
     65     // the |scope| attribute of the ServiceWorkerGlobalScope. Immutable per spec.
     66     virtual WebURL scope() const { return WebURL(); }
     67 
     68     // If the worker was started with WebEmbeddedWorkerStartData indicating to pause
     69     // after download, this method is called after the main script resource has been
     70     // downloaded. The scope will not be created and the script will not be loaded until
     71     // WebEmbeddedWorker.resumeAfterDownload() is invoked.
     72     virtual void didPauseAfterDownload() { }
     73 
     74     // ServiceWorker has prepared everything for script loading and is now ready for inspection.
     75     virtual void workerReadyForInspection() { }
     76 
     77     // A new WorkerGlobalScope is created and started to run on the
     78     // worker thread.
     79     // This also gives back a proxy to the client to talk to the
     80     // newly created WorkerGlobalScope. The proxy is held by WorkerGlobalScope
     81     // and should not be held by the caller. No proxy methods should be called
     82     // after willDestroyWorkerContext() is called.
     83     virtual void workerContextStarted(WebServiceWorkerContextProxy*) { }
     84 
     85     // WorkerGlobalScope is about to be destroyed. The client should clear
     86     // the WebServiceWorkerGlobalScopeProxy when this is called.
     87     virtual void willDestroyWorkerContext() { }
     88 
     89     // WorkerGlobalScope is destroyed and the worker is ready to be terminated.
     90     virtual void workerContextDestroyed() { }
     91 
     92     // Starting worker context is failed. This could happen when loading
     93     // worker script fails, or is asked to terminated before the context starts.
     94     // This is called on the main thread.
     95     virtual void workerContextFailedToStart() { }
     96 
     97     // Called when the WorkerGlobalScope had an error or an exception.
     98     virtual void reportException(const WebString& errorMessage, int lineNumber, int columnNumber, const WebString& sourceURL) { }
     99 
    100     // Called when the console message is reported.
    101     virtual void reportConsoleMessage(int source, int level, const WebString& message, int lineNumber, const WebString& sourceURL) { }
    102 
    103     // Inspector related messages.
    104     virtual void dispatchDevToolsMessage(const WebString&) { }
    105     virtual void saveDevToolsAgentState(const WebString&) { }
    106 
    107     // ServiceWorker specific method.
    108     virtual void didHandleActivateEvent(int eventID, WebServiceWorkerEventResult result) { }
    109 
    110     // ServiceWorker specific method. Called after InstallEvent (dispatched
    111     // via WebServiceWorkerContextProxy) is handled by the ServiceWorker's
    112     // script context.
    113     virtual void didHandleInstallEvent(int installEventID, WebServiceWorkerEventResult result) { }
    114 
    115     // ServiceWorker specific methods. Called after FetchEvent is handled by the
    116     // ServiceWorker's script context. When no response is provided, the browser
    117     // should fallback to native fetch.
    118     virtual void didHandleFetchEvent(int fetchEventID) { }
    119     virtual void didHandleFetchEvent(int fetchEventID, const WebServiceWorkerResponse& response) { }
    120 
    121     // ServiceWorker specific method. Called after SyncEvent (dispatched via
    122     // WebServiceWorkerContextProxy) is handled by the ServiceWorker's script
    123     // context.
    124     virtual void didHandleSyncEvent(int syncEventID) { }
    125 
    126     // Ownership of the returned object is transferred to the caller.
    127     virtual WebServiceWorkerNetworkProvider* createServiceWorkerNetworkProvider(WebDataSource*) { return 0; }
    128 
    129     // Ownership of the passed callbacks is transferred to the callee, callee
    130     // should delete the callbacks after calling either onSuccess or onError.
    131     // WebServiceWorkerClientsInfo and WebServiceWorkerError ownerships are
    132     // passed to the WebServiceWorkerClientsCallbacks implementation.
    133     virtual void getClients(WebServiceWorkerClientsCallbacks*) { BLINK_ASSERT_NOT_REACHED(); }
    134 
    135     // Callee receives ownership of the passed vector.
    136     // FIXME: Blob refs should be passed to maintain ref counts. crbug.com/351753
    137     virtual void postMessageToClient(int clientID, const WebString&, WebMessagePortChannelArray*) { BLINK_ASSERT_NOT_REACHED(); }
    138 };
    139 
    140 } // namespace blink
    141 
    142 #endif // WebServiceWorkerContextClient_h
    143