#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
+struct EmbeddedWorkerMsg_StartWorker_Params;
class GURL;
namespace content {
class EmbeddedWorkerRegistry;
class EmbeddedWorkerTestHelper;
class ServiceWorkerContextCore;
+class ServiceWorkerContextWrapper;
struct ServiceWorkerFetchRequest;
// In-Process EmbeddedWorker test helper.
//
-// Usage: create an instance of this class for a ServiceWorkerContextCore
-// to test browser-side embedded worker code without creating a child process.
+// Usage: create an instance of this class to test browser-side embedded worker
+// code without creating a child process. This class will create a
+// ServiceWorkerContextWrapper and ServiceWorkerContextCore for you.
//
// By default this class just notifies back WorkerStarted and WorkerStopped
// for StartWorker and StopWorker requests. The default implementation
// also returns success for event messages (e.g. InstallEvent, FetchEvent).
//
-// Alternatively consumers can subclass this helper and override
-// OnStartWorker(), OnStopWorker(), OnSendMessageToWorker(),
-// OnInstallEvent(), OnFetchEvent() etc to add their own
-// logic/verification code.
+// Alternatively consumers can subclass this helper and override On*()
+// methods to add their own logic/verification code.
//
// See embedded_worker_instance_unittest.cc for example usages.
//
public:
// Initialize this helper for |context|, and enable this as an IPC
// sender for |mock_render_process_id|.
- EmbeddedWorkerTestHelper(ServiceWorkerContextCore* context,
- int mock_render_process_id);
+ EmbeddedWorkerTestHelper(int mock_render_process_id);
virtual ~EmbeddedWorkerTestHelper();
// Call this to simulate add/associate a process to a worker.
// Inner IPC sink for script context messages sent via EmbeddedWorker.
IPC::TestSink* inner_ipc_sink() { return &inner_sink_; }
+ ServiceWorkerContextCore* context();
+ ServiceWorkerContextWrapper* context_wrapper() { return wrapper_.get(); }
+ void ShutdownContext();
+
protected:
// Called when StartWorker, StopWorker and SendMessageToWorker message
// is sent to the embedded worker. Override if necessary. By default
// they verify given parameters and:
- // - call SimulateWorkerStarted for OnStartWorker
- // - call SimulateWorkerStoped for OnStopWorker
- // - call OnFooEvent handlers for known events for OnSendMessageToWorker
+ // - OnStartWorker calls SimulateWorkerStarted
+ // - OnStopWorker calls SimulateWorkerStoped
+ // - OnSendMessageToWorker calls the message's respective On*Event handler
virtual void OnStartWorker(int embedded_worker_id,
int64 service_worker_version_id,
+ const GURL& scope,
const GURL& script_url);
virtual void OnStopWorker(int embedded_worker_id);
- virtual bool OnSendMessageToWorker(int thread_id,
- int embedded_worker_id,
- int request_id,
- const IPC::Message& message);
-
- // Called when InstallEvent, FetchEvent message is sent to the embedded
- // worker. These are called via OnSendMessageToWorker()'s default
- // implementation. By default they just return success via
- // SimulateSendMessageToBrowser.
+ virtual bool OnMessageToWorker(int thread_id,
+ int embedded_worker_id,
+ const IPC::Message& message);
+
+ // On*Event handlers. Called by the default implementation of
+ // OnMessageToWorker when events are sent to the embedded
+ // worker. By default they just return success via
+ // SimulateSendReplyToBrowser.
+ virtual void OnActivateEvent(int embedded_worker_id, int request_id);
virtual void OnInstallEvent(int embedded_worker_id,
int request_id,
- int active_version_embedded_worker_id);
+ int active_version_id);
virtual void OnFetchEvent(int embedded_worker_id,
int request_id,
const ServiceWorkerFetchRequest& request);
- // Call this to simulate sending WorkerStarted, WorkerStopped and
- // SendMessageToBrowser to the browser.
+ // These functions simulate sending an EmbeddedHostMsg message to the
+ // browser.
void SimulateWorkerStarted(int thread_id, int embedded_worker_id);
void SimulateWorkerStopped(int embedded_worker_id);
- void SimulateSendMessageToBrowser(int embedded_worker_id,
- int request_id,
- const IPC::Message& message);
+ void SimulateSend(IPC::Message* message);
+
+ protected:
+ EmbeddedWorkerRegistry* registry();
private:
- void OnStartWorkerStub(int embedded_worker_id,
- int64 service_worker_version_id,
- const GURL& script_url);
+ void OnStartWorkerStub(const EmbeddedWorkerMsg_StartWorker_Params& params);
void OnStopWorkerStub(int embedded_worker_id);
- void OnSendMessageToWorkerStub(int thread_id,
- int embedded_worker_id,
- int request_id,
- const IPC::Message& message);
- void OnInstallEventStub(int active_version_embedded_worker_id);
- void OnFetchEventStub(const ServiceWorkerFetchRequest& request);
-
- EmbeddedWorkerRegistry* registry();
+ void OnMessageToWorkerStub(int thread_id,
+ int embedded_worker_id,
+ const IPC::Message& message);
+ void OnActivateEventStub(int request_id);
+ void OnInstallEventStub(int request_id, int active_version_id);
+ void OnFetchEventStub(int request_id,
+ const ServiceWorkerFetchRequest& request);
- base::WeakPtr<ServiceWorkerContextCore> context_;
+ scoped_refptr<ServiceWorkerContextWrapper> wrapper_;
IPC::TestSink sink_;
IPC::TestSink inner_sink_;
int next_thread_id_;
- // Updated each time SendMessageToWorker message is received.
+ // Updated each time MessageToWorker message is received.
int current_embedded_worker_id_;
- int current_request_id_;
base::WeakPtrFactory<EmbeddedWorkerTestHelper> weak_factory_;