Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: content/browser/service_worker/embedded_worker_test_helper.h

Issue 2227593002: ServiceWorker: Implement StartWorker by using mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added argument check and updated comment and BUILD.gn Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/embedded_worker_test_helper.h
diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h
index 88bf11bee43571ba4fb8a2c205c564bd3de553f9..c797939ea3591fa105ac131e435932d6d79002e6 100644
--- a/content/browser/service_worker/embedded_worker_test_helper.h
+++ b/content/browser/service_worker/embedded_worker_test_helper.h
@@ -15,9 +15,13 @@
#include "base/containers/hash_tables.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
+#include "content/common/service_worker/embedded_worker.mojom.h"
#include "ipc/ipc_listener.h"
#include "ipc/ipc_test_sink.h"
+#include "mojo/public/cpp/bindings/binding.h"
#include "services/shell/public/interfaces/interface_provider.mojom.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
@@ -60,6 +64,39 @@ struct ServiceWorkerFetchRequest;
class EmbeddedWorkerTestHelper : public IPC::Sender,
public IPC::Listener {
public:
+ class MockEmbeddedWorkerInstanceClient
+ : public mojom::EmbeddedWorkerInstanceClient {
+ public:
+ explicit MockEmbeddedWorkerInstanceClient(
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper);
+ ~MockEmbeddedWorkerInstanceClient() override;
+
+ static void Bind(const base::WeakPtr<EmbeddedWorkerTestHelper>& helper,
+ mojom::EmbeddedWorkerInstanceClientRequest request);
+
+ // MOCK_METHOD cannot be used for StartWorker because the mock method cannot
+ // take move-only objects directly.
falken 2016/09/07 05:01:42 I'd rather we avoid gmock if possible.
shimazu 2016/09/12 06:28:19 Done.
+ MOCK_METHOD1(MockStartWorker,
+ void(mojom::EmbeddedWorkerStartWorkerParams* params));
+
+ private:
+ // Implementation of mojo interface; they just calls a mock function.
+ void StartWorker(
+ mojom::EmbeddedWorkerStartWorkerParamsPtr params) override {
+ MockStartWorker(params.get());
+ }
+
+ // Default behavior which can be overridden by using mock interfaces.
+ void DefaultStartWorker(mojom::EmbeddedWorkerStartWorkerParams* params);
+
+ base::WeakPtr<EmbeddedWorkerTestHelper> helper_;
+ mojo::Binding<mojom::EmbeddedWorkerInstanceClient> binding_;
+
+ base::Optional<int> embedded_worker_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockEmbeddedWorkerInstanceClient);
+ };
+
// If |user_data_directory| is empty, the context makes storage stuff in
// memory.
explicit EmbeddedWorkerTestHelper(const base::FilePath& user_data_directory);
@@ -80,6 +117,15 @@ class EmbeddedWorkerTestHelper : public IPC::Sender,
// Inner IPC sink for script context messages sent via EmbeddedWorker.
IPC::TestSink* inner_ipc_sink() { return &inner_sink_; }
+ // Creates mock instances before IPCs are fired to check IPCs are called as
+ // your expectation.
+ void PrepareMockInstanceClients(int number_of_clients);
+
+ std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>*
+ mock_instance_clients() {
+ return &mock_instance_clients_;
+ }
+
ServiceWorkerContextCore* context();
ServiceWorkerContextWrapper* context_wrapper() { return wrapper_.get(); }
void ShutdownContext();
@@ -95,9 +141,8 @@ class EmbeddedWorkerTestHelper : public IPC::Sender,
return embedded_worker_id_service_worker_version_id_map_;
}
- // Only used for tests that force creating a new render process. There is no
- // corresponding MockRenderProcessHost.
- int new_render_process_id() const { return mock_render_process_id_ + 1; }
+ // Only used for tests that force creating a new render process.
+ int new_render_process_id() const { return new_mock_render_process_id_; }
TestBrowserContext* browser_context() { return browser_context_.get(); }
@@ -181,16 +226,24 @@ class EmbeddedWorkerTestHelper : public IPC::Sender,
std::unique_ptr<TestBrowserContext> browser_context_;
std::unique_ptr<MockRenderProcessHost> render_process_host_;
+ std::unique_ptr<MockRenderProcessHost> new_render_process_host_;
scoped_refptr<ServiceWorkerContextWrapper> wrapper_;
IPC::TestSink sink_;
IPC::TestSink inner_sink_;
+ std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>
+ mock_instance_clients_;
+ size_t mock_instance_clients_next_;
+
int next_thread_id_;
int mock_render_process_id_;
+ int new_mock_render_process_id_;
std::unique_ptr<shell::InterfaceRegistry> render_process_interface_registry_;
+ std::unique_ptr<shell::InterfaceRegistry>
+ new_render_process_interface_registry_;
std::map<int, int64_t> embedded_worker_id_service_worker_version_id_map_;

Powered by Google App Engine
This is Rietveld 408576698