| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "public/web/WebEmbeddedWorker.h" | 5 #include "public/web/WebEmbeddedWorker.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include "platform/testing/URLTestHelpers.h" | 8 #include "platform/testing/URLTestHelpers.h" |
| 9 #include "platform/testing/UnitTestHelpers.h" | 9 #include "platform/testing/UnitTestHelpers.h" |
| 10 #include "public/platform/Platform.h" | 10 #include "public/platform/Platform.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 namespace blink { | 21 namespace blink { |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 class MockServiceWorkerContextClient : public WebServiceWorkerContextClient { | 24 class MockServiceWorkerContextClient : public WebServiceWorkerContextClient { |
| 25 public: | 25 public: |
| 26 MockServiceWorkerContextClient() : m_hasAssociatedRegistration(true) {} | 26 MockServiceWorkerContextClient() : m_hasAssociatedRegistration(true) {} |
| 27 ~MockServiceWorkerContextClient() override {} | 27 ~MockServiceWorkerContextClient() override {} |
| 28 MOCK_METHOD0(workerReadyForInspection, void()); | 28 MOCK_METHOD0(workerReadyForInspection, void()); |
| 29 MOCK_METHOD0(workerContextFailedToStart, void()); | 29 MOCK_METHOD0(workerContextFailedToStart, void()); |
| 30 MOCK_METHOD0(workerScriptLoaded, void()); | 30 MOCK_METHOD0(workerScriptLoaded, void()); |
| 31 MOCK_METHOD1(createServiceWorkerNetworkProvider, | 31 MOCK_METHOD0(createServiceWorkerNetworkProvider, |
| 32 WebServiceWorkerNetworkProvider*(WebDataSource*)); | 32 WebServiceWorkerNetworkProvider*()); |
| 33 MOCK_METHOD0(createServiceWorkerProvider, WebServiceWorkerProvider*()); | 33 MOCK_METHOD0(createServiceWorkerProvider, WebServiceWorkerProvider*()); |
| 34 bool hasAssociatedRegistration() override { | 34 bool hasAssociatedRegistration() override { |
| 35 return m_hasAssociatedRegistration; | 35 return m_hasAssociatedRegistration; |
| 36 } | 36 } |
| 37 void setHasAssociatedRegistration(bool hasAssociatedRegistration) { | 37 void setHasAssociatedRegistration(bool hasAssociatedRegistration) { |
| 38 m_hasAssociatedRegistration = hasAssociatedRegistration; | 38 m_hasAssociatedRegistration = hasAssociatedRegistration; |
| 39 } | 39 } |
| 40 void getClient(const WebString&, | 40 void getClient(const WebString&, |
| 41 std::unique_ptr<WebServiceWorkerClientCallbacks>) override { | 41 std::unique_ptr<WebServiceWorkerClientCallbacks>) override { |
| 42 NOTREACHED(); | 42 NOTREACHED(); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 m_worker->terminateWorkerContext(); | 136 m_worker->terminateWorkerContext(); |
| 137 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 137 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 138 } | 138 } |
| 139 | 139 |
| 140 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhileLoadingScript) { | 140 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhileLoadingScript) { |
| 141 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 141 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 142 m_worker->startWorkerContext(m_startData); | 142 m_worker->startWorkerContext(m_startData); |
| 143 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 143 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 144 | 144 |
| 145 // Load the shadow page. | 145 // Load the shadow page. |
| 146 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 146 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 147 .WillOnce(::testing::Return(nullptr)); | 147 .WillOnce(::testing::Return(nullptr)); |
| 148 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 148 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 149 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 149 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 150 | 150 |
| 151 // Terminate before loading the script. | 151 // Terminate before loading the script. |
| 152 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); | 152 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); |
| 153 m_worker->terminateWorkerContext(); | 153 m_worker->terminateWorkerContext(); |
| 154 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 154 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 155 } | 155 } |
| 156 | 156 |
| 157 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhilePausedAfterDownload) { | 157 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhilePausedAfterDownload) { |
| 158 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 158 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 159 m_startData.pauseAfterDownloadMode = | 159 m_startData.pauseAfterDownloadMode = |
| 160 WebEmbeddedWorkerStartData::PauseAfterDownload; | 160 WebEmbeddedWorkerStartData::PauseAfterDownload; |
| 161 m_worker->startWorkerContext(m_startData); | 161 m_worker->startWorkerContext(m_startData); |
| 162 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 162 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 163 | 163 |
| 164 // Load the shadow page. | 164 // Load the shadow page. |
| 165 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 165 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 166 .WillOnce(::testing::Return(nullptr)); | 166 .WillOnce(::testing::Return(nullptr)); |
| 167 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 167 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 168 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 168 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 169 | 169 |
| 170 // Load the script. | 170 // Load the script. |
| 171 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); | 171 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); |
| 172 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); | 172 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); |
| 173 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 173 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 174 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 174 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 175 | 175 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 191 error.domain = "WebEmbeddedWorkerImplTest"; | 191 error.domain = "WebEmbeddedWorkerImplTest"; |
| 192 Platform::current()->getURLLoaderMockFactory()->registerErrorURL( | 192 Platform::current()->getURLLoaderMockFactory()->registerErrorURL( |
| 193 scriptURL, response, error); | 193 scriptURL, response, error); |
| 194 m_startData.scriptURL = scriptURL; | 194 m_startData.scriptURL = scriptURL; |
| 195 | 195 |
| 196 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 196 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 197 m_worker->startWorkerContext(m_startData); | 197 m_worker->startWorkerContext(m_startData); |
| 198 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 198 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 199 | 199 |
| 200 // Load the shadow page. | 200 // Load the shadow page. |
| 201 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 201 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 202 .WillOnce(::testing::Return(nullptr)); | 202 .WillOnce(::testing::Return(nullptr)); |
| 203 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 203 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 204 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 204 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 205 | 205 |
| 206 // Load the script. | 206 // Load the script. |
| 207 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(0); | 207 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(0); |
| 208 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); | 208 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); |
| 209 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); | 209 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); |
| 210 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 210 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 211 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 211 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 212 } | 212 } |
| 213 | 213 |
| 214 TEST_F(WebEmbeddedWorkerImplTest, NoRegistration) { | 214 TEST_F(WebEmbeddedWorkerImplTest, NoRegistration) { |
| 215 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 215 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 216 m_startData.pauseAfterDownloadMode = | 216 m_startData.pauseAfterDownloadMode = |
| 217 WebEmbeddedWorkerStartData::PauseAfterDownload; | 217 WebEmbeddedWorkerStartData::PauseAfterDownload; |
| 218 m_worker->startWorkerContext(m_startData); | 218 m_worker->startWorkerContext(m_startData); |
| 219 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 219 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 220 | 220 |
| 221 // Load the shadow page. | 221 // Load the shadow page. |
| 222 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 222 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 223 .WillOnce(::testing::Return(nullptr)); | 223 .WillOnce(::testing::Return(nullptr)); |
| 224 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 224 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 225 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 225 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 226 | 226 |
| 227 // Load the script. | 227 // Load the script. |
| 228 m_mockClient->setHasAssociatedRegistration(false); | 228 m_mockClient->setHasAssociatedRegistration(false); |
| 229 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(0); | 229 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(0); |
| 230 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); | 230 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); |
| 231 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); | 231 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); |
| 232 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 232 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 233 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 233 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 234 } | 234 } |
| 235 | 235 |
| 236 // The running worker is detected as a memory leak. crbug.com/586897 | 236 // The running worker is detected as a memory leak. crbug.com/586897 |
| 237 #if defined(ADDRESS_SANITIZER) | 237 #if defined(ADDRESS_SANITIZER) |
| 238 #define MAYBE_DontPauseAfterDownload DISABLED_DontPauseAfterDownload | 238 #define MAYBE_DontPauseAfterDownload DISABLED_DontPauseAfterDownload |
| 239 #else | 239 #else |
| 240 #define MAYBE_DontPauseAfterDownload DontPauseAfterDownload | 240 #define MAYBE_DontPauseAfterDownload DontPauseAfterDownload |
| 241 #endif | 241 #endif |
| 242 | 242 |
| 243 TEST_F(WebEmbeddedWorkerImplTest, MAYBE_DontPauseAfterDownload) { | 243 TEST_F(WebEmbeddedWorkerImplTest, MAYBE_DontPauseAfterDownload) { |
| 244 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 244 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 245 m_worker->startWorkerContext(m_startData); | 245 m_worker->startWorkerContext(m_startData); |
| 246 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 246 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 247 | 247 |
| 248 // Load the shadow page. | 248 // Load the shadow page. |
| 249 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 249 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 250 .WillOnce(::testing::Return(nullptr)); | 250 .WillOnce(::testing::Return(nullptr)); |
| 251 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 251 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 252 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 252 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 253 | 253 |
| 254 // Load the script. | 254 // Load the script. |
| 255 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); | 255 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); |
| 256 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()) | 256 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()) |
| 257 .WillOnce(::testing::Return(nullptr)); | 257 .WillOnce(::testing::Return(nullptr)); |
| 258 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 258 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 259 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 259 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 260 } | 260 } |
| 261 | 261 |
| 262 // The running worker is detected as a memory leak. crbug.com/586897 | 262 // The running worker is detected as a memory leak. crbug.com/586897 |
| 263 #if defined(ADDRESS_SANITIZER) | 263 #if defined(ADDRESS_SANITIZER) |
| 264 #define MAYBE_PauseAfterDownload DISABLED_PauseAfterDownload | 264 #define MAYBE_PauseAfterDownload DISABLED_PauseAfterDownload |
| 265 #else | 265 #else |
| 266 #define MAYBE_PauseAfterDownload PauseAfterDownload | 266 #define MAYBE_PauseAfterDownload PauseAfterDownload |
| 267 #endif | 267 #endif |
| 268 | 268 |
| 269 TEST_F(WebEmbeddedWorkerImplTest, MAYBE_PauseAfterDownload) { | 269 TEST_F(WebEmbeddedWorkerImplTest, MAYBE_PauseAfterDownload) { |
| 270 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); | 270 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); |
| 271 m_startData.pauseAfterDownloadMode = | 271 m_startData.pauseAfterDownloadMode = |
| 272 WebEmbeddedWorkerStartData::PauseAfterDownload; | 272 WebEmbeddedWorkerStartData::PauseAfterDownload; |
| 273 m_worker->startWorkerContext(m_startData); | 273 m_worker->startWorkerContext(m_startData); |
| 274 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 274 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 275 | 275 |
| 276 // Load the shadow page. | 276 // Load the shadow page. |
| 277 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) | 277 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider()) |
| 278 .WillOnce(::testing::Return(nullptr)); | 278 .WillOnce(::testing::Return(nullptr)); |
| 279 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 279 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 280 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 280 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 281 | 281 |
| 282 // Load the script. | 282 // Load the script. |
| 283 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); | 283 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).Times(1); |
| 284 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); | 284 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()).Times(0); |
| 285 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 285 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 286 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 286 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 287 | 287 |
| 288 // Resume after download. | 288 // Resume after download. |
| 289 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()) | 289 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider()) |
| 290 .WillOnce(::testing::Return(nullptr)); | 290 .WillOnce(::testing::Return(nullptr)); |
| 291 m_worker->resumeAfterDownload(); | 291 m_worker->resumeAfterDownload(); |
| 292 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); | 292 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); |
| 293 } | 293 } |
| 294 | 294 |
| 295 } // namespace blink | 295 } // namespace blink |
| OLD | NEW |