Index: content/browser/service_worker/embedded_worker_test_helper.cc |
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc |
index 6fa62d051e2a1a5f684bf18eae8b42702a740cd2..0295ee89057ed9c42ff5ac6235e32c6deeb191c1 100644 |
--- a/content/browser/service_worker/embedded_worker_test_helper.cc |
+++ b/content/browser/service_worker/embedded_worker_test_helper.cc |
@@ -16,12 +16,19 @@ |
#include "content/browser/service_worker/embedded_worker_registry.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
+#include "content/common/service_worker/embedded_worker.mojom.h" |
#include "content/common/service_worker/embedded_worker_messages.h" |
#include "content/common/service_worker/service_worker_messages.h" |
+#include "content/public/test/mock_render_process_host.h" |
+#include "content/public/test/test_browser_context.h" |
+#include "mojo/common/url_type_converters.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" |
namespace content { |
+namespace { |
+ |
class MockMessagePortMessageFilter : public MessagePortMessageFilter { |
public: |
MockMessagePortMessageFilter() |
@@ -39,6 +46,72 @@ class MockMessagePortMessageFilter : public MessagePortMessageFilter { |
base::AtomicSequenceNumber next_routing_id_; |
ScopedVector<IPC::Message> message_queue_; |
}; |
+} |
+ |
+class MockEmbeddedWorker : public EmbeddedWorker { |
+ public: |
+ static void Create(base::WeakPtr<EmbeddedWorkerTestHelper> helper, |
+ mojo::InterfaceRequest<EmbeddedWorker> request) { |
+ new MockEmbeddedWorker(helper, request.Pass()); |
+ } |
+ ~MockEmbeddedWorker() override { |
+ if (!helper_ || embedded_worker_id_ == -1) |
+ return; |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnStopWorker, helper_, |
+ embedded_worker_id_)); |
+ } |
+ |
+ void Initialize(EmbeddedWorkerStartWorkerParamsPtr params) override { |
+ if (!helper_) |
+ return; |
+ ASSERT_EQ(embedded_worker_id_, -1); |
+ embedded_worker_id_ = params->embedded_worker_id; |
+ EmbeddedWorkerInstance* worker = |
+ helper_->registry()->GetWorker(params->embedded_worker_id); |
+ ASSERT_TRUE(worker != NULL); |
+ EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status()); |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, helper_, |
+ params->embedded_worker_id, |
+ params->service_worker_version_id, params->scope.To<GURL>(), |
+ params->script_url.To<GURL>())); |
+ } |
+ |
+ private: |
+ MockEmbeddedWorker(base::WeakPtr<EmbeddedWorkerTestHelper> helper, |
+ mojo::InterfaceRequest<EmbeddedWorker> request) |
+ : binding_(this, request.Pass()), helper_(helper) {} |
+ |
+ mojo::StrongBinding<EmbeddedWorker> binding_; |
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper_; |
+ int embedded_worker_id_ = -1; |
+}; |
+ |
+EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
+ const base::FilePath& user_data_directory) |
+ : wrapper_(new ServiceWorkerContextWrapper(NULL)), |
+ next_thread_id_(0), |
+ browser_context_(new TestBrowserContext), |
+ render_process_host_(new MockRenderProcessHost(browser_context_.get())), |
+ weak_factory_(this) { |
+ mock_render_process_id_ = render_process_host_->GetID(); |
+ service_registry_.ServiceRegistry::AddService( |
+ base::Bind(&MockEmbeddedWorker::Create, weak_factory_.GetWeakPtr())); |
+ mojo::ServiceProviderPtr services; |
+ service_registry_.Bind(mojo::GetProxy(&services)); |
+ static_cast<ServiceRegistryImpl*>(render_process_host_->GetServiceRegistry()) |
+ ->BindRemoteServiceProvider(services.Pass()); |
+ scoped_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( |
+ new MockServiceWorkerDatabaseTaskManager( |
+ base::ThreadTaskRunnerHandle::Get())); |
+ wrapper_->InitInternal(user_data_directory, database_task_manager.Pass(), |
+ base::ThreadTaskRunnerHandle::Get(), NULL, NULL); |
+ wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id_); |
+ registry()->AddChildProcessSender(mock_render_process_id_, this, |
+ NewMessagePortMessageFilter()); |
+} |
EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |
const base::FilePath& user_data_directory, |
@@ -83,8 +156,8 @@ bool EmbeddedWorkerTestHelper::Send(IPC::Message* message) { |
bool EmbeddedWorkerTestHelper::OnMessageReceived(const IPC::Message& message) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerTestHelper, message) |
- IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorkerStub) |
- IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub) |
+ // IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorkerStub) |
+ // IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorkerStub) |
IPC_MESSAGE_HANDLER(EmbeddedWorkerContextMsg_MessageToWorker, |
OnMessageToWorkerStub) |
IPC_MESSAGE_UNHANDLED(handled = false) |
@@ -254,16 +327,16 @@ void EmbeddedWorkerTestHelper::SimulateSend( |
void EmbeddedWorkerTestHelper::OnStartWorkerStub( |
const EmbeddedWorkerMsg_StartWorker_Params& params) { |
- EmbeddedWorkerInstance* worker = |
- registry()->GetWorker(params.embedded_worker_id); |
- ASSERT_TRUE(worker != NULL); |
- EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status()); |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, |
- base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, |
- weak_factory_.GetWeakPtr(), params.embedded_worker_id, |
- params.service_worker_version_id, params.scope, |
- params.script_url)); |
+ /* EmbeddedWorkerInstance* worker = |
+ registry()->GetWorker(params.embedded_worker_id); |
+ ASSERT_TRUE(worker != NULL); |
+ EXPECT_EQ(EmbeddedWorkerInstance::STARTING, worker->status()); |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, |
+ weak_factory_.GetWeakPtr(), params.embedded_worker_id, |
+ params.service_worker_version_id, params.scope, |
+ params.script_url));*/ |
} |
void EmbeddedWorkerTestHelper::OnStopWorkerStub(int embedded_worker_id) { |