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: ~WebServiceWorkerContextClient()59 virtual ~WebServiceWorkerContextClient() { } 60 61 // ServiceWorker specific method. cacheStorage()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. scope()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. didPauseAfterDownload()72 virtual void didPauseAfterDownload() { } 73 74 // ServiceWorker has prepared everything for script loading and is now ready for inspection. workerReadyForInspection()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. workerContextStarted(WebServiceWorkerContextProxy *)83 virtual void workerContextStarted(WebServiceWorkerContextProxy*) { } 84 85 // WorkerGlobalScope is about to be destroyed. The client should clear 86 // the WebServiceWorkerGlobalScopeProxy when this is called. willDestroyWorkerContext()87 virtual void willDestroyWorkerContext() { } 88 89 // WorkerGlobalScope is destroyed and the worker is ready to be terminated. workerContextDestroyed()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. workerContextFailedToStart()95 virtual void workerContextFailedToStart() { } 96 97 // Called when the WorkerGlobalScope had an error or an exception. reportException(const WebString & errorMessage,int lineNumber,int columnNumber,const WebString & sourceURL)98 virtual void reportException(const WebString& errorMessage, int lineNumber, int columnNumber, const WebString& sourceURL) { } 99 100 // Called when the console message is reported. reportConsoleMessage(int source,int level,const WebString & message,int lineNumber,const WebString & sourceURL)101 virtual void reportConsoleMessage(int source, int level, const WebString& message, int lineNumber, const WebString& sourceURL) { } 102 103 // Inspector related messages. dispatchDevToolsMessage(const WebString &)104 virtual void dispatchDevToolsMessage(const WebString&) { } saveDevToolsAgentState(const WebString &)105 virtual void saveDevToolsAgentState(const WebString&) { } 106 107 // ServiceWorker specific method. didHandleActivateEvent(int eventID,WebServiceWorkerEventResult result)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. didHandleInstallEvent(int installEventID,WebServiceWorkerEventResult result)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. didHandleFetchEvent(int fetchEventID)118 virtual void didHandleFetchEvent(int fetchEventID) { } didHandleFetchEvent(int fetchEventID,const WebServiceWorkerResponse & response)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. didHandleSyncEvent(int syncEventID)124 virtual void didHandleSyncEvent(int syncEventID) { } 125 126 // Ownership of the returned object is transferred to the caller. createServiceWorkerNetworkProvider(WebDataSource *)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. getClients(WebServiceWorkerClientsCallbacks *)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 postMessageToClient(int clientID,const WebString &,WebMessagePortChannelArray *)137 virtual void postMessageToClient(int clientID, const WebString&, WebMessagePortChannelArray*) { BLINK_ASSERT_NOT_REACHED(); } 138 }; 139 140 } // namespace blink 141 142 #endif // WebServiceWorkerContextClient_h 143