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

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp

Issue 2644083003: ResourceFetcherTest: introduce FetchTestingPlatformSupport (Closed)
Patch Set: review #23 Created 3 years, 11 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 /* 1 /*
2 * Copyright (c) 2013, Google Inc. All rights reserved. 2 * Copyright (c) 2013, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 15 matching lines...) Expand all
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "core/fetch/ResourceFetcher.h" 31 #include "core/fetch/ResourceFetcher.h"
32 32
33 #include "core/fetch/FetchInitiatorInfo.h" 33 #include "core/fetch/FetchInitiatorInfo.h"
34 #include "core/fetch/FetchInitiatorTypeNames.h" 34 #include "core/fetch/FetchInitiatorTypeNames.h"
35 #include "core/fetch/FetchRequest.h" 35 #include "core/fetch/FetchRequest.h"
36 #include "core/fetch/FetchTestingPlatformSupport.h"
36 #include "core/fetch/MemoryCache.h" 37 #include "core/fetch/MemoryCache.h"
37 #include "core/fetch/MockFetchContext.h" 38 #include "core/fetch/MockFetchContext.h"
38 #include "core/fetch/MockResource.h" 39 #include "core/fetch/MockResource.h"
39 #include "core/fetch/MockResourceClient.h" 40 #include "core/fetch/MockResourceClient.h"
40 #include "core/fetch/RawResource.h" 41 #include "core/fetch/RawResource.h"
41 #include "core/fetch/ResourceLoader.h" 42 #include "core/fetch/ResourceLoader.h"
42 #include "platform/WebTaskRunner.h" 43 #include "platform/WebTaskRunner.h"
43 #include "platform/exported/WrappedResourceResponse.h" 44 #include "platform/exported/WrappedResourceResponse.h"
44 #include "platform/heap/Handle.h" 45 #include "platform/heap/Handle.h"
45 #include "platform/heap/HeapAllocator.h" 46 #include "platform/heap/HeapAllocator.h"
46 #include "platform/heap/Member.h" 47 #include "platform/heap/Member.h"
48 #include "platform/network/ResourceError.h"
47 #include "platform/network/ResourceRequest.h" 49 #include "platform/network/ResourceRequest.h"
48 #include "platform/network/ResourceTimingInfo.h" 50 #include "platform/network/ResourceTimingInfo.h"
49 #include "platform/scheduler/test/fake_web_task_runner.h" 51 #include "platform/scheduler/test/fake_web_task_runner.h"
52 #include "platform/testing/TestingPlatformSupport.h"
50 #include "platform/testing/URLTestHelpers.h" 53 #include "platform/testing/URLTestHelpers.h"
51 #include "platform/testing/weburl_loader_mock.h" 54 #include "platform/testing/weburl_loader_mock.h"
55 #include "platform/testing/weburl_loader_mock_factory_impl.h"
52 #include "platform/weborigin/KURL.h" 56 #include "platform/weborigin/KURL.h"
53 #include "public/platform/Platform.h" 57 #include "public/platform/Platform.h"
58 #include "public/platform/WebURLLoader.h"
54 #include "public/platform/WebURLLoaderMockFactory.h" 59 #include "public/platform/WebURLLoaderMockFactory.h"
55 #include "public/platform/WebURLResponse.h" 60 #include "public/platform/WebURLResponse.h"
56 #include "testing/gtest/include/gtest/gtest.h" 61 #include "testing/gtest/include/gtest/gtest.h"
57 #include "wtf/Allocator.h" 62 #include "wtf/Allocator.h"
58 #include "wtf/PtrUtil.h" 63 #include "wtf/PtrUtil.h"
59 #include "wtf/Vector.h" 64 #include "wtf/Vector.h"
60 #include <memory> 65 #include <memory>
61 66
62 namespace blink { 67 namespace blink {
63 68
64 namespace { 69 namespace {
65 constexpr char kTestResourceFilename[] = "white-1x1.png"; 70 constexpr char kTestResourceFilename[] = "white-1x1.png";
66 constexpr char kTestResourceMimeType[] = "image/png"; 71 constexpr char kTestResourceMimeType[] = "image/png";
67 constexpr int kTestResourceSize = 103; // size of web/tests/data/white-1x1.png 72 constexpr int kTestResourceSize = 103; // size of web/tests/data/white-1x1.png
68 } 73 }
69 74
70 class ResourceFetcherTest : public ::testing::Test {}; 75 class ResourceFetcherTest : public ::testing::Test {
76 public:
77 ResourceFetcherTest() = default;
78 ~ResourceFetcherTest() override = default;
79
80 void TearDown() override {
81 m_platform->getURLLoaderMockFactory()->unregisterAllURLs();
82 memoryCache()->evictResources();
83 }
84
85 protected:
86 MockFetchContext* context() { return m_platform->context(); }
87
88 ScopedTestingPlatformSupport<FetchTestingPlatformSupport> m_platform;
89
90 private:
91 DISALLOW_COPY_AND_ASSIGN(ResourceFetcherTest);
92 };
71 93
72 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { 94 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) {
73 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); 95 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png");
74 // Try to request a url. The request should fail, and a resource in an error 96 // Try to request a url. The request should fail, and a resource in an error
75 // state should be returned, and no resource should be present in the cache. 97 // state should be returned, and no resource should be present in the cache.
76 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); 98 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr);
77 ResourceRequest resourceRequest(secureURL); 99 ResourceRequest resourceRequest(secureURL);
78 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 100 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
79 FetchRequest fetchRequest = 101 FetchRequest fetchRequest =
80 FetchRequest(resourceRequest, FetchInitiatorInfo()); 102 FetchRequest(resourceRequest, FetchInitiatorInfo());
81 Resource* resource = RawResource::fetch(fetchRequest, fetcher); 103 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
82 ASSERT_TRUE(resource); 104 ASSERT_TRUE(resource);
83 EXPECT_TRUE(resource->errorOccurred()); 105 EXPECT_TRUE(resource->errorOccurred());
84 EXPECT_TRUE(resource->resourceError().isAccessCheck()); 106 EXPECT_TRUE(resource->resourceError().isAccessCheck());
85 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); 107 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL));
86 108
87 // Start by calling startLoad() directly, rather than via requestResource(). 109 // Start by calling startLoad() directly, rather than via requestResource().
88 // This shouldn't crash. 110 // This shouldn't crash.
89 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw)); 111 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw));
90 } 112 }
91 113
92 TEST_F(ResourceFetcherTest, UseExistingResource) { 114 TEST_F(ResourceFetcherTest, UseExistingResource) {
93 ResourceFetcher* fetcher = ResourceFetcher::create( 115 ResourceFetcher* fetcher = ResourceFetcher::create(context());
94 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
95 116
96 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 117 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
97 ResourceResponse response; 118 ResourceResponse response;
98 response.setURL(url); 119 response.setURL(url);
99 response.setHTTPStatusCode(200); 120 response.setHTTPStatusCode(200);
100 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 121 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
101 URLTestHelpers::registerMockedURLLoadWithCustomResponse( 122 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
102 url, kTestResourceFilename, WebString::fromUTF8(""), 123 url, kTestResourceFilename, WebString::fromUTF8(""),
103 WrappedResourceResponse(response)); 124 WrappedResourceResponse(response));
104 125
105 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 126 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
106 Resource* resource = MockResource::fetch(fetchRequest, fetcher); 127 Resource* resource = MockResource::fetch(fetchRequest, fetcher);
107 ASSERT_TRUE(resource); 128 ASSERT_TRUE(resource);
108 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 129 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
109 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
110 EXPECT_TRUE(resource->isLoaded()); 130 EXPECT_TRUE(resource->isLoaded());
111 EXPECT_TRUE(memoryCache()->contains(resource)); 131 EXPECT_TRUE(memoryCache()->contains(resource));
112 132
113 Resource* newResource = MockResource::fetch(fetchRequest, fetcher); 133 Resource* newResource = MockResource::fetch(fetchRequest, fetcher);
114 EXPECT_EQ(resource, newResource); 134 EXPECT_EQ(resource, newResource);
115 memoryCache()->remove(resource);
116 } 135 }
117 136
118 TEST_F(ResourceFetcherTest, Vary) { 137 TEST_F(ResourceFetcherTest, Vary) {
119 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 138 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
120 Resource* resource = RawResource::create(url, Resource::Raw); 139 Resource* resource = RawResource::create(url, Resource::Raw);
121 memoryCache()->add(resource); 140 memoryCache()->add(resource);
122 ResourceResponse response; 141 ResourceResponse response;
123 response.setURL(url); 142 response.setURL(url);
124 response.setHTTPStatusCode(200); 143 response.setHTTPStatusCode(200);
125 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 144 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
126 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 145 response.setHTTPHeaderField(HTTPNames::Vary, "*");
127 resource->responseReceived(response, nullptr); 146 resource->responseReceived(response, nullptr);
128 resource->finish(); 147 resource->finish();
129 ASSERT_TRUE(resource->hasVaryHeader()); 148 ASSERT_TRUE(resource->hasVaryHeader());
130 149
131 ResourceFetcher* fetcher = ResourceFetcher::create( 150 ResourceFetcher* fetcher = ResourceFetcher::create(context());
132 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
133 ResourceRequest resourceRequest(url); 151 ResourceRequest resourceRequest(url);
134 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 152 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
135 FetchRequest fetchRequest = 153 FetchRequest fetchRequest =
136 FetchRequest(resourceRequest, FetchInitiatorInfo()); 154 FetchRequest(resourceRequest, FetchInitiatorInfo());
137 Platform::current()->getURLLoaderMockFactory()->registerURL( 155 Platform::current()->getURLLoaderMockFactory()->registerURL(
138 url, WebURLResponse(), ""); 156 url, WebURLResponse(), "");
139 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); 157 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
140 EXPECT_NE(resource, newResource); 158 EXPECT_NE(resource, newResource);
141 newResource->loader()->cancel(); 159 newResource->loader()->cancel();
142 memoryCache()->remove(newResource);
143 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
144
145 memoryCache()->remove(resource);
146 } 160 }
147 161
148 TEST_F(ResourceFetcherTest, NavigationTimingInfo) { 162 TEST_F(ResourceFetcherTest, NavigationTimingInfo) {
149 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 163 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
150 ResourceResponse response; 164 ResourceResponse response;
151 response.setURL(url); 165 response.setURL(url);
152 response.setHTTPStatusCode(200); 166 response.setHTTPStatusCode(200);
153 167
154 ResourceFetcher* fetcher = ResourceFetcher::create( 168 ResourceFetcher* fetcher = ResourceFetcher::create(context());
155 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
156 ResourceRequest resourceRequest(url); 169 ResourceRequest resourceRequest(url);
157 resourceRequest.setFrameType(WebURLRequest::FrameTypeNested); 170 resourceRequest.setFrameType(WebURLRequest::FrameTypeNested);
158 resourceRequest.setRequestContext(WebURLRequest::RequestContextForm); 171 resourceRequest.setRequestContext(WebURLRequest::RequestContextForm);
159 FetchRequest fetchRequest = 172 FetchRequest fetchRequest =
160 FetchRequest(resourceRequest, FetchInitiatorInfo()); 173 FetchRequest(resourceRequest, FetchInitiatorInfo());
161 Platform::current()->getURLLoaderMockFactory()->registerURL( 174 Platform::current()->getURLLoaderMockFactory()->registerURL(
162 url, WebURLResponse(), ""); 175 url, WebURLResponse(), "");
163 Resource* resource = 176 Resource* resource =
164 RawResource::fetchMainResource(fetchRequest, fetcher, SubstituteData()); 177 RawResource::fetchMainResource(fetchRequest, fetcher, SubstituteData());
165 resource->responseReceived(response, nullptr); 178 resource->responseReceived(response, nullptr);
166 EXPECT_EQ(resource->getType(), Resource::MainResource); 179 EXPECT_EQ(resource->getType(), Resource::MainResource);
167 180
168 ResourceTimingInfo* navigationTimingInfo = fetcher->getNavigationTimingInfo(); 181 ResourceTimingInfo* navigationTimingInfo = fetcher->getNavigationTimingInfo();
169 ASSERT_TRUE(navigationTimingInfo); 182 ASSERT_TRUE(navigationTimingInfo);
170 long long encodedDataLength = 123; 183 long long encodedDataLength = 123;
171 resource->loader()->didFinishLoading(0.0, encodedDataLength, 0); 184 resource->loader()->didFinishLoading(0.0, encodedDataLength, 0);
172 EXPECT_EQ(navigationTimingInfo->transferSize(), encodedDataLength); 185 EXPECT_EQ(navigationTimingInfo->transferSize(), encodedDataLength);
173 186
174 // When there are redirects. 187 // When there are redirects.
175 KURL redirectURL(ParsedURLString, "http://127.0.0.1:8000/redirect.html"); 188 KURL redirectURL(ParsedURLString, "http://127.0.0.1:8000/redirect.html");
176 ResourceResponse redirectResponse; 189 ResourceResponse redirectResponse;
177 redirectResponse.setURL(redirectURL); 190 redirectResponse.setURL(redirectURL);
178 redirectResponse.setHTTPStatusCode(200); 191 redirectResponse.setHTTPStatusCode(200);
179 long long redirectEncodedDataLength = 123; 192 long long redirectEncodedDataLength = 123;
180 redirectResponse.setEncodedDataLength(redirectEncodedDataLength); 193 redirectResponse.setEncodedDataLength(redirectEncodedDataLength);
181 ResourceRequest redirectResourceRequest(url); 194 ResourceRequest redirectResourceRequest(url);
182 fetcher->recordResourceTimingOnRedirect(resource, redirectResponse, false); 195 fetcher->recordResourceTimingOnRedirect(resource, redirectResponse, false);
183 EXPECT_EQ(navigationTimingInfo->transferSize(), 196 EXPECT_EQ(navigationTimingInfo->transferSize(),
184 encodedDataLength + redirectEncodedDataLength); 197 encodedDataLength + redirectEncodedDataLength);
185 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
186 } 198 }
187 199
188 TEST_F(ResourceFetcherTest, VaryOnBack) { 200 TEST_F(ResourceFetcherTest, VaryOnBack) {
189 MockFetchContext* context = 201 context()->setCachePolicy(CachePolicyHistoryBuffer);
190 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource); 202 ResourceFetcher* fetcher = ResourceFetcher::create(context());
191 context->setCachePolicy(CachePolicyHistoryBuffer);
192 ResourceFetcher* fetcher = ResourceFetcher::create(context);
193 203
194 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 204 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
195 Resource* resource = RawResource::create(url, Resource::Raw); 205 Resource* resource = RawResource::create(url, Resource::Raw);
196 memoryCache()->add(resource); 206 memoryCache()->add(resource);
197 ResourceResponse response; 207 ResourceResponse response;
198 response.setURL(url); 208 response.setURL(url);
199 response.setHTTPStatusCode(200); 209 response.setHTTPStatusCode(200);
200 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 210 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
201 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 211 response.setHTTPHeaderField(HTTPNames::Vary, "*");
202 resource->responseReceived(response, nullptr); 212 resource->responseReceived(response, nullptr);
203 resource->finish(); 213 resource->finish();
204 ASSERT_TRUE(resource->hasVaryHeader()); 214 ASSERT_TRUE(resource->hasVaryHeader());
205 215
206 ResourceRequest resourceRequest(url); 216 ResourceRequest resourceRequest(url);
207 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 217 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
208 FetchRequest fetchRequest = 218 FetchRequest fetchRequest =
209 FetchRequest(resourceRequest, FetchInitiatorInfo()); 219 FetchRequest(resourceRequest, FetchInitiatorInfo());
210 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); 220 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
211 EXPECT_EQ(resource, newResource); 221 EXPECT_EQ(resource, newResource);
212
213 memoryCache()->remove(newResource);
214 } 222 }
215 223
216 TEST_F(ResourceFetcherTest, VaryResource) { 224 TEST_F(ResourceFetcherTest, VaryResource) {
217 ResourceFetcher* fetcher = ResourceFetcher::create( 225 ResourceFetcher* fetcher = ResourceFetcher::create(context());
218 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
219 226
220 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 227 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
221 ResourceResponse response; 228 ResourceResponse response;
222 response.setURL(url); 229 response.setURL(url);
223 response.setHTTPStatusCode(200); 230 response.setHTTPStatusCode(200);
224 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 231 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
225 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 232 response.setHTTPHeaderField(HTTPNames::Vary, "*");
226 URLTestHelpers::registerMockedURLLoadWithCustomResponse( 233 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
227 url, kTestResourceFilename, WebString::fromUTF8(""), 234 url, kTestResourceFilename, WebString::fromUTF8(""),
228 WrappedResourceResponse(response)); 235 WrappedResourceResponse(response));
229 236
230 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 237 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
231 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); 238 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher);
232 ASSERT_TRUE(resource); 239 ASSERT_TRUE(resource);
233 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 240 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
234 ASSERT_TRUE(resource->hasVaryHeader()); 241 ASSERT_TRUE(resource->hasVaryHeader());
235 242
236 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 243 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
237 Resource* newResource = MockResource::fetch(fetchRequest, fetcher); 244 Resource* newResource = MockResource::fetch(fetchRequest, fetcher);
238 EXPECT_EQ(resource, newResource); 245 EXPECT_EQ(resource, newResource);
239
240 memoryCache()->remove(newResource);
241 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
242 } 246 }
243 247
244 class RequestSameResourceOnComplete 248 class RequestSameResourceOnComplete
245 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, 249 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>,
246 public RawResourceClient { 250 public RawResourceClient {
247 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); 251 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete);
248 252
249 public: 253 public:
250 explicit RequestSameResourceOnComplete(Resource* resource) 254 explicit RequestSameResourceOnComplete(Resource* resource)
251 : m_resource(resource), m_notifyFinishedCalled(false) {} 255 : m_resource(resource), m_notifyFinishedCalled(false) {}
(...skipping 26 matching lines...) Expand all
278 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { 282 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) {
279 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 283 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
280 ResourceResponse response; 284 ResourceResponse response;
281 response.setURL(url); 285 response.setURL(url);
282 response.setHTTPStatusCode(200); 286 response.setHTTPStatusCode(200);
283 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 287 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
284 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); 288 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890");
285 URLTestHelpers::registerMockedURLLoadWithCustomResponse( 289 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
286 url, kTestResourceFilename, WebString::fromUTF8(""), 290 url, kTestResourceFilename, WebString::fromUTF8(""),
287 WrappedResourceResponse(response)); 291 WrappedResourceResponse(response));
288 ResourceFetcher* fetcher1 = ResourceFetcher::create( 292 ResourceFetcher* fetcher1 = ResourceFetcher::create(context());
289 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
290 ResourceRequest request1(url); 293 ResourceRequest request1(url);
291 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); 294 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache");
292 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); 295 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo());
293 Resource* resource1 = MockResource::fetch(fetchRequest1, fetcher1); 296 Resource* resource1 = MockResource::fetch(fetchRequest1, fetcher1);
294 Persistent<RequestSameResourceOnComplete> client = 297 Persistent<RequestSameResourceOnComplete> client =
295 new RequestSameResourceOnComplete(resource1); 298 new RequestSameResourceOnComplete(resource1);
296 resource1->addClient(client); 299 resource1->addClient(client);
297 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 300 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
298 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
299 EXPECT_TRUE(client->notifyFinishedCalled()); 301 EXPECT_TRUE(client->notifyFinishedCalled());
300 resource1->removeClient(client); 302 resource1->removeClient(client);
301 memoryCache()->remove(resource1);
302 } 303 }
303 304
304 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { 305 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) {
305 ResourceFetcher* fetcher = ResourceFetcher::create( 306 ResourceFetcher* fetcher = ResourceFetcher::create(context());
306 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
307 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); 307 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo"));
308 request.setRequestContext(WebURLRequest::RequestContextVideo); 308 request.setRequestContext(WebURLRequest::RequestContextVideo);
309 ResourceLoaderOptions options; 309 ResourceLoaderOptions options;
310 options.dataBufferingPolicy = DoNotBufferData; 310 options.dataBufferingPolicy = DoNotBufferData;
311 FetchRequest fetchRequest = 311 FetchRequest fetchRequest =
312 FetchRequest(request, FetchInitiatorTypeNames::internal, options); 312 FetchRequest(request, FetchInitiatorTypeNames::internal, options);
313 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher); 313 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher);
314 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher); 314 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher);
315 EXPECT_NE(resource1, resource2); 315 EXPECT_NE(resource1, resource2);
316 memoryCache()->remove(resource2);
317 } 316 }
318 317
319 class ServeRequestsOnCompleteClient final 318 class ServeRequestsOnCompleteClient final
320 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>, 319 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>,
321 public RawResourceClient { 320 public RawResourceClient {
322 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient); 321 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient);
323 322
324 public: 323 public:
325 void notifyFinished(Resource*) override { 324 void notifyFinished(Resource*) override {
326 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 325 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 // Regression test for http://crbug.com/594072. 360 // Regression test for http://crbug.com/594072.
362 // This emulates a modal dialog triggering a nested run loop inside 361 // This emulates a modal dialog triggering a nested run loop inside
363 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its 362 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its
364 // WebURLLoader before notifying its clients, a nested run loop may send a 363 // WebURLLoader before notifying its clients, a nested run loop may send a
365 // network response, leading to an invalid state transition in ResourceLoader. 364 // network response, leading to an invalid state transition in ResourceLoader.
366 TEST_F(ResourceFetcherTest, ResponseOnCancel) { 365 TEST_F(ResourceFetcherTest, ResponseOnCancel) {
367 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 366 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
368 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 367 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
369 kTestResourceMimeType); 368 kTestResourceMimeType);
370 369
371 ResourceFetcher* fetcher = ResourceFetcher::create( 370 ResourceFetcher* fetcher = ResourceFetcher::create(context());
372 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
373 ResourceRequest resourceRequest(url); 371 ResourceRequest resourceRequest(url);
374 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 372 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
375 FetchRequest fetchRequest = 373 FetchRequest fetchRequest =
376 FetchRequest(resourceRequest, FetchInitiatorInfo()); 374 FetchRequest(resourceRequest, FetchInitiatorInfo());
377 Resource* resource = RawResource::fetch(fetchRequest, fetcher); 375 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
378 Persistent<ServeRequestsOnCompleteClient> client = 376 Persistent<ServeRequestsOnCompleteClient> client =
379 new ServeRequestsOnCompleteClient(); 377 new ServeRequestsOnCompleteClient();
380 resource->addClient(client); 378 resource->addClient(client);
381 resource->loader()->cancel(); 379 resource->loader()->cancel();
382 resource->removeClient(client); 380 resource->removeClient(client);
383 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
384 } 381 }
385 382
386 class ScopedMockRedirectRequester { 383 class ScopedMockRedirectRequester {
387 STACK_ALLOCATED(); 384 STACK_ALLOCATED();
388 WTF_MAKE_NONCOPYABLE(ScopedMockRedirectRequester); 385 WTF_MAKE_NONCOPYABLE(ScopedMockRedirectRequester);
389 386
390 public: 387 public:
391 ScopedMockRedirectRequester() : m_context(nullptr) {} 388 explicit ScopedMockRedirectRequester(MockFetchContext* context)
392 389 : m_context(context) {}
393 ~ScopedMockRedirectRequester() { cleanUp(); }
394 390
395 void registerRedirect(const WebString& fromURL, const WebString& toURL) { 391 void registerRedirect(const WebString& fromURL, const WebString& toURL) {
396 KURL redirectURL(ParsedURLString, fromURL); 392 KURL redirectURL(ParsedURLString, fromURL);
397 WebURLResponse redirectResponse; 393 WebURLResponse redirectResponse;
398 redirectResponse.setURL(redirectURL); 394 redirectResponse.setURL(redirectURL);
399 redirectResponse.setHTTPStatusCode(301); 395 redirectResponse.setHTTPStatusCode(301);
400 redirectResponse.setHTTPHeaderField(HTTPNames::Location, toURL); 396 redirectResponse.setHTTPHeaderField(HTTPNames::Location, toURL);
401 redirectResponse.setEncodedDataLength(kRedirectResponseOverheadBytes); 397 redirectResponse.setEncodedDataLength(kRedirectResponseOverheadBytes);
402 Platform::current()->getURLLoaderMockFactory()->registerURL( 398 Platform::current()->getURLLoaderMockFactory()->registerURL(
403 redirectURL, redirectResponse, ""); 399 redirectURL, redirectResponse, "");
404 } 400 }
405 401
406 void registerFinalResource(const WebString& url) { 402 void registerFinalResource(const WebString& url) {
407 KURL finalURL(ParsedURLString, url); 403 KURL finalURL(ParsedURLString, url);
408 URLTestHelpers::registerMockedURLLoad(finalURL, kTestResourceFilename); 404 URLTestHelpers::registerMockedURLLoad(finalURL, kTestResourceFilename);
409 } 405 }
410 406
411 void request(const WebString& url) { 407 void request(const WebString& url) {
412 DCHECK(!m_context);
413 m_context =
414 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource);
415 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); 408 ResourceFetcher* fetcher = ResourceFetcher::create(m_context);
416 ResourceRequest resourceRequest(url); 409 ResourceRequest resourceRequest(url);
417 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 410 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
418 FetchRequest fetchRequest = 411 FetchRequest fetchRequest =
419 FetchRequest(resourceRequest, FetchInitiatorInfo()); 412 FetchRequest(resourceRequest, FetchInitiatorInfo());
420 RawResource::fetch(fetchRequest, fetcher); 413 RawResource::fetch(fetchRequest, fetcher);
421 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 414 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
422 } 415 }
423 416
424 void cleanUp() {
425 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
426 memoryCache()->evictResources();
427 }
428
429 MockFetchContext* context() const { return m_context; }
430
431 private: 417 private:
432 Member<MockFetchContext> m_context; 418 Member<MockFetchContext> m_context;
433 }; 419 };
434 420
435 TEST_F(ResourceFetcherTest, SameOriginRedirect) { 421 TEST_F(ResourceFetcherTest, SameOriginRedirect) {
436 const char redirectURL[] = "http://127.0.0.1:8000/redirect.html"; 422 const char redirectURL[] = "http://127.0.0.1:8000/redirect.html";
437 const char finalURL[] = "http://127.0.0.1:8000/final.html"; 423 const char finalURL[] = "http://127.0.0.1:8000/final.html";
438 ScopedMockRedirectRequester requester; 424 ScopedMockRedirectRequester requester(context());
439 requester.registerRedirect(redirectURL, finalURL); 425 requester.registerRedirect(redirectURL, finalURL);
440 requester.registerFinalResource(finalURL); 426 requester.registerFinalResource(finalURL);
441 requester.request(redirectURL); 427 requester.request(redirectURL);
442 428
443 EXPECT_EQ(kRedirectResponseOverheadBytes + kTestResourceSize, 429 EXPECT_EQ(kRedirectResponseOverheadBytes + kTestResourceSize,
444 requester.context()->getTransferSize()); 430 context()->getTransferSize());
445 } 431 }
446 432
447 TEST_F(ResourceFetcherTest, CrossOriginRedirect) { 433 TEST_F(ResourceFetcherTest, CrossOriginRedirect) {
448 const char redirectURL[] = "http://otherorigin.test/redirect.html"; 434 const char redirectURL[] = "http://otherorigin.test/redirect.html";
449 const char finalURL[] = "http://127.0.0.1:8000/final.html"; 435 const char finalURL[] = "http://127.0.0.1:8000/final.html";
450 ScopedMockRedirectRequester requester; 436 ScopedMockRedirectRequester requester(context());
451 requester.registerRedirect(redirectURL, finalURL); 437 requester.registerRedirect(redirectURL, finalURL);
452 requester.registerFinalResource(finalURL); 438 requester.registerFinalResource(finalURL);
453 requester.request(redirectURL); 439 requester.request(redirectURL);
454 440
455 EXPECT_EQ(kTestResourceSize, requester.context()->getTransferSize()); 441 EXPECT_EQ(kTestResourceSize, context()->getTransferSize());
456 } 442 }
457 443
458 TEST_F(ResourceFetcherTest, ComplexCrossOriginRedirect) { 444 TEST_F(ResourceFetcherTest, ComplexCrossOriginRedirect) {
459 const char redirectURL1[] = "http://127.0.0.1:8000/redirect1.html"; 445 const char redirectURL1[] = "http://127.0.0.1:8000/redirect1.html";
460 const char redirectURL2[] = "http://otherorigin.test/redirect2.html"; 446 const char redirectURL2[] = "http://otherorigin.test/redirect2.html";
461 const char redirectURL3[] = "http://127.0.0.1:8000/redirect3.html"; 447 const char redirectURL3[] = "http://127.0.0.1:8000/redirect3.html";
462 const char finalURL[] = "http://127.0.0.1:8000/final.html"; 448 const char finalURL[] = "http://127.0.0.1:8000/final.html";
463 ScopedMockRedirectRequester requester; 449 ScopedMockRedirectRequester requester(context());
464 requester.registerRedirect(redirectURL1, redirectURL2); 450 requester.registerRedirect(redirectURL1, redirectURL2);
465 requester.registerRedirect(redirectURL2, redirectURL3); 451 requester.registerRedirect(redirectURL2, redirectURL3);
466 requester.registerRedirect(redirectURL3, finalURL); 452 requester.registerRedirect(redirectURL3, finalURL);
467 requester.registerFinalResource(finalURL); 453 requester.registerFinalResource(finalURL);
468 requester.request(redirectURL1); 454 requester.request(redirectURL1);
469 455
470 EXPECT_EQ(kTestResourceSize, requester.context()->getTransferSize()); 456 EXPECT_EQ(kTestResourceSize, context()->getTransferSize());
471 } 457 }
472 458
473 TEST_F(ResourceFetcherTest, SynchronousRequest) { 459 TEST_F(ResourceFetcherTest, SynchronousRequest) {
474 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 460 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
475 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 461 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
476 kTestResourceMimeType); 462 kTestResourceMimeType);
477 463
478 ResourceFetcher* fetcher = ResourceFetcher::create( 464 ResourceFetcher* fetcher = ResourceFetcher::create(context());
479 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
480 ResourceRequest resourceRequest(url); 465 ResourceRequest resourceRequest(url);
481 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 466 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
482 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo()); 467 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo());
483 fetchRequest.makeSynchronous(); 468 fetchRequest.makeSynchronous();
484 Resource* resource = RawResource::fetch(fetchRequest, fetcher); 469 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
485 EXPECT_TRUE(resource->isLoaded()); 470 EXPECT_TRUE(resource->isLoaded());
486 EXPECT_EQ(ResourceLoadPriorityHighest, 471 EXPECT_EQ(ResourceLoadPriorityHighest,
487 resource->resourceRequest().priority()); 472 resource->resourceRequest().priority());
488
489 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
490 memoryCache()->remove(resource);
491 } 473 }
492 474
493 TEST_F(ResourceFetcherTest, PreloadResourceTwice) { 475 TEST_F(ResourceFetcherTest, PreloadResourceTwice) {
494 ResourceFetcher* fetcher = ResourceFetcher::create( 476 ResourceFetcher* fetcher = ResourceFetcher::create(context());
495 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
496 477
497 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 478 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
498 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 479 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
499 kTestResourceMimeType); 480 kTestResourceMimeType);
500 481
501 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 482 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
502 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); 483 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher);
503 ASSERT_TRUE(resource); 484 ASSERT_TRUE(resource);
504 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 485 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
505 fetcher->preloadStarted(resource); 486 fetcher->preloadStarted(resource);
506 487
507 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 488 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
508 Resource* newResource = MockResource::fetch(fetchRequest, fetcher); 489 Resource* newResource = MockResource::fetch(fetchRequest, fetcher);
509 EXPECT_EQ(resource, newResource); 490 EXPECT_EQ(resource, newResource);
510 fetcher->preloadStarted(resource); 491 fetcher->preloadStarted(resource);
511 492
512 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); 493 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads);
513 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
514 EXPECT_FALSE(memoryCache()->contains(resource)); 494 EXPECT_FALSE(memoryCache()->contains(resource));
515 EXPECT_FALSE(resource->isPreloaded()); 495 EXPECT_FALSE(resource->isPreloaded());
516 } 496 }
517 497
518 TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) { 498 TEST_F(ResourceFetcherTest, LinkPreloadResourceAndUse) {
519 ResourceFetcher* fetcher = ResourceFetcher::create( 499 ResourceFetcher* fetcher = ResourceFetcher::create(context());
520 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
521 500
522 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 501 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
523 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 502 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
524 kTestResourceMimeType); 503 kTestResourceMimeType);
525 504
526 // Link preload preload scanner 505 // Link preload preload scanner
527 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 506 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
528 fetchRequestOriginal.setLinkPreload(true); 507 fetchRequestOriginal.setLinkPreload(true);
529 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); 508 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher);
530 ASSERT_TRUE(resource); 509 ASSERT_TRUE(resource);
(...skipping 12 matching lines...) Expand all
543 522
544 // Resource created by parser 523 // Resource created by parser
545 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 524 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
546 Resource* newResource = MockResource::fetch(fetchRequest, fetcher); 525 Resource* newResource = MockResource::fetch(fetchRequest, fetcher);
547 Persistent<MockResourceClient> client = new MockResourceClient(newResource); 526 Persistent<MockResourceClient> client = new MockResourceClient(newResource);
548 EXPECT_EQ(resource, newResource); 527 EXPECT_EQ(resource, newResource);
549 EXPECT_FALSE(resource->isLinkPreload()); 528 EXPECT_FALSE(resource->isLinkPreload());
550 529
551 // DCL reached 530 // DCL reached
552 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 531 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
553 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
554 EXPECT_TRUE(memoryCache()->contains(resource)); 532 EXPECT_TRUE(memoryCache()->contains(resource));
555 EXPECT_FALSE(resource->isPreloaded()); 533 EXPECT_FALSE(resource->isPreloaded());
556 } 534 }
557 535
558 TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) { 536 TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndUse) {
559 ResourceFetcher* fetcher = ResourceFetcher::create( 537 ResourceFetcher* fetcher = ResourceFetcher::create(context());
560 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); 538 ResourceFetcher* fetcher2 = ResourceFetcher::create(context());
561 ResourceFetcher* fetcher2 = ResourceFetcher::create(
562 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
563 539
564 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 540 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
565 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 541 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
566 kTestResourceMimeType); 542 kTestResourceMimeType);
567 543
568 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 544 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
569 fetchRequestOriginal.setLinkPreload(true); 545 fetchRequestOriginal.setLinkPreload(true);
570 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); 546 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher);
571 ASSERT_TRUE(resource); 547 ASSERT_TRUE(resource);
572 EXPECT_TRUE(resource->isLinkPreload()); 548 EXPECT_TRUE(resource->isLinkPreload());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 // Resource created by parser on the second fetcher 595 // Resource created by parser on the second fetcher
620 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo()); 596 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo());
621 Resource* newResource2 = MockResource::fetch(fetchRequest, fetcher2); 597 Resource* newResource2 = MockResource::fetch(fetchRequest, fetcher2);
622 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2); 598 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2);
623 EXPECT_EQ(resource, newResource2); 599 EXPECT_EQ(resource, newResource2);
624 EXPECT_FALSE(resource->isLinkPreload()); 600 EXPECT_FALSE(resource->isLinkPreload());
625 601
626 // DCL reached on first fetcher 602 // DCL reached on first fetcher
627 EXPECT_TRUE(resource->isPreloaded()); 603 EXPECT_TRUE(resource->isPreloaded());
628 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 604 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
629 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
630 EXPECT_TRUE(memoryCache()->contains(resource)); 605 EXPECT_TRUE(memoryCache()->contains(resource));
631 EXPECT_TRUE(resource->isPreloaded()); 606 EXPECT_TRUE(resource->isPreloaded());
632 607
633 // DCL reached on second fetcher 608 // DCL reached on second fetcher
634 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 609 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
635 EXPECT_TRUE(memoryCache()->contains(resource)); 610 EXPECT_TRUE(memoryCache()->contains(resource));
636 EXPECT_FALSE(resource->isPreloaded()); 611 EXPECT_FALSE(resource->isPreloaded());
637 } 612 }
638 613
639 TEST_F(ResourceFetcherTest, Revalidate304) { 614 TEST_F(ResourceFetcherTest, Revalidate304) {
640 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 615 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
641 Resource* resource = RawResource::create(url, Resource::Raw); 616 Resource* resource = RawResource::create(url, Resource::Raw);
642 memoryCache()->add(resource); 617 memoryCache()->add(resource);
643 ResourceResponse response; 618 ResourceResponse response;
644 response.setURL(url); 619 response.setURL(url);
645 response.setHTTPStatusCode(304); 620 response.setHTTPStatusCode(304);
646 response.setHTTPHeaderField("etag", "1234567890"); 621 response.setHTTPHeaderField("etag", "1234567890");
647 resource->responseReceived(response, nullptr); 622 resource->responseReceived(response, nullptr);
648 resource->finish(); 623 resource->finish();
649 624
650 ResourceFetcher* fetcher = ResourceFetcher::create( 625 ResourceFetcher* fetcher = ResourceFetcher::create(context());
651 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
652 ResourceRequest resourceRequest(url); 626 ResourceRequest resourceRequest(url);
653 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); 627 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
654 FetchRequest fetchRequest = 628 FetchRequest fetchRequest =
655 FetchRequest(resourceRequest, FetchInitiatorInfo()); 629 FetchRequest(resourceRequest, FetchInitiatorInfo());
656 Platform::current()->getURLLoaderMockFactory()->registerURL( 630 Platform::current()->getURLLoaderMockFactory()->registerURL(
657 url, WebURLResponse(), ""); 631 url, WebURLResponse(), "");
658 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); 632 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
659 fetcher->stopFetching(); 633 fetcher->stopFetching();
660 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
661 634
662 EXPECT_NE(resource, newResource); 635 EXPECT_NE(resource, newResource);
663 } 636 }
664 637
665 TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndMove) { 638 TEST_F(ResourceFetcherTest, LinkPreloadResourceMultipleFetchersAndMove) {
666 ResourceFetcher* fetcher = ResourceFetcher::create( 639 ResourceFetcher* fetcher = ResourceFetcher::create(context());
667 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); 640 ResourceFetcher* fetcher2 = ResourceFetcher::create(context());
668 ResourceFetcher* fetcher2 = ResourceFetcher::create(
669 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource));
670 641
671 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 642 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
672 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename, 643 URLTestHelpers::registerMockedURLLoad(url, kTestResourceFilename,
673 kTestResourceMimeType); 644 kTestResourceMimeType);
674 645
675 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 646 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
676 fetchRequestOriginal.setLinkPreload(true); 647 fetchRequestOriginal.setLinkPreload(true);
677 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); 648 Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher);
678 ASSERT_TRUE(resource); 649 ASSERT_TRUE(resource);
679 EXPECT_TRUE(resource->isLinkPreload()); 650 EXPECT_TRUE(resource->isLinkPreload());
680 fetcher->preloadStarted(resource); 651 fetcher->preloadStarted(resource);
681 652
682 // Resource created by parser on the second fetcher 653 // Resource created by parser on the second fetcher
683 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo()); 654 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo());
684 Resource* newResource2 = MockResource::fetch(fetchRequest2, fetcher2); 655 Resource* newResource2 = MockResource::fetch(fetchRequest2, fetcher2);
685 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2); 656 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2);
686 EXPECT_EQ(resource, newResource2); 657 EXPECT_EQ(resource, newResource2);
687 EXPECT_FALSE(fetcher2->isFetching()); 658 EXPECT_FALSE(fetcher2->isFetching());
688 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 659 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
689 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
690 } 660 }
691 661
692 } // namespace blink 662 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698