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

Side by Side Diff: third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp

Issue 1675613002: service worker: use 200 OK for update requests even in the no update case (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
OLDNEW
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 "platform/testing/URLTestHelpers.h" 7 #include "platform/testing/URLTestHelpers.h"
8 #include "platform/testing/UnitTestHelpers.h" 8 #include "platform/testing/UnitTestHelpers.h"
9 #include "public/platform/Platform.h" 9 #include "public/platform/Platform.h"
10 #include "public/platform/WebURLResponse.h" 10 #include "public/platform/WebURLResponse.h"
11 #include "public/platform/WebUnitTestSupport.h" 11 #include "public/platform/WebUnitTestSupport.h"
12 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
12 #include "public/web/WebEmbeddedWorkerStartData.h" 13 #include "public/web/WebEmbeddedWorkerStartData.h"
13 #include "public/web/WebSettings.h" 14 #include "public/web/WebSettings.h"
14 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h" 15 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h"
15 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace blink { 19 namespace blink {
19 namespace { 20 namespace {
20 21
21 class MockServiceWorkerContextClient 22 class MockServiceWorkerContextClient
22 : public WebServiceWorkerContextClient { 23 : public WebServiceWorkerContextClient {
23 public: 24 public:
24 MockServiceWorkerContextClient() { } 25 MockServiceWorkerContextClient() { }
25 ~MockServiceWorkerContextClient() override { } 26 ~MockServiceWorkerContextClient() override { }
26 MOCK_METHOD0(workerReadyForInspection, void()); 27 MOCK_METHOD0(workerReadyForInspection, void());
27 MOCK_METHOD0(workerContextFailedToStart, void()); 28 MOCK_METHOD0(workerContextFailedToStart, void());
29 MOCK_METHOD0(workerScriptLoaded, void());
28 MOCK_METHOD1(createServiceWorkerNetworkProvider, WebServiceWorkerNetworkProv ider*(WebDataSource*)); 30 MOCK_METHOD1(createServiceWorkerNetworkProvider, WebServiceWorkerNetworkProv ider*(WebDataSource*));
31 MOCK_METHOD0(createServiceWorkerProvider, WebServiceWorkerProvider*());
29 }; 32 };
30 33
31 class WebEmbeddedWorkerImplFailureTest : public ::testing::Test { 34 class WebEmbeddedWorkerImplTest : public ::testing::Test {
32 protected: 35 protected:
33 void SetUp() override 36 void SetUp() override
34 { 37 {
35 m_mockClient = new MockServiceWorkerContextClient(); 38 m_mockClient = new MockServiceWorkerContextClient();
36 m_worker = adoptPtr(WebEmbeddedWorker::create(m_mockClient, nullptr)); 39 m_worker = adoptPtr(WebEmbeddedWorker::create(m_mockClient, nullptr));
37 40
38 WebURL invalidScriptURL = URLTestHelpers::toKURL("https://www.example.co m/sw.js"); 41 m_validScriptURL = URLTestHelpers::toKURL("https://www.example.com/sw.js ");
42 WebURLResponse response;
43 response.initialize();
44 response.setMIMEType("text/html");
45 response.setHTTPStatusCode(200);
46 Platform::current()->unitTestSupport()->registerMockedURL(m_validScriptU RL, response, "");
47
48 m_invalidScriptURL = URLTestHelpers::toKURL("https://www.example.com/sw- 404.js");
39 WebURLResponse errorResponse; 49 WebURLResponse errorResponse;
40 errorResponse.initialize(); 50 errorResponse.initialize();
41 errorResponse.setMIMEType("text/html"); 51 errorResponse.setMIMEType("text/html");
42 errorResponse.setHTTPStatusCode(404); 52 errorResponse.setHTTPStatusCode(404);
43 WebURLError error; 53 WebURLError error;
44 error.reason = 1010; 54 error.reason = 1010;
45 error.domain = "WebEmbeddedWorkerImplTest"; 55 error.domain = "WebEmbeddedWorkerImplTest";
46 Platform::current()->unitTestSupport()->registerMockedErrorURL(invalidSc riptURL, errorResponse, error); 56 Platform::current()->unitTestSupport()->registerMockedErrorURL(m_invalid ScriptURL, errorResponse, error);
47 57
48 m_startData.scriptURL = invalidScriptURL; 58 m_startData.scriptURL = m_validScriptURL;
49 m_startData.userAgent = WebString("dummy user agent"); 59 m_startData.userAgent = WebString("dummy user agent");
60 m_startData.pauseAfterDownloadMode = WebEmbeddedWorkerStartData::DontPau seAfterDownload;
50 m_startData.waitForDebuggerMode = WebEmbeddedWorkerStartData::DontWaitFo rDebugger; 61 m_startData.waitForDebuggerMode = WebEmbeddedWorkerStartData::DontWaitFo rDebugger;
51 m_startData.v8CacheOptions = WebSettings::V8CacheOptionsDefault; 62 m_startData.v8CacheOptions = WebSettings::V8CacheOptionsDefault;
52 } 63 }
53 64
54 void TearDown() override 65 void TearDown() override
55 { 66 {
56 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); 67 Platform::current()->unitTestSupport()->unregisterAllMockedURLs();
57 } 68 }
58 69
70 WebURL m_validScriptURL;
71 WebURL m_invalidScriptURL;
59 WebEmbeddedWorkerStartData m_startData; 72 WebEmbeddedWorkerStartData m_startData;
60 MockServiceWorkerContextClient* m_mockClient; 73 MockServiceWorkerContextClient* m_mockClient;
61 OwnPtr<WebEmbeddedWorker> m_worker; 74 OwnPtr<WebEmbeddedWorker> m_worker;
62 }; 75 };
63 76
64 } // namespace 77 } // namespace
65 78
66 TEST_F(WebEmbeddedWorkerImplFailureTest, TerminateSoonAfterStart) 79 TEST_F(WebEmbeddedWorkerImplTest, TerminateSoonAfterStart)
67 { 80 {
68 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); 81 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1);
82 m_startData.scriptURL = m_invalidScriptURL;
69 m_worker->startWorkerContext(m_startData); 83 m_worker->startWorkerContext(m_startData);
70 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 84 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
71 85
72 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); 86 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1);
73 m_worker->terminateWorkerContext(); 87 m_worker->terminateWorkerContext();
74 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 88 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
75 } 89 }
76 90
77 TEST_F(WebEmbeddedWorkerImplFailureTest, TerminateWhileWaitingForDebugger) 91 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhileWaitingForDebugger)
78 { 92 {
79 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); 93 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1);
80 m_startData.waitForDebuggerMode = WebEmbeddedWorkerStartData::WaitForDebugge r; 94 m_startData.waitForDebuggerMode = WebEmbeddedWorkerStartData::WaitForDebugge r;
81 m_worker->startWorkerContext(m_startData); 95 m_worker->startWorkerContext(m_startData);
82 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 96 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
83 97
84 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); 98 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1);
85 m_worker->terminateWorkerContext(); 99 m_worker->terminateWorkerContext();
86 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 100 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
87 } 101 }
88 102
89 TEST_F(WebEmbeddedWorkerImplFailureTest, TerminateWhileLoadingScript) 103 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhilePausedAfterDownload)
104 {
105 EXPECT_CALL(*m_mockClient, workerReadyForInspection())
106 .Times(1);
107 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_))
108 .WillOnce(::testing::Return(nullptr));
109 EXPECT_CALL(*m_mockClient, workerScriptLoaded())
110 .Times(1);
111 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider())
michaeln 2016/02/06 01:13:58 ok, i'm not too familiar with testing::Mock, the .
falken 2016/02/10 05:40:41 Yes, I was surprised too.
112 .Times(0);
113
114 m_startData.pauseAfterDownloadMode = WebEmbeddedWorkerStartData::PauseAfterD ownload;
115 m_worker->startWorkerContext(m_startData);
116 testing::runPendingTasks();
117 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
118 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
119
120 EXPECT_CALL(*m_mockClient, workerContextFailedToStart())
121 .Times(1);
122 m_worker->terminateWorkerContext();
123 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
124 }
125
126 TEST_F(WebEmbeddedWorkerImplTest, TerminateWhileLoadingScript)
90 { 127 {
91 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1); 128 EXPECT_CALL(*m_mockClient, workerReadyForInspection()).Times(1);
129 m_startData.scriptURL = m_invalidScriptURL;
92 m_worker->startWorkerContext(m_startData); 130 m_worker->startWorkerContext(m_startData);
93 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 131 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
94 132
95 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) .WillOnce(::testing::Return(nullptr)); 133 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_)) .WillOnce(::testing::Return(nullptr));
96 testing::runPendingTasks(); 134 testing::runPendingTasks();
97 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 135 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
98 136
99 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1); 137 EXPECT_CALL(*m_mockClient, workerContextFailedToStart()).Times(1);
100 m_worker->terminateWorkerContext(); 138 m_worker->terminateWorkerContext();
101 ::testing::Mock::VerifyAndClearExpectations(m_mockClient); 139 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
102 } 140 }
103 141
142 TEST_F(WebEmbeddedWorkerImplTest, Success)
michaeln 2016/02/06 01:13:58 DoNotPauseAfterDownload()?
falken 2016/02/10 05:40:41 Done.
143 {
144 EXPECT_CALL(*m_mockClient, workerReadyForInspection())
145 .Times(1);
146 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_))
147 .WillOnce(::testing::Return(nullptr));
nhiroki 2016/02/10 04:56:15 EXPECT_CALL(*m_mockClient, workerScriptLoaded()).T
falken 2016/02/10 05:40:41 Redid these tests to be more thorough.
148 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider())
149 .WillOnce(::testing::Return(nullptr));
150 m_worker->startWorkerContext(m_startData);
151 testing::runPendingTasks();
152 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
153 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
154 }
155
156 TEST_F(WebEmbeddedWorkerImplTest, PauseAfterDownload)
157 {
158 EXPECT_CALL(*m_mockClient, workerReadyForInspection())
159 .Times(1);
160 EXPECT_CALL(*m_mockClient, createServiceWorkerNetworkProvider(::testing::_))
161 .WillOnce(::testing::Return(nullptr));
162 EXPECT_CALL(*m_mockClient, workerScriptLoaded())
163 .Times(1);
164 m_startData.pauseAfterDownloadMode = WebEmbeddedWorkerStartData::PauseAfterD ownload;
165 m_worker->startWorkerContext(m_startData);
166 testing::runPendingTasks();
167 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests();
168 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
169
170 EXPECT_CALL(*m_mockClient, createServiceWorkerProvider())
171 .WillOnce(::testing::Return(nullptr));
172 m_worker->resumeAfterDownload();
173 ::testing::Mock::VerifyAndClearExpectations(m_mockClient);
174 }
175
104 } // namespace blink 176 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698