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

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host_unittest.cc

Issue 140743012: Start EmbeddedWorker during registration - take 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update to ToT Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "content/browser/browser_thread_impl.h" 10 #include "content/browser/browser_thread_impl.h"
11 #include "content/browser/service_worker/embedded_worker_instance.h"
12 #include "content/browser/service_worker/embedded_worker_registry.h"
13 #include "content/browser/service_worker/embedded_worker_test_helper.h"
11 #include "content/browser/service_worker/service_worker_context_core.h" 14 #include "content/browser/service_worker/service_worker_context_core.h"
12 #include "content/browser/service_worker/service_worker_context_wrapper.h" 15 #include "content/browser/service_worker/service_worker_context_wrapper.h"
16 #include "content/common/service_worker/embedded_worker_messages.h"
13 #include "content/common/service_worker/service_worker_messages.h" 17 #include "content/common/service_worker/service_worker_messages.h"
14 #include "content/public/common/content_switches.h" 18 #include "content/public/common/content_switches.h"
15 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
17 21
18 namespace content { 22 namespace content {
19 23
24 static const int kRenderProcessId = 1;
25
20 class ServiceWorkerDispatcherHostTest : public testing::Test { 26 class ServiceWorkerDispatcherHostTest : public testing::Test {
21 protected: 27 protected:
22 ServiceWorkerDispatcherHostTest() 28 ServiceWorkerDispatcherHostTest()
23 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} 29 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
24 30
25 virtual void SetUp() { 31 virtual void SetUp() {
26 context_wrapper_ = new ServiceWorkerContextWrapper; 32 context_wrapper_ = new ServiceWorkerContextWrapper;
27 context_wrapper_->Init(base::FilePath(), NULL); 33 context_wrapper_->Init(base::FilePath(), NULL);
34 helper_.reset(new EmbeddedWorkerTestHelper(context()));
35
36 helper_->SimulateCreateWorker(kRenderProcessId);
28 } 37 }
29 38
30 virtual void TearDown() { 39 virtual void TearDown() {
40 helper_.reset();
31 if (context_wrapper_) { 41 if (context_wrapper_) {
32 context_wrapper_->Shutdown(); 42 context_wrapper_->Shutdown();
33 context_wrapper_ = NULL; 43 context_wrapper_ = NULL;
34 } 44 }
35 } 45 }
36 46
37 ServiceWorkerContextCore* context() { return context_wrapper_->context(); } 47 ServiceWorkerContextCore* context() { return context_wrapper_->context(); }
38 48
39 TestBrowserThreadBundle browser_thread_bundle_; 49 TestBrowserThreadBundle browser_thread_bundle_;
40 scoped_refptr<ServiceWorkerContextWrapper> context_wrapper_; 50 scoped_refptr<ServiceWorkerContextWrapper> context_wrapper_;
51 scoped_ptr<EmbeddedWorkerTestHelper> helper_;
41 }; 52 };
42 53
43 static const int kRenderProcessId = 1;
44 54
45 class TestingServiceWorkerDispatcherHost : public ServiceWorkerDispatcherHost { 55 class TestingServiceWorkerDispatcherHost : public ServiceWorkerDispatcherHost {
46 public: 56 public:
47 TestingServiceWorkerDispatcherHost( 57 TestingServiceWorkerDispatcherHost(
48 int process_id, 58 int process_id,
49 ServiceWorkerContextWrapper* context_wrapper) 59 ServiceWorkerContextWrapper* context_wrapper,
60 EmbeddedWorkerTestHelper* helper)
50 : ServiceWorkerDispatcherHost(process_id), 61 : ServiceWorkerDispatcherHost(process_id),
51 bad_messages_received_count_(0) { 62 bad_messages_received_count_(0),
63 helper_(helper) {
52 Init(context_wrapper); 64 Init(context_wrapper);
53 } 65 }
54 66
55 virtual bool Send(IPC::Message* message) OVERRIDE { 67 virtual bool Send(IPC::Message* message) OVERRIDE {
56 sent_messages_.push_back(message); 68 return helper_->Send(message);
57 return true;
58 } 69 }
59 70
71 IPC::TestSink* ipc_sink() { return helper_->ipc_sink(); }
72
60 virtual void BadMessageReceived() OVERRIDE { 73 virtual void BadMessageReceived() OVERRIDE {
61 ++bad_messages_received_count_; 74 ++bad_messages_received_count_;
62 } 75 }
63 76
64 ScopedVector<IPC::Message> sent_messages_;
65 int bad_messages_received_count_; 77 int bad_messages_received_count_;
66 78
67 protected: 79 protected:
80 EmbeddedWorkerTestHelper* helper_;
68 virtual ~TestingServiceWorkerDispatcherHost() {} 81 virtual ~TestingServiceWorkerDispatcherHost() {}
69 }; 82 };
70 83
71 TEST_F(ServiceWorkerDispatcherHostTest, DisabledCausesError) { 84 TEST_F(ServiceWorkerDispatcherHostTest, DisabledCausesError) {
72 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch( 85 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch(
73 switches::kEnableServiceWorker)); 86 switches::kEnableServiceWorker));
74 87
75 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host = 88 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host =
76 new TestingServiceWorkerDispatcherHost(kRenderProcessId, 89 new TestingServiceWorkerDispatcherHost(
77 context_wrapper_.get()); 90 kRenderProcessId, context_wrapper_.get(), helper_.get());
78 91
79 bool handled; 92 bool handled;
80 dispatcher_host->OnMessageReceived( 93 dispatcher_host->OnMessageReceived(
81 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()), 94 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()),
82 &handled); 95 &handled);
83 EXPECT_TRUE(handled); 96 EXPECT_TRUE(handled);
84 97
85 // TODO(alecflett): Pump the message loop when this becomes async. 98 // TODO(alecflett): Pump the message loop when this becomes async.
86 ASSERT_EQ(1UL, dispatcher_host->sent_messages_.size()); 99 ASSERT_EQ(1UL, dispatcher_host->ipc_sink()->message_count());
87 EXPECT_EQ( 100 EXPECT_TRUE(dispatcher_host->ipc_sink()->GetUniqueMessageMatching(
88 static_cast<uint32>(ServiceWorkerMsg_ServiceWorkerRegistrationError::ID), 101 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID));
89 dispatcher_host->sent_messages_[0]->type());
90 } 102 }
91 103
92 TEST_F(ServiceWorkerDispatcherHostTest, Enabled) { 104 TEST_F(ServiceWorkerDispatcherHostTest, Enabled) {
93 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch( 105 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch(
94 switches::kEnableServiceWorker)); 106 switches::kEnableServiceWorker));
95 CommandLine::ForCurrentProcess()->AppendSwitch( 107 CommandLine::ForCurrentProcess()->AppendSwitch(
96 switches::kEnableServiceWorker); 108 switches::kEnableServiceWorker);
97 109
98 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host = 110 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host =
99 new TestingServiceWorkerDispatcherHost(kRenderProcessId, 111 new TestingServiceWorkerDispatcherHost(
100 context_wrapper_.get()); 112 kRenderProcessId, context_wrapper_.get(), helper_.get());
101 113
102 bool handled; 114 bool handled;
103 dispatcher_host->OnMessageReceived( 115 dispatcher_host->OnMessageReceived(
104 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()), 116 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()),
105 &handled); 117 &handled);
106 EXPECT_TRUE(handled); 118 EXPECT_TRUE(handled);
107 base::RunLoop().RunUntilIdle(); 119 base::RunLoop().RunUntilIdle();
108 120
109 // TODO(alecflett): Pump the message loop when this becomes async. 121 // TODO(alecflett): Pump the message loop when this becomes async.
110 ASSERT_EQ(1UL, dispatcher_host->sent_messages_.size()); 122 ASSERT_EQ(2UL, dispatcher_host->ipc_sink()->message_count());
111 EXPECT_EQ(static_cast<uint32>(ServiceWorkerMsg_ServiceWorkerRegistered::ID), 123 EXPECT_TRUE(dispatcher_host->ipc_sink()->GetUniqueMessageMatching(
112 dispatcher_host->sent_messages_[0]->type()); 124 EmbeddedWorkerMsg_StartWorker::ID));
125 EXPECT_TRUE(dispatcher_host->ipc_sink()->GetUniqueMessageMatching(
126 ServiceWorkerMsg_ServiceWorkerRegistered::ID));
113 } 127 }
114 128
115 TEST_F(ServiceWorkerDispatcherHostTest, EarlyContextDeletion) { 129 TEST_F(ServiceWorkerDispatcherHostTest, EarlyContextDeletion) {
116 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch( 130 DCHECK(!CommandLine::ForCurrentProcess()->HasSwitch(
117 switches::kEnableServiceWorker)); 131 switches::kEnableServiceWorker));
118 CommandLine::ForCurrentProcess()->AppendSwitch( 132 CommandLine::ForCurrentProcess()->AppendSwitch(
119 switches::kEnableServiceWorker); 133 switches::kEnableServiceWorker);
120 134
121 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host = 135 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host =
122 new TestingServiceWorkerDispatcherHost(kRenderProcessId, 136 new TestingServiceWorkerDispatcherHost(
123 context_wrapper_.get()); 137 kRenderProcessId, context_wrapper_.get(), helper_.get());
124 138
125 context_wrapper_->Shutdown(); 139 context_wrapper_->Shutdown();
126 context_wrapper_ = NULL; 140 context_wrapper_ = NULL;
127 141
128 bool handled; 142 bool handled;
129 dispatcher_host->OnMessageReceived( 143 dispatcher_host->OnMessageReceived(
130 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()), 144 ServiceWorkerHostMsg_RegisterServiceWorker(-1, -1, GURL(), GURL()),
131 &handled); 145 &handled);
132 EXPECT_TRUE(handled); 146 EXPECT_TRUE(handled);
133 147
134 // TODO(alecflett): Pump the message loop when this becomes async. 148 // TODO(alecflett): Pump the message loop when this becomes async.
135 ASSERT_EQ(1UL, dispatcher_host->sent_messages_.size()); 149 ASSERT_EQ(1UL, dispatcher_host->ipc_sink()->message_count());
136 EXPECT_EQ( 150 EXPECT_TRUE(dispatcher_host->ipc_sink()->GetUniqueMessageMatching(
137 static_cast<uint32>(ServiceWorkerMsg_ServiceWorkerRegistrationError::ID), 151 ServiceWorkerMsg_ServiceWorkerRegistrationError::ID));
138 dispatcher_host->sent_messages_[0]->type());
139 } 152 }
140 153
141 TEST_F(ServiceWorkerDispatcherHostTest, ProviderCreatedAndDestroyed) { 154 TEST_F(ServiceWorkerDispatcherHostTest, ProviderCreatedAndDestroyed) {
142 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host = 155 scoped_refptr<TestingServiceWorkerDispatcherHost> dispatcher_host =
143 new TestingServiceWorkerDispatcherHost(kRenderProcessId, 156 new TestingServiceWorkerDispatcherHost(
144 context_wrapper_.get()); 157 kRenderProcessId, context_wrapper_.get(), helper_.get());
145 158
146 const int kProviderId = 1001; // Test with a value != kRenderProcessId. 159 const int kProviderId = 1001; // Test with a value != kRenderProcessId.
147 160
148 bool handled = false; 161 bool handled = false;
149 dispatcher_host->OnMessageReceived( 162 dispatcher_host->OnMessageReceived(
150 ServiceWorkerHostMsg_ProviderCreated(kProviderId), 163 ServiceWorkerHostMsg_ProviderCreated(kProviderId),
151 &handled); 164 &handled);
152 EXPECT_TRUE(handled); 165 EXPECT_TRUE(handled);
153 EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId)); 166 EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId));
154 167
(...skipping 26 matching lines...) Expand all
181 ServiceWorkerHostMsg_ProviderCreated(kProviderId), 194 ServiceWorkerHostMsg_ProviderCreated(kProviderId),
182 &handled); 195 &handled);
183 EXPECT_TRUE(handled); 196 EXPECT_TRUE(handled);
184 EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId)); 197 EXPECT_TRUE(context()->GetProviderHost(kRenderProcessId, kProviderId));
185 EXPECT_TRUE(dispatcher_host->HasOneRef()); 198 EXPECT_TRUE(dispatcher_host->HasOneRef());
186 dispatcher_host = NULL; 199 dispatcher_host = NULL;
187 EXPECT_FALSE(context()->GetProviderHost(kRenderProcessId, kProviderId)); 200 EXPECT_FALSE(context()->GetProviderHost(kRenderProcessId, kProviderId));
188 } 201 }
189 202
190 } // namespace content 203 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698