#include "content/browser/service_worker/embedded_worker_test_helper.h"
+#include <map>
+#include <string>
+
#include "base/bind.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
namespace content {
-static bool AlwaysTrue(int process_id) {
- return true;
-}
-
EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper(int mock_render_process_id)
: wrapper_(new ServiceWorkerContextWrapper(NULL)),
next_thread_id_(0),
+ mock_render_process_id_(mock_render_process_id),
weak_factory_(this) {
- wrapper_->InitForTesting(base::FilePath(),
- base::MessageLoopProxy::current(),
- NULL);
- scoped_ptr<ServiceWorkerProcessManager> process_manager(
- new ServiceWorkerProcessManager(wrapper_));
- process_manager->SetProcessRefcountOpsForTest(base::Bind(AlwaysTrue),
- base::Bind(AlwaysTrue));
- wrapper_->context()->SetProcessManagerForTest(process_manager.Pass());
+ wrapper_->InitInternal(base::FilePath(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ base::MessageLoopProxy::current(),
+ NULL);
+ wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id);
registry()->AddChildProcessSender(mock_render_process_id, this);
}
EmbeddedWorkerTestHelper::~EmbeddedWorkerTestHelper() {
- if (wrapper_)
+ if (wrapper_.get())
wrapper_->Shutdown();
}
-void EmbeddedWorkerTestHelper::SimulateAddProcessToWorker(
- int embedded_worker_id,
+void EmbeddedWorkerTestHelper::SimulateAddProcessToPattern(
+ const GURL& pattern,
int process_id) {
- EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
- ASSERT_TRUE(worker);
registry()->AddChildProcessSender(process_id, this);
- worker->AddProcessReference(process_id);
+ wrapper_->process_manager()->AddProcessReferenceToPattern(
+ pattern, process_id);
}
bool EmbeddedWorkerTestHelper::Send(IPC::Message* message) {
IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub)
IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker,
OnMessageToWorkerStub)
+ IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_ResumeAfterDownload,
+ OnResumeAfterDownloadStub)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
int embedded_worker_id,
int64 service_worker_version_id,
const GURL& scope,
- const GURL& script_url) {
- // By default just notify the sender that the worker is started.
- SimulateWorkerStarted(next_thread_id_++, embedded_worker_id);
+ const GURL& script_url,
+ bool pause_after_download) {
+ if (pause_after_download) {
+ SimulatePausedAfterDownload(embedded_worker_id);
+ return;
+ }
+ SimulateWorkerReadyForInspection(embedded_worker_id);
+ SimulateWorkerScriptLoaded(next_thread_id_++, embedded_worker_id);
+ SimulateWorkerStarted(embedded_worker_id);
+}
+
+void EmbeddedWorkerTestHelper::OnResumeAfterDownload(int embedded_worker_id) {
+ SimulateWorkerReadyForInspection(embedded_worker_id);
+ SimulateWorkerScriptLoaded(next_thread_id_++, embedded_worker_id);
+ SimulateWorkerStarted(embedded_worker_id);
}
void EmbeddedWorkerTestHelper::OnStopWorker(int embedded_worker_id) {
int embedded_worker_id,
int request_id,
const ServiceWorkerFetchRequest& request) {
- SimulateSend(
- new ServiceWorkerHostMsg_FetchEventFinished(
- embedded_worker_id, request_id,
- SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
- ServiceWorkerResponse(200, "OK", "GET",
- std::map<std::string, std::string>())));
+ SimulateSend(new ServiceWorkerHostMsg_FetchEventFinished(
+ embedded_worker_id,
+ request_id,
+ SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE,
+ ServiceWorkerResponse(
+ GURL(""), 200, "OK", ServiceWorkerHeaderMap(), std::string())));
}
-void EmbeddedWorkerTestHelper::SimulateWorkerStarted(
+void EmbeddedWorkerTestHelper::SimulatePausedAfterDownload(
+ int embedded_worker_id) {
+ EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
+ ASSERT_TRUE(worker != NULL);
+ registry()->OnPausedAfterDownload(worker->process_id(), embedded_worker_id);
+}
+
+void EmbeddedWorkerTestHelper::SimulateWorkerReadyForInspection(
+ int embedded_worker_id) {
+ EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
+ ASSERT_TRUE(worker != NULL);
+ registry()->OnWorkerReadyForInspection(worker->process_id(),
+ embedded_worker_id);
+}
+
+void EmbeddedWorkerTestHelper::SimulateWorkerScriptLoaded(
int thread_id, int embedded_worker_id) {
EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
ASSERT_TRUE(worker != NULL);
+ registry()->OnWorkerScriptLoaded(
+ worker->process_id(), thread_id, embedded_worker_id);
+}
+
+void EmbeddedWorkerTestHelper::SimulateWorkerStarted(
+ int embedded_worker_id) {
+ EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
+ ASSERT_TRUE(worker != NULL);
registry()->OnWorkerStarted(
worker->process_id(),
- thread_id,
embedded_worker_id);
}
void EmbeddedWorkerTestHelper::SimulateWorkerStopped(
int embedded_worker_id) {
EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
- ASSERT_TRUE(worker != NULL);
- registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
+ if (worker != NULL)
+ registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id);
}
void EmbeddedWorkerTestHelper::SimulateSend(
base::MessageLoopProxy::current()->PostTask(
FROM_HERE,
base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker,
+ weak_factory_.GetWeakPtr(),
+ params.embedded_worker_id,
+ params.service_worker_version_id,
+ params.scope,
+ params.script_url,
+ params.pause_after_download));
+}
+
+void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub(
+ int embedded_worker_id) {
+ EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id);
+ ASSERT_TRUE(worker != NULL);
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&EmbeddedWorkerTestHelper::OnResumeAfterDownload,
weak_factory_.GetWeakPtr(),
- params.embedded_worker_id,
- params.service_worker_version_id,
- params.scope,
- params.script_url));
+ embedded_worker_id));
}
void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) {