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

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

Issue 2399473002: Remove Resource::create() to ensure proper subclasses of Resource are created (Closed)
Patch Set: Rebase Created 4 years, 2 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/FontResource.h"
37 #include "core/fetch/ImageResource.h"
36 #include "core/fetch/MemoryCache.h" 38 #include "core/fetch/MemoryCache.h"
37 #include "core/fetch/MockResourceClients.h" 39 #include "core/fetch/MockResourceClients.h"
38 #include "core/fetch/RawResource.h" 40 #include "core/fetch/RawResource.h"
39 #include "core/fetch/ResourceLoader.h" 41 #include "core/fetch/ResourceLoader.h"
40 #include "platform/exported/WrappedResourceResponse.h" 42 #include "platform/exported/WrappedResourceResponse.h"
41 #include "platform/heap/Handle.h" 43 #include "platform/heap/Handle.h"
42 #include "platform/heap/HeapAllocator.h" 44 #include "platform/heap/HeapAllocator.h"
43 #include "platform/heap/Member.h" 45 #include "platform/heap/Member.h"
44 #include "platform/network/ResourceRequest.h" 46 #include "platform/network/ResourceRequest.h"
45 #include "platform/network/ResourceTimingInfo.h" 47 #include "platform/network/ResourceTimingInfo.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 m_transferSize(-1) {} 107 m_transferSize(-1) {}
106 108
107 CachePolicy m_policy; 109 CachePolicy m_policy;
108 std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner; 110 std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner;
109 bool m_complete; 111 bool m_complete;
110 long long m_transferSize; 112 long long m_transferSize;
111 }; 113 };
112 114
113 class ResourceFetcherTest : public ::testing::Test {}; 115 class ResourceFetcherTest : public ::testing::Test {};
114 116
115 class TestResourceFactory : public ResourceFactory {
116 public:
117 explicit TestResourceFactory(Resource::Type type = Resource::Raw)
118 : ResourceFactory(type) {}
119
120 Resource* create(const ResourceRequest& request,
121 const ResourceLoaderOptions& options,
122 const String& charset) const override {
123 return Resource::create(request, type(), options);
124 }
125 };
126
127 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { 117 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) {
128 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); 118 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png");
129 // Try to request a url. The request should fail, and a resource in an error 119 // Try to request a url. The request should fail, and a resource in an error
130 // state should be returned, and no resource should be present in the cache. 120 // state should be returned, and no resource should be present in the cache.
131 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); 121 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr);
122 ResourceRequest resourceRequest(secureURL);
123 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
132 FetchRequest fetchRequest = 124 FetchRequest fetchRequest =
133 FetchRequest(ResourceRequest(secureURL), FetchInitiatorInfo()); 125 FetchRequest(resourceRequest, FetchInitiatorInfo());
134 Resource* resource = 126 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
135 fetcher->requestResource(fetchRequest, TestResourceFactory());
136 ASSERT_TRUE(resource); 127 ASSERT_TRUE(resource);
137 EXPECT_TRUE(resource->errorOccurred()); 128 EXPECT_TRUE(resource->errorOccurred());
138 EXPECT_TRUE(resource->resourceError().isAccessCheck()); 129 EXPECT_TRUE(resource->resourceError().isAccessCheck());
139 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); 130 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL));
140 131
141 // Start by calling startLoad() directly, rather than via requestResource(). 132 // Start by calling startLoad() directly, rather than via requestResource().
142 // This shouldn't crash. 133 // This shouldn't crash.
143 fetcher->startLoad(Resource::create(secureURL, Resource::Raw)); 134 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw));
144 } 135 }
145 136
146 TEST_F(ResourceFetcherTest, UseExistingResource) { 137 TEST_F(ResourceFetcherTest, UseExistingResource) {
147 ResourceFetcher* fetcher = 138 ResourceFetcher* fetcher =
148 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 139 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
149 140
150 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 141 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
151 Resource* resource = Resource::create(url, Resource::Image);
152 memoryCache()->add(resource);
153 ResourceResponse response; 142 ResourceResponse response;
154 response.setURL(url); 143 response.setURL(url);
155 response.setHTTPStatusCode(200); 144 response.setHTTPStatusCode(200);
156 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 145 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
157 resource->responseReceived(response, nullptr); 146 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
158 resource->finish(); 147 url, testImageFilename, WebString::fromUTF8(""),
148 WrappedResourceResponse(response));
159 149
160 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 150 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
161 Resource* newResource = fetcher->requestResource( 151 Resource* resource = ImageResource::fetch(fetchRequest, fetcher);
162 fetchRequest, TestResourceFactory(Resource::Image)); 152 ASSERT_TRUE(resource);
153 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
154 EXPECT_TRUE(resource->isLoaded());
155 EXPECT_TRUE(memoryCache()->contains(resource));
156
157 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
163 EXPECT_EQ(resource, newResource); 158 EXPECT_EQ(resource, newResource);
164 memoryCache()->remove(resource); 159 memoryCache()->remove(resource);
165 } 160 }
166 161
167 TEST_F(ResourceFetcherTest, Vary) { 162 TEST_F(ResourceFetcherTest, Vary) {
168 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 163 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
169 Resource* resource = Resource::create(url, Resource::Raw); 164 Resource* resource = RawResource::create(url, Resource::Raw);
170 memoryCache()->add(resource); 165 memoryCache()->add(resource);
171 ResourceResponse response; 166 ResourceResponse response;
172 response.setURL(url); 167 response.setURL(url);
173 response.setHTTPStatusCode(200); 168 response.setHTTPStatusCode(200);
174 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 169 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
175 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 170 response.setHTTPHeaderField(HTTPNames::Vary, "*");
176 resource->responseReceived(response, nullptr); 171 resource->responseReceived(response, nullptr);
177 resource->finish(); 172 resource->finish();
178 ASSERT_TRUE(resource->hasVaryHeader()); 173 ASSERT_TRUE(resource->hasVaryHeader());
179 174
180 ResourceFetcher* fetcher = 175 ResourceFetcher* fetcher =
181 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 176 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
182 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 177 ResourceRequest resourceRequest(url);
178 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
179 FetchRequest fetchRequest =
180 FetchRequest(resourceRequest, FetchInitiatorInfo());
183 Platform::current()->getURLLoaderMockFactory()->registerURL( 181 Platform::current()->getURLLoaderMockFactory()->registerURL(
184 url, WebURLResponse(), ""); 182 url, WebURLResponse(), "");
185 Resource* newResource = 183 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
186 fetcher->requestResource(fetchRequest, TestResourceFactory());
187 EXPECT_NE(resource, newResource); 184 EXPECT_NE(resource, newResource);
188 newResource->loader()->cancel(); 185 newResource->loader()->cancel();
189 memoryCache()->remove(newResource); 186 memoryCache()->remove(newResource);
190 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 187 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
191 188
192 memoryCache()->remove(resource); 189 memoryCache()->remove(resource);
193 } 190 }
194 191
195 TEST_F(ResourceFetcherTest, VaryOnBack) { 192 TEST_F(ResourceFetcherTest, VaryOnBack) {
196 ResourceFetcherTestMockFetchContext* context = 193 ResourceFetcherTestMockFetchContext* context =
197 ResourceFetcherTestMockFetchContext::create(); 194 ResourceFetcherTestMockFetchContext::create();
198 context->setCachePolicy(CachePolicyHistoryBuffer); 195 context->setCachePolicy(CachePolicyHistoryBuffer);
199 ResourceFetcher* fetcher = ResourceFetcher::create(context); 196 ResourceFetcher* fetcher = ResourceFetcher::create(context);
200 197
201 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 198 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
202 Resource* resource = Resource::create(url, Resource::Raw); 199 Resource* resource = RawResource::create(url, Resource::Raw);
203 memoryCache()->add(resource); 200 memoryCache()->add(resource);
204 ResourceResponse response; 201 ResourceResponse response;
205 response.setURL(url); 202 response.setURL(url);
206 response.setHTTPStatusCode(200); 203 response.setHTTPStatusCode(200);
207 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 204 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
208 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 205 response.setHTTPHeaderField(HTTPNames::Vary, "*");
209 resource->responseReceived(response, nullptr); 206 resource->responseReceived(response, nullptr);
210 resource->finish(); 207 resource->finish();
211 ASSERT_TRUE(resource->hasVaryHeader()); 208 ASSERT_TRUE(resource->hasVaryHeader());
212 209
213 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 210 ResourceRequest resourceRequest(url);
214 Resource* newResource = 211 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
215 fetcher->requestResource(fetchRequest, TestResourceFactory()); 212 FetchRequest fetchRequest =
213 FetchRequest(resourceRequest, FetchInitiatorInfo());
214 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
216 EXPECT_EQ(resource, newResource); 215 EXPECT_EQ(resource, newResource);
217 216
218 memoryCache()->remove(newResource); 217 memoryCache()->remove(newResource);
219 } 218 }
220 219
221 TEST_F(ResourceFetcherTest, VaryImage) { 220 TEST_F(ResourceFetcherTest, VaryImage) {
222 ResourceFetcher* fetcher = 221 ResourceFetcher* fetcher =
223 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 222 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
224 223
225 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 224 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
226 ResourceResponse response; 225 ResourceResponse response;
227 response.setURL(url); 226 response.setURL(url);
228 response.setHTTPStatusCode(200); 227 response.setHTTPStatusCode(200);
229 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 228 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
230 response.setHTTPHeaderField(HTTPNames::Vary, "*"); 229 response.setHTTPHeaderField(HTTPNames::Vary, "*");
231 URLTestHelpers::registerMockedURLLoadWithCustomResponse( 230 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
232 url, testImageFilename, WebString::fromUTF8(""), 231 url, testImageFilename, WebString::fromUTF8(""),
233 WrappedResourceResponse(response)); 232 WrappedResourceResponse(response));
234 233
235 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 234 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
236 Resource* resource = fetcher->requestResource( 235 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
237 fetchRequestOriginal, TestResourceFactory(Resource::Image));
238 ASSERT_TRUE(resource); 236 ASSERT_TRUE(resource);
239 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 237 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
240 ASSERT_TRUE(resource->hasVaryHeader()); 238 ASSERT_TRUE(resource->hasVaryHeader());
241 239
242 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 240 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
243 Resource* newResource = fetcher->requestResource( 241 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
244 fetchRequest, TestResourceFactory(Resource::Image));
245 EXPECT_EQ(resource, newResource); 242 EXPECT_EQ(resource, newResource);
246 243
247 memoryCache()->remove(newResource); 244 memoryCache()->remove(newResource);
248 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 245 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
249 } 246 }
250 247
251 class RequestSameResourceOnComplete 248 class RequestSameResourceOnComplete
252 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, 249 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>,
253 public RawResourceClient { 250 public RawResourceClient {
254 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); 251 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete);
255 252
256 public: 253 public:
257 explicit RequestSameResourceOnComplete(Resource* resource) 254 explicit RequestSameResourceOnComplete(Resource* resource)
258 : m_resource(resource), m_notifyFinishedCalled(false) {} 255 : m_resource(resource), m_notifyFinishedCalled(false) {}
259 256
260 void notifyFinished(Resource* resource) override { 257 void notifyFinished(Resource* resource) override {
261 EXPECT_EQ(m_resource, resource); 258 EXPECT_EQ(m_resource, resource);
262 ResourceFetcherTestMockFetchContext* context = 259 ResourceFetcherTestMockFetchContext* context =
263 ResourceFetcherTestMockFetchContext::create(); 260 ResourceFetcherTestMockFetchContext::create();
264 context->setCachePolicy(CachePolicyRevalidate); 261 context->setCachePolicy(CachePolicyRevalidate);
265 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); 262 ResourceFetcher* fetcher2 = ResourceFetcher::create(context);
266 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); 263 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo());
267 Resource* resource2 = fetcher2->requestResource( 264 Resource* resource2 = ImageResource::fetch(fetchRequest2, fetcher2);
268 fetchRequest2, TestResourceFactory(Resource::Image));
269 EXPECT_EQ(m_resource, resource2); 265 EXPECT_EQ(m_resource, resource2);
270 m_notifyFinishedCalled = true; 266 m_notifyFinishedCalled = true;
271 } 267 }
272 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } 268 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; }
273 269
274 DEFINE_INLINE_TRACE() { 270 DEFINE_INLINE_TRACE() {
275 visitor->trace(m_resource); 271 visitor->trace(m_resource);
276 RawResourceClient::trace(visitor); 272 RawResourceClient::trace(visitor);
277 } 273 }
278 274
279 String debugName() const override { return "RequestSameResourceOnComplete"; } 275 String debugName() const override { return "RequestSameResourceOnComplete"; }
280 276
281 private: 277 private:
282 Member<Resource> m_resource; 278 Member<Resource> m_resource;
283 bool m_notifyFinishedCalled; 279 bool m_notifyFinishedCalled;
284 }; 280 };
285 281
286 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { 282 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) {
287 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 283 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
288 ResourceResponse response; 284 ResourceResponse response;
289 response.setURL(url); 285 response.setURL(url);
290 response.setHTTPStatusCode(200); 286 response.setHTTPStatusCode(200);
291 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); 287 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
292 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); 288 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890");
293 Platform::current()->getURLLoaderMockFactory()->registerURL( 289 URLTestHelpers::registerMockedURLLoadWithCustomResponse(
294 url, WrappedResourceResponse(response), ""); 290 url, testImageFilename, WebString::fromUTF8(""),
295 291 WrappedResourceResponse(response));
296 ResourceFetcher* fetcher1 = 292 ResourceFetcher* fetcher1 =
297 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 293 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
298 ResourceRequest request1(url); 294 ResourceRequest request1(url);
299 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); 295 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache");
300 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); 296 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo());
301 Resource* resource1 = fetcher1->requestResource( 297 Resource* resource1 = ImageResource::fetch(fetchRequest1, fetcher1);
302 fetchRequest1, TestResourceFactory(Resource::Image));
303 Persistent<RequestSameResourceOnComplete> client = 298 Persistent<RequestSameResourceOnComplete> client =
304 new RequestSameResourceOnComplete(resource1); 299 new RequestSameResourceOnComplete(resource1);
305 resource1->addClient(client); 300 resource1->addClient(client);
306 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 301 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
307 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 302 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
308 EXPECT_TRUE(client->notifyFinishedCalled()); 303 EXPECT_TRUE(client->notifyFinishedCalled());
309 resource1->removeClient(client); 304 resource1->removeClient(client);
310 memoryCache()->remove(resource1); 305 memoryCache()->remove(resource1);
311 } 306 }
312 307
313 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) { 308 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) {
314 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff"); 309 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff");
315 ResourceResponse response; 310 ResourceResponse response;
316 response.setURL(url); 311 response.setURL(url);
317 response.setHTTPStatusCode(200); 312 response.setHTTPStatusCode(200);
318 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); 313 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890");
319 Platform::current()->getURLLoaderMockFactory()->registerURL( 314 Platform::current()->getURLLoaderMockFactory()->registerURL(
320 url, WrappedResourceResponse(response), ""); 315 url, WrappedResourceResponse(response), "");
321 316
322 ResourceFetcherTestMockFetchContext* context = 317 ResourceFetcherTestMockFetchContext* context =
323 ResourceFetcherTestMockFetchContext::create(); 318 ResourceFetcherTestMockFetchContext::create();
324 ResourceFetcher* fetcher = ResourceFetcher::create(context); 319 ResourceFetcher* fetcher = ResourceFetcher::create(context);
325 320
326 // Fetch to cache a resource. 321 // Fetch to cache a resource.
327 ResourceRequest request1(url); 322 ResourceRequest request1(url);
328 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); 323 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo());
329 Resource* resource1 = fetcher->requestResource( 324 Resource* resource1 = FontResource::fetch(fetchRequest1, fetcher);
330 fetchRequest1, TestResourceFactory(Resource::Font));
331 ASSERT_TRUE(resource1); 325 ASSERT_TRUE(resource1);
332 fetcher->startLoad(resource1); 326 fetcher->startLoad(resource1);
333 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 327 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
334 EXPECT_TRUE(resource1->isLoaded()); 328 EXPECT_TRUE(resource1->isLoaded());
335 EXPECT_FALSE(resource1->errorOccurred()); 329 EXPECT_FALSE(resource1->errorOccurred());
336 330
337 // Set the context as it is on reloads. 331 // Set the context as it is on reloads.
338 context->setLoadComplete(true); 332 context->setLoadComplete(true);
339 context->setCachePolicy(CachePolicyRevalidate); 333 context->setCachePolicy(CachePolicyRevalidate);
340 334
341 // Revalidate the resource. 335 // Revalidate the resource.
342 ResourceRequest request2(url); 336 ResourceRequest request2(url);
343 FetchRequest fetchRequest2 = FetchRequest(request2, FetchInitiatorInfo()); 337 FetchRequest fetchRequest2 = FetchRequest(request2, FetchInitiatorInfo());
344 Resource* resource2 = fetcher->requestResource( 338 Resource* resource2 = FontResource::fetch(fetchRequest2, fetcher);
345 fetchRequest2, TestResourceFactory(Resource::Font));
346 ASSERT_TRUE(resource2); 339 ASSERT_TRUE(resource2);
347 EXPECT_EQ(resource1, resource2); 340 EXPECT_EQ(resource1, resource2);
348 EXPECT_TRUE(resource2->isCacheValidator()); 341 EXPECT_TRUE(resource2->isCacheValidator());
349 EXPECT_TRUE(resource2->stillNeedsLoad()); 342 EXPECT_TRUE(resource2->stillNeedsLoad());
350 343
351 // Fetch the same resource again before actual load operation starts. 344 // Fetch the same resource again before actual load operation starts.
352 ResourceRequest request3(url); 345 ResourceRequest request3(url);
353 FetchRequest fetchRequest3 = FetchRequest(request3, FetchInitiatorInfo()); 346 FetchRequest fetchRequest3 = FetchRequest(request3, FetchInitiatorInfo());
354 Resource* resource3 = fetcher->requestResource( 347 Resource* resource3 = FontResource::fetch(fetchRequest3, fetcher);
355 fetchRequest3, TestResourceFactory(Resource::Font));
356 ASSERT_TRUE(resource3); 348 ASSERT_TRUE(resource3);
357 EXPECT_EQ(resource2, resource3); 349 EXPECT_EQ(resource2, resource3);
358 EXPECT_TRUE(resource3->isCacheValidator()); 350 EXPECT_TRUE(resource3->isCacheValidator());
359 EXPECT_TRUE(resource3->stillNeedsLoad()); 351 EXPECT_TRUE(resource3->stillNeedsLoad());
360 352
361 // startLoad() can be called from any initiator. Here, call it from the 353 // startLoad() can be called from any initiator. Here, call it from the
362 // latter. 354 // latter.
363 fetcher->startLoad(resource3); 355 fetcher->startLoad(resource3);
364 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 356 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
365 EXPECT_TRUE(resource3->isLoaded()); 357 EXPECT_TRUE(resource3->isLoaded());
366 EXPECT_FALSE(resource3->errorOccurred()); 358 EXPECT_FALSE(resource3->errorOccurred());
367 EXPECT_TRUE(resource2->isLoaded()); 359 EXPECT_TRUE(resource2->isLoaded());
368 EXPECT_FALSE(resource2->errorOccurred()); 360 EXPECT_FALSE(resource2->errorOccurred());
369 361
370 memoryCache()->remove(resource1); 362 memoryCache()->remove(resource1);
371 } 363 }
372 364
373 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { 365 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) {
374 ResourceFetcher* fetcher = 366 ResourceFetcher* fetcher =
375 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 367 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
376 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); 368 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo"));
369 request.setRequestContext(WebURLRequest::RequestContextVideo);
377 ResourceLoaderOptions options; 370 ResourceLoaderOptions options;
378 options.dataBufferingPolicy = DoNotBufferData; 371 options.dataBufferingPolicy = DoNotBufferData;
379 FetchRequest fetchRequest = 372 FetchRequest fetchRequest =
380 FetchRequest(request, FetchInitiatorTypeNames::internal, options); 373 FetchRequest(request, FetchInitiatorTypeNames::internal, options);
381 Resource* resource1 = fetcher->requestResource( 374 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher);
382 fetchRequest, TestResourceFactory(Resource::Media)); 375 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher);
383 Resource* resource2 = fetcher->requestResource(
384 fetchRequest, TestResourceFactory(Resource::Media));
385 EXPECT_NE(resource1, resource2); 376 EXPECT_NE(resource1, resource2);
386 memoryCache()->remove(resource2); 377 memoryCache()->remove(resource2);
387 } 378 }
388 379
389 class ServeRequestsOnCompleteClient final 380 class ServeRequestsOnCompleteClient final
390 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>, 381 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>,
391 public RawResourceClient { 382 public RawResourceClient {
392 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient); 383 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient);
393 384
394 public: 385 public:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 // This emulates a modal dialog triggering a nested run loop inside 423 // This emulates a modal dialog triggering a nested run loop inside
433 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its 424 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its
434 // WebURLLoader before notifying its clients, a nested run loop may send a 425 // WebURLLoader before notifying its clients, a nested run loop may send a
435 // network response, leading to an invalid state transition in ResourceLoader. 426 // network response, leading to an invalid state transition in ResourceLoader.
436 TEST_F(ResourceFetcherTest, ResponseOnCancel) { 427 TEST_F(ResourceFetcherTest, ResponseOnCancel) {
437 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 428 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
438 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); 429 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");
439 430
440 ResourceFetcher* fetcher = 431 ResourceFetcher* fetcher =
441 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 432 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
442 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 433 ResourceRequest resourceRequest(url);
443 Resource* resource = fetcher->requestResource( 434 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
444 fetchRequest, TestResourceFactory(Resource::Raw)); 435 FetchRequest fetchRequest =
436 FetchRequest(resourceRequest, FetchInitiatorInfo());
437 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
445 Persistent<ServeRequestsOnCompleteClient> client = 438 Persistent<ServeRequestsOnCompleteClient> client =
446 new ServeRequestsOnCompleteClient(); 439 new ServeRequestsOnCompleteClient();
447 resource->addClient(client); 440 resource->addClient(client);
448 resource->loader()->cancel(); 441 resource->loader()->cancel();
449 resource->removeClient(client); 442 resource->removeClient(client);
450 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 443 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
451 } 444 }
452 445
453 class ScopedMockRedirectRequester { 446 class ScopedMockRedirectRequester {
454 STACK_ALLOCATED(); 447 STACK_ALLOCATED();
(...skipping 17 matching lines...) Expand all
472 465
473 void registerFinalResource(const WebString& url) { 466 void registerFinalResource(const WebString& url) {
474 KURL finalURL(ParsedURLString, url); 467 KURL finalURL(ParsedURLString, url);
475 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename); 468 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename);
476 } 469 }
477 470
478 void request(const WebString& url) { 471 void request(const WebString& url) {
479 DCHECK(!m_context); 472 DCHECK(!m_context);
480 m_context = ResourceFetcherTestMockFetchContext::create(); 473 m_context = ResourceFetcherTestMockFetchContext::create();
481 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); 474 ResourceFetcher* fetcher = ResourceFetcher::create(m_context);
475 ResourceRequest resourceRequest(url);
476 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
482 FetchRequest fetchRequest = 477 FetchRequest fetchRequest =
483 FetchRequest(ResourceRequest(url), FetchInitiatorInfo()); 478 FetchRequest(resourceRequest, FetchInitiatorInfo());
484 fetcher->requestResource(fetchRequest, TestResourceFactory()); 479 RawResource::fetch(fetchRequest, fetcher);
485 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 480 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
486 } 481 }
487 482
488 void cleanUp() { 483 void cleanUp() {
489 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); 484 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
490 memoryCache()->evictResources(); 485 memoryCache()->evictResources();
491 } 486 }
492 487
493 ResourceFetcherTestMockFetchContext* context() const { return m_context; } 488 ResourceFetcherTestMockFetchContext* context() const { return m_context; }
494 489
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 528
534 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); 529 EXPECT_EQ(testImageSize, requester.context()->getTransferSize());
535 } 530 }
536 531
537 TEST_F(ResourceFetcherTest, SynchronousRequest) { 532 TEST_F(ResourceFetcherTest, SynchronousRequest) {
538 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 533 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
539 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); 534 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");
540 535
541 ResourceFetcher* fetcher = 536 ResourceFetcher* fetcher =
542 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 537 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
543 FetchRequest request(url, FetchInitiatorInfo()); 538 ResourceRequest resourceRequest(url);
544 request.makeSynchronous(); 539 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
545 Resource* resource = fetcher->requestResource(request, TestResourceFactory()); 540 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo());
541 fetchRequest.makeSynchronous();
542 Resource* resource = RawResource::fetch(fetchRequest, fetcher);
546 EXPECT_TRUE(resource->isLoaded()); 543 EXPECT_TRUE(resource->isLoaded());
547 EXPECT_EQ(ResourceLoadPriorityHighest, 544 EXPECT_EQ(ResourceLoadPriorityHighest,
548 resource->resourceRequest().priority()); 545 resource->resourceRequest().priority());
549 546
550 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 547 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
551 memoryCache()->remove(resource); 548 memoryCache()->remove(resource);
552 } 549 }
553 550
554 TEST_F(ResourceFetcherTest, PreloadImageTwice) { 551 TEST_F(ResourceFetcherTest, PreloadImageTwice) {
555 ResourceFetcher* fetcher = 552 ResourceFetcher* fetcher =
556 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 553 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
557 554
558 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 555 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
559 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); 556 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");
560 557
561 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 558 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
562 Resource* resource = fetcher->requestResource( 559 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
563 fetchRequestOriginal, TestResourceFactory(Resource::Image));
564 ASSERT_TRUE(resource); 560 ASSERT_TRUE(resource);
565 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 561 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
566 fetcher->preloadStarted(resource); 562 fetcher->preloadStarted(resource);
567 563
568 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 564 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
569 Resource* newResource = fetcher->requestResource( 565 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
570 fetchRequest, TestResourceFactory(Resource::Image));
571 EXPECT_EQ(resource, newResource); 566 EXPECT_EQ(resource, newResource);
572 fetcher->preloadStarted(resource); 567 fetcher->preloadStarted(resource);
573 568
574 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); 569 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads);
575 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 570 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
576 EXPECT_FALSE(memoryCache()->contains(resource)); 571 EXPECT_FALSE(memoryCache()->contains(resource));
577 EXPECT_FALSE(resource->isPreloaded()); 572 EXPECT_FALSE(resource->isPreloaded());
578 } 573 }
579 574
580 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) { 575 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) {
581 ResourceFetcher* fetcher = 576 ResourceFetcher* fetcher =
582 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 577 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
583 578
584 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 579 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
585 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); 580 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");
586 581
587 // Link preload preload scanner 582 // Link preload preload scanner
588 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 583 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
589 fetchRequestOriginal.setLinkPreload(true); 584 fetchRequestOriginal.setLinkPreload(true);
590 Resource* resource = fetcher->requestResource( 585 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
591 fetchRequestOriginal, TestResourceFactory(Resource::Image));
592 ASSERT_TRUE(resource); 586 ASSERT_TRUE(resource);
593 EXPECT_TRUE(resource->isLinkPreload()); 587 EXPECT_TRUE(resource->isLinkPreload());
594 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 588 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
595 fetcher->preloadStarted(resource); 589 fetcher->preloadStarted(resource);
596 590
597 // Image preload scanner 591 // Image preload scanner
598 FetchRequest fetchRequestPreloadScanner = 592 FetchRequest fetchRequestPreloadScanner =
599 FetchRequest(url, FetchInitiatorInfo()); 593 FetchRequest(url, FetchInitiatorInfo());
600 Resource* imgPreloadScannerResource = fetcher->requestResource( 594 Resource* imgPreloadScannerResource =
601 fetchRequestPreloadScanner, TestResourceFactory(Resource::Image)); 595 ImageResource::fetch(fetchRequestPreloadScanner, fetcher);
602 EXPECT_EQ(resource, imgPreloadScannerResource); 596 EXPECT_EQ(resource, imgPreloadScannerResource);
603 EXPECT_FALSE(resource->isLinkPreload()); 597 EXPECT_FALSE(resource->isLinkPreload());
604 fetcher->preloadStarted(resource); 598 fetcher->preloadStarted(resource);
605 599
606 // Image created by parser 600 // Image created by parser
607 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 601 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
608 Resource* newResource = fetcher->requestResource( 602 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
609 fetchRequest, TestResourceFactory(Resource::Image));
610 Persistent<MockResourceClient> client = new MockResourceClient(newResource); 603 Persistent<MockResourceClient> client = new MockResourceClient(newResource);
611 EXPECT_EQ(resource, newResource); 604 EXPECT_EQ(resource, newResource);
612 EXPECT_FALSE(resource->isLinkPreload()); 605 EXPECT_FALSE(resource->isLinkPreload());
613 606
614 // DCL reached 607 // DCL reached
615 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 608 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
616 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 609 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
617 EXPECT_TRUE(memoryCache()->contains(resource)); 610 EXPECT_TRUE(memoryCache()->contains(resource));
618 EXPECT_FALSE(resource->isPreloaded()); 611 EXPECT_FALSE(resource->isPreloaded());
619 } 612 }
620 613
621 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) { 614 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) {
622 ResourceFetcher* fetcher = 615 ResourceFetcher* fetcher =
623 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 616 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
624 ResourceFetcher* fetcher2 = 617 ResourceFetcher* fetcher2 =
625 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 618 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
626 619
627 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); 620 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png");
628 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); 621 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png");
629 622
630 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); 623 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
631 fetchRequestOriginal.setLinkPreload(true); 624 fetchRequestOriginal.setLinkPreload(true);
632 Resource* resource = fetcher->requestResource( 625 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher);
633 fetchRequestOriginal, TestResourceFactory(Resource::Image));
634 ASSERT_TRUE(resource); 626 ASSERT_TRUE(resource);
635 EXPECT_TRUE(resource->isLinkPreload()); 627 EXPECT_TRUE(resource->isLinkPreload());
636 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 628 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
637 fetcher->preloadStarted(resource); 629 fetcher->preloadStarted(resource);
638 630
639 FetchRequest fetchRequestSecond = FetchRequest(url, FetchInitiatorInfo()); 631 FetchRequest fetchRequestSecond = FetchRequest(url, FetchInitiatorInfo());
640 fetchRequestSecond.setLinkPreload(true); 632 fetchRequestSecond.setLinkPreload(true);
641 Resource* secondResource = fetcher2->requestResource( 633 Resource* secondResource = ImageResource::fetch(fetchRequestSecond, fetcher2);
642 fetchRequestSecond, TestResourceFactory(Resource::Image));
643 ASSERT_TRUE(secondResource); 634 ASSERT_TRUE(secondResource);
644 EXPECT_TRUE(secondResource->isLinkPreload()); 635 EXPECT_TRUE(secondResource->isLinkPreload());
645 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); 636 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
646 fetcher2->preloadStarted(secondResource); 637 fetcher2->preloadStarted(secondResource);
647 638
648 // Link rel preload scanner 639 // Link rel preload scanner
649 FetchRequest fetchRequestLinkPreloadScanner = 640 FetchRequest fetchRequestLinkPreloadScanner =
650 FetchRequest(url, FetchInitiatorInfo()); 641 FetchRequest(url, FetchInitiatorInfo());
651 fetchRequestLinkPreloadScanner.setLinkPreload(true); 642 fetchRequestLinkPreloadScanner.setLinkPreload(true);
652 Resource* linkPreloadScannerResource = fetcher->requestResource( 643 Resource* linkPreloadScannerResource =
653 fetchRequestLinkPreloadScanner, TestResourceFactory(Resource::Image)); 644 ImageResource::fetch(fetchRequestLinkPreloadScanner, fetcher);
654 EXPECT_EQ(resource, linkPreloadScannerResource); 645 EXPECT_EQ(resource, linkPreloadScannerResource);
655 EXPECT_TRUE(resource->isLinkPreload()); 646 EXPECT_TRUE(resource->isLinkPreload());
656 fetcher->preloadStarted(resource); 647 fetcher->preloadStarted(resource);
657 648
658 // Image preload scanner 649 // Image preload scanner
659 FetchRequest fetchRequestPreloadScanner = 650 FetchRequest fetchRequestPreloadScanner =
660 FetchRequest(url, FetchInitiatorInfo()); 651 FetchRequest(url, FetchInitiatorInfo());
661 Resource* imgPreloadScannerResource = fetcher->requestResource( 652 Resource* imgPreloadScannerResource =
662 fetchRequestPreloadScanner, TestResourceFactory(Resource::Image)); 653 ImageResource::fetch(fetchRequestPreloadScanner, fetcher);
663 EXPECT_EQ(resource, imgPreloadScannerResource); 654 EXPECT_EQ(resource, imgPreloadScannerResource);
664 EXPECT_FALSE(resource->isLinkPreload()); 655 EXPECT_FALSE(resource->isLinkPreload());
665 fetcher->preloadStarted(resource); 656 fetcher->preloadStarted(resource);
666 657
667 // Image preload scanner on the second fetcher 658 // Image preload scanner on the second fetcher
668 FetchRequest fetchRequestPreloadScanner2 = 659 FetchRequest fetchRequestPreloadScanner2 =
669 FetchRequest(url, FetchInitiatorInfo()); 660 FetchRequest(url, FetchInitiatorInfo());
670 Resource* imgPreloadScannerResource2 = fetcher2->requestResource( 661 Resource* imgPreloadScannerResource2 =
671 fetchRequestPreloadScanner2, TestResourceFactory(Resource::Image)); 662 ImageResource::fetch(fetchRequestPreloadScanner2, fetcher2);
672 EXPECT_EQ(resource, imgPreloadScannerResource2); 663 EXPECT_EQ(resource, imgPreloadScannerResource2);
673 EXPECT_FALSE(resource->isLinkPreload()); 664 EXPECT_FALSE(resource->isLinkPreload());
674 fetcher2->preloadStarted(resource); 665 fetcher2->preloadStarted(resource);
675 666
676 // Image created by parser 667 // Image created by parser
677 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 668 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
678 Resource* newResource = fetcher->requestResource( 669 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher);
679 fetchRequest, TestResourceFactory(Resource::Image));
680 Persistent<MockResourceClient> client = new MockResourceClient(newResource); 670 Persistent<MockResourceClient> client = new MockResourceClient(newResource);
681 EXPECT_EQ(resource, newResource); 671 EXPECT_EQ(resource, newResource);
682 EXPECT_FALSE(resource->isLinkPreload()); 672 EXPECT_FALSE(resource->isLinkPreload());
683 673
684 // Image created by parser on the second fetcher 674 // Image created by parser on the second fetcher
685 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo()); 675 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo());
686 Resource* newResource2 = fetcher2->requestResource( 676 Resource* newResource2 = ImageResource::fetch(fetchRequest, fetcher2);
687 fetchRequest, TestResourceFactory(Resource::Image));
688 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2); 677 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2);
689 EXPECT_EQ(resource, newResource2); 678 EXPECT_EQ(resource, newResource2);
690 EXPECT_FALSE(resource->isLinkPreload()); 679 EXPECT_FALSE(resource->isLinkPreload());
691 // DCL reached on first fetcher 680 // DCL reached on first fetcher
692 EXPECT_TRUE(resource->isPreloaded()); 681 EXPECT_TRUE(resource->isPreloaded());
693 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 682 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
694 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 683 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
695 EXPECT_TRUE(memoryCache()->contains(resource)); 684 EXPECT_TRUE(memoryCache()->contains(resource));
696 EXPECT_TRUE(resource->isPreloaded()); 685 EXPECT_TRUE(resource->isPreloaded());
697 686
698 // DCL reached on second fetcher 687 // DCL reached on second fetcher
699 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); 688 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads);
700 EXPECT_TRUE(memoryCache()->contains(resource)); 689 EXPECT_TRUE(memoryCache()->contains(resource));
701 EXPECT_FALSE(resource->isPreloaded()); 690 EXPECT_FALSE(resource->isPreloaded());
702 } 691 }
703 692
704 TEST_F(ResourceFetcherTest, Revalidate304) { 693 TEST_F(ResourceFetcherTest, Revalidate304) {
705 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); 694 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html");
706 Resource* resource = Resource::create(url, Resource::Raw); 695 Resource* resource = RawResource::create(url, Resource::Raw);
707 memoryCache()->add(resource); 696 memoryCache()->add(resource);
708 ResourceResponse response; 697 ResourceResponse response;
709 response.setURL(url); 698 response.setURL(url);
710 response.setHTTPStatusCode(304); 699 response.setHTTPStatusCode(304);
711 response.setHTTPHeaderField("etag", "1234567890"); 700 response.setHTTPHeaderField("etag", "1234567890");
712 resource->responseReceived(response, nullptr); 701 resource->responseReceived(response, nullptr);
713 resource->finish(); 702 resource->finish();
714 703
715 ResourceFetcher* fetcher = 704 ResourceFetcher* fetcher =
716 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); 705 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
717 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); 706 ResourceRequest resourceRequest(url);
707 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal);
708 FetchRequest fetchRequest =
709 FetchRequest(resourceRequest, FetchInitiatorInfo());
718 Platform::current()->getURLLoaderMockFactory()->registerURL( 710 Platform::current()->getURLLoaderMockFactory()->registerURL(
719 url, WebURLResponse(), ""); 711 url, WebURLResponse(), "");
720 Resource* newResource = fetcher->requestResource( 712 Resource* newResource = RawResource::fetch(fetchRequest, fetcher);
721 fetchRequest, TestResourceFactory(Resource::Raw));
722 fetcher->stopFetching(); 713 fetcher->stopFetching();
723 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); 714 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
724 715
725 EXPECT_NE(resource, newResource); 716 EXPECT_NE(resource, newResource);
726 } 717 }
727 718
728 } // namespace blink 719 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/fetch/Resource.h ('k') | third_party/WebKit/Source/core/fetch/ResourceTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698