OLD | NEW |
1 /* | 1 /* |
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
7 | 7 |
8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
(...skipping 13 matching lines...) Expand all Loading... |
24 pages from the web. It has a memory cache for these objects. | 24 pages from the web. It has a memory cache for these objects. |
25 */ | 25 */ |
26 | 26 |
27 #include "config.h" | 27 #include "config.h" |
28 #include "core/loader/cache/ResourceFetcher.h" | 28 #include "core/loader/cache/ResourceFetcher.h" |
29 | 29 |
30 #include "bindings/v8/ScriptController.h" | 30 #include "bindings/v8/ScriptController.h" |
31 #include "core/dom/Document.h" | 31 #include "core/dom/Document.h" |
32 #include "core/html/HTMLElement.h" | 32 #include "core/html/HTMLElement.h" |
33 #include "core/html/HTMLFrameOwnerElement.h" | 33 #include "core/html/HTMLFrameOwnerElement.h" |
| 34 #include "core/html/HTMLImport.h" |
34 #include "core/inspector/InspectorInstrumentation.h" | 35 #include "core/inspector/InspectorInstrumentation.h" |
35 #include "core/loader/DocumentLoader.h" | 36 #include "core/loader/DocumentLoader.h" |
36 #include "core/loader/FrameLoader.h" | 37 #include "core/loader/FrameLoader.h" |
37 #include "core/loader/FrameLoaderClient.h" | 38 #include "core/loader/FrameLoaderClient.h" |
38 #include "core/loader/PingLoader.h" | 39 #include "core/loader/PingLoader.h" |
39 #include "core/loader/UniqueIdentifier.h" | 40 #include "core/loader/UniqueIdentifier.h" |
40 #include "core/loader/appcache/ApplicationCacheHost.h" | 41 #include "core/loader/appcache/ApplicationCacheHost.h" |
41 #include "core/loader/cache/CachedCSSStyleSheet.h" | 42 #include "core/loader/cache/CachedCSSStyleSheet.h" |
42 #include "core/loader/cache/CachedDocument.h" | 43 #include "core/loader/cache/CachedDocument.h" |
43 #include "core/loader/cache/CachedFont.h" | 44 #include "core/loader/cache/CachedFont.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 case CachedResource::XSLStyleSheet: | 87 case CachedResource::XSLStyleSheet: |
87 return new CachedXSLStyleSheet(request); | 88 return new CachedXSLStyleSheet(request); |
88 case CachedResource::LinkPrefetch: | 89 case CachedResource::LinkPrefetch: |
89 return new CachedResource(request, CachedResource::LinkPrefetch); | 90 return new CachedResource(request, CachedResource::LinkPrefetch); |
90 case CachedResource::LinkSubresource: | 91 case CachedResource::LinkSubresource: |
91 return new CachedResource(request, CachedResource::LinkSubresource); | 92 return new CachedResource(request, CachedResource::LinkSubresource); |
92 case CachedResource::TextTrackResource: | 93 case CachedResource::TextTrackResource: |
93 return new CachedTextTrack(request); | 94 return new CachedTextTrack(request); |
94 case CachedResource::ShaderResource: | 95 case CachedResource::ShaderResource: |
95 return new CachedShader(request); | 96 return new CachedShader(request); |
| 97 case CachedResource::ImportResource: |
| 98 return new CachedRawResource(request, type); |
96 } | 99 } |
| 100 |
97 ASSERT_NOT_REACHED(); | 101 ASSERT_NOT_REACHED(); |
98 return 0; | 102 return 0; |
99 } | 103 } |
100 | 104 |
101 static ResourceLoadPriority loadPriority(CachedResource::Type type, const FetchR
equest& request) | 105 static ResourceLoadPriority loadPriority(CachedResource::Type type, const FetchR
equest& request) |
102 { | 106 { |
103 if (request.priority() != ResourceLoadPriorityUnresolved) | 107 if (request.priority() != ResourceLoadPriorityUnresolved) |
104 return request.priority(); | 108 return request.priority(); |
105 | 109 |
106 switch (type) { | 110 switch (type) { |
107 case CachedResource::MainResource: | 111 case CachedResource::MainResource: |
108 return ResourceLoadPriorityVeryHigh; | 112 return ResourceLoadPriorityVeryHigh; |
109 case CachedResource::CSSStyleSheet: | 113 case CachedResource::CSSStyleSheet: |
110 return ResourceLoadPriorityHigh; | 114 return ResourceLoadPriorityHigh; |
111 case CachedResource::Script: | 115 case CachedResource::Script: |
112 case CachedResource::FontResource: | 116 case CachedResource::FontResource: |
113 case CachedResource::RawResource: | 117 case CachedResource::RawResource: |
| 118 case CachedResource::ImportResource: |
114 return ResourceLoadPriorityMedium; | 119 return ResourceLoadPriorityMedium; |
115 case CachedResource::ImageResource: | 120 case CachedResource::ImageResource: |
116 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad
PriorityLow; | 121 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad
PriorityLow; |
117 case CachedResource::XSLStyleSheet: | 122 case CachedResource::XSLStyleSheet: |
118 return ResourceLoadPriorityHigh; | 123 return ResourceLoadPriorityHigh; |
119 case CachedResource::SVGDocumentResource: | 124 case CachedResource::SVGDocumentResource: |
120 return ResourceLoadPriorityLow; | 125 return ResourceLoadPriorityLow; |
121 case CachedResource::LinkPrefetch: | 126 case CachedResource::LinkPrefetch: |
122 return ResourceLoadPriorityVeryLow; | 127 return ResourceLoadPriorityVeryLow; |
123 case CachedResource::LinkSubresource: | 128 case CachedResource::LinkSubresource: |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 } | 186 } |
182 | 187 |
183 CachedResource* ResourceFetcher::cachedResource(const KURL& resourceURL) const | 188 CachedResource* ResourceFetcher::cachedResource(const KURL& resourceURL) const |
184 { | 189 { |
185 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(resourceURL); | 190 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(resourceURL); |
186 return m_documentResources.get(url).get(); | 191 return m_documentResources.get(url).get(); |
187 } | 192 } |
188 | 193 |
189 Frame* ResourceFetcher::frame() const | 194 Frame* ResourceFetcher::frame() const |
190 { | 195 { |
191 return m_documentLoader ? m_documentLoader->frame() : 0; | 196 if (m_documentLoader) |
| 197 return m_documentLoader->frame(); |
| 198 if (m_document && m_document->import()) |
| 199 return m_document->import()->frame(); |
| 200 return 0; |
192 } | 201 } |
193 | 202 |
194 CachedResourceHandle<CachedImage> ResourceFetcher::requestImage(FetchRequest& re
quest) | 203 CachedResourceHandle<CachedImage> ResourceFetcher::requestImage(FetchRequest& re
quest) |
195 { | 204 { |
196 if (Frame* f = frame()) { | 205 if (Frame* f = frame()) { |
197 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD
ismissal) { | 206 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD
ismissal) { |
198 KURL requestURL = request.resourceRequest().url(); | 207 KURL requestURL = request.resourceRequest().url(); |
199 if (requestURL.isValid() && canRequest(CachedResource::ImageResource
, requestURL, request.options(), request.forPreload())) | 208 if (requestURL.isValid() && canRequest(CachedResource::ImageResource
, requestURL, request.options(), request.forPreload())) |
200 PingLoader::loadImage(f, requestURL); | 209 PingLoader::loadImage(f, requestURL); |
201 return 0; | 210 return 0; |
(...skipping 27 matching lines...) Expand all Loading... |
229 CachedResourceHandle<CachedTextTrack> ResourceFetcher::requestTextTrack(FetchReq
uest& request) | 238 CachedResourceHandle<CachedTextTrack> ResourceFetcher::requestTextTrack(FetchReq
uest& request) |
230 { | 239 { |
231 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra
ckResource, request).get()); | 240 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra
ckResource, request).get()); |
232 } | 241 } |
233 | 242 |
234 CachedResourceHandle<CachedShader> ResourceFetcher::requestShader(FetchRequest&
request) | 243 CachedResourceHandle<CachedShader> ResourceFetcher::requestShader(FetchRequest&
request) |
235 { | 244 { |
236 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso
urce, request).get()); | 245 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso
urce, request).get()); |
237 } | 246 } |
238 | 247 |
| 248 CachedResourceHandle<CachedRawResource> ResourceFetcher::requestImport(FetchRequ
est& request) |
| 249 { |
| 250 return static_cast<CachedRawResource*>(requestResource(CachedResource::Impor
tResource, request).get()); |
| 251 } |
| 252 |
239 CachedResourceHandle<CachedCSSStyleSheet> ResourceFetcher::requestCSSStyleSheet(
FetchRequest& request) | 253 CachedResourceHandle<CachedCSSStyleSheet> ResourceFetcher::requestCSSStyleSheet(
FetchRequest& request) |
240 { | 254 { |
241 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS
StyleSheet, request).get()); | 255 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS
StyleSheet, request).get()); |
242 } | 256 } |
243 | 257 |
244 CachedResourceHandle<CachedCSSStyleSheet> ResourceFetcher::requestUserCSSStyleSh
eet(FetchRequest& request) | 258 CachedResourceHandle<CachedCSSStyleSheet> ResourceFetcher::requestUserCSSStyleSh
eet(FetchRequest& request) |
245 { | 259 { |
246 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq
uest().url()); | 260 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq
uest().url()); |
247 | 261 |
248 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { | 262 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 return static_cast<CachedRawResource*>(requestResource(CachedResource::MainR
esource, request).get()); | 301 return static_cast<CachedRawResource*>(requestResource(CachedResource::MainR
esource, request).get()); |
288 } | 302 } |
289 | 303 |
290 bool ResourceFetcher::checkInsecureContent(CachedResource::Type type, const KURL
& url) const | 304 bool ResourceFetcher::checkInsecureContent(CachedResource::Type type, const KURL
& url) const |
291 { | 305 { |
292 switch (type) { | 306 switch (type) { |
293 case CachedResource::Script: | 307 case CachedResource::Script: |
294 case CachedResource::XSLStyleSheet: | 308 case CachedResource::XSLStyleSheet: |
295 case CachedResource::SVGDocumentResource: | 309 case CachedResource::SVGDocumentResource: |
296 case CachedResource::CSSStyleSheet: | 310 case CachedResource::CSSStyleSheet: |
| 311 case CachedResource::ImportResource: |
297 // These resource can inject script into the current document (Script, | 312 // These resource can inject script into the current document (Script, |
298 // XSL) or exfiltrate the content of the current document (CSS). | 313 // XSL) or exfiltrate the content of the current document (CSS). |
299 if (Frame* f = frame()) { | 314 if (Frame* f = frame()) { |
300 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc
ument->securityOrigin(), url)) | 315 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc
ument->securityOrigin(), url)) |
301 return false; | 316 return false; |
302 } | 317 } |
303 | 318 |
304 break; | 319 break; |
305 case CachedResource::TextTrackResource: | 320 case CachedResource::TextTrackResource: |
306 case CachedResource::ShaderResource: | 321 case CachedResource::ShaderResource: |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 case CachedResource::MainResource: | 358 case CachedResource::MainResource: |
344 case CachedResource::ImageResource: | 359 case CachedResource::ImageResource: |
345 case CachedResource::CSSStyleSheet: | 360 case CachedResource::CSSStyleSheet: |
346 case CachedResource::Script: | 361 case CachedResource::Script: |
347 case CachedResource::FontResource: | 362 case CachedResource::FontResource: |
348 case CachedResource::RawResource: | 363 case CachedResource::RawResource: |
349 case CachedResource::LinkPrefetch: | 364 case CachedResource::LinkPrefetch: |
350 case CachedResource::LinkSubresource: | 365 case CachedResource::LinkSubresource: |
351 case CachedResource::TextTrackResource: | 366 case CachedResource::TextTrackResource: |
352 case CachedResource::ShaderResource: | 367 case CachedResource::ShaderResource: |
| 368 case CachedResource::ImportResource: |
353 // By default these types of resources can be loaded from any origin. | 369 // By default these types of resources can be loaded from any origin. |
354 // FIXME: Are we sure about CachedResource::FontResource? | 370 // FIXME: Are we sure about CachedResource::FontResource? |
355 if (options.requestOriginPolicy == RestrictToSameOrigin && !m_document->
securityOrigin()->canRequest(url)) { | 371 if (options.requestOriginPolicy == RestrictToSameOrigin && !m_document->
securityOrigin()->canRequest(url)) { |
356 printAccessDeniedMessage(url); | 372 printAccessDeniedMessage(url); |
357 return false; | 373 return false; |
358 } | 374 } |
359 break; | 375 break; |
360 case CachedResource::SVGDocumentResource: | 376 case CachedResource::SVGDocumentResource: |
361 case CachedResource::XSLStyleSheet: | 377 case CachedResource::XSLStyleSheet: |
362 if (!m_document->securityOrigin()->canRequest(url)) { | 378 if (!m_document->securityOrigin()->canRequest(url)) { |
363 printAccessDeniedMessage(url); | 379 printAccessDeniedMessage(url); |
364 return false; | 380 return false; |
365 } | 381 } |
366 break; | 382 break; |
367 } | 383 } |
368 | 384 |
369 switch (type) { | 385 switch (type) { |
370 case CachedResource::XSLStyleSheet: | 386 case CachedResource::XSLStyleSheet: |
371 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) | 387 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) |
372 return false; | 388 return false; |
373 break; | 389 break; |
374 case CachedResource::Script: | 390 case CachedResource::Script: |
| 391 case CachedResource::ImportResource: |
375 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) | 392 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) |
376 return false; | 393 return false; |
377 | 394 |
378 if (frame()) { | 395 if (frame()) { |
379 Settings* settings = frame()->settings(); | 396 Settings* settings = frame()->settings(); |
380 if (!frame()->loader()->client()->allowScriptFromSource(!settings ||
settings->isScriptEnabled(), url)) { | 397 if (!frame()->loader()->client()->allowScriptFromSource(!settings ||
settings->isScriptEnabled(), url)) { |
381 frame()->loader()->client()->didNotAllowScript(); | 398 frame()->loader()->client()->didNotAllowScript(); |
382 return false; | 399 return false; |
383 } | 400 } |
384 } | 401 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 442 |
426 bool ResourceFetcher::canAccess(CachedResource* resource) | 443 bool ResourceFetcher::canAccess(CachedResource* resource) |
427 { | 444 { |
428 // Redirects can change the response URL different from one of request. | 445 // Redirects can change the response URL different from one of request. |
429 if (!canRequest(resource->type(), resource->response().url(), resource->opti
ons(), false)) | 446 if (!canRequest(resource->type(), resource->response().url(), resource->opti
ons(), false)) |
430 return false; | 447 return false; |
431 | 448 |
432 String error; | 449 String error; |
433 switch (resource->type()) { | 450 switch (resource->type()) { |
434 case CachedResource::Script: | 451 case CachedResource::Script: |
435 case CachedResource::RawResource: | 452 case CachedResource::ImportResource: |
436 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna
bled | 453 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna
bled |
437 && !m_document->securityOrigin()->canRequest(resource->response().ur
l()) | 454 && !m_document->securityOrigin()->canRequest(resource->response().ur
l()) |
438 && !resource->passesAccessControlCheck(m_document->securityOrigin(),
error)) { | 455 && !resource->passesAccessControlCheck(m_document->securityOrigin(),
error)) { |
439 m_document->addConsoleMessage(JSMessageSource, ErrorMessageLevel, "S
cript from origin '" + SecurityOrigin::create(resource->response().url())->toStr
ing() + "' has been blocked from loading by Cross-Origin Resource Sharing policy
: " + error); | 456 m_document->addConsoleMessage(JSMessageSource, ErrorMessageLevel, "S
cript from origin '" + SecurityOrigin::create(resource->response().url())->toStr
ing() + "' has been blocked from loading by Cross-Origin Resource Sharing policy
: " + error); |
440 return false; | 457 return false; |
441 } | 458 } |
442 | 459 |
443 break; | 460 break; |
444 default: | 461 default: |
445 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources | 462 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources |
446 return false; | 463 return false; |
447 } | 464 } |
448 | 465 |
449 return true; | 466 return true; |
450 } | 467 } |
451 | 468 |
| 469 bool ResourceFetcher::shouldLoadNewResource() const |
| 470 { |
| 471 if (!frame()) |
| 472 return false; |
| 473 if (m_documentLoader) { |
| 474 if (m_documentLoader != frame()->loader()->activeDocumentLoader()) |
| 475 return false; |
| 476 if (m_documentLoader->isStopping()) |
| 477 return false; |
| 478 } |
| 479 |
| 480 return true; |
| 481 } |
| 482 |
452 CachedResourceHandle<CachedResource> ResourceFetcher::requestResource(CachedReso
urce::Type type, FetchRequest& request) | 483 CachedResourceHandle<CachedResource> ResourceFetcher::requestResource(CachedReso
urce::Type type, FetchRequest& request) |
453 { | 484 { |
454 KURL url = request.resourceRequest().url(); | 485 KURL url = request.resourceRequest().url(); |
455 | 486 |
456 LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s', p
riority=%d, forPreload=%u", url.elidedString().latin1().data(), request.charset(
).latin1().data(), request.priority(), request.forPreload()); | 487 LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s', p
riority=%d, forPreload=%u", url.elidedString().latin1().data(), request.charset(
).latin1().data(), request.priority(), request.forPreload()); |
457 | 488 |
458 // If only the fragment identifiers differ, it is the same resource. | 489 // If only the fragment identifiers differ, it is the same resource. |
459 url = MemoryCache::removeFragmentIdentifierIfNeeded(url); | 490 url = MemoryCache::removeFragmentIdentifierIfNeeded(url); |
460 | 491 |
461 if (!url.isValid()) | 492 if (!url.isValid()) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 | 526 |
496 if (!request.forPreload() || policy != Use) { | 527 if (!request.forPreload() || policy != Use) { |
497 ResourceLoadPriority priority = loadPriority(type, request); | 528 ResourceLoadPriority priority = loadPriority(type, request); |
498 if (priority != resource->resourceRequest().priority()) { | 529 if (priority != resource->resourceRequest().priority()) { |
499 resource->resourceRequest().setPriority(priority); | 530 resource->resourceRequest().setPriority(priority); |
500 resource->didChangePriority(priority); | 531 resource->didChangePriority(priority); |
501 } | 532 } |
502 } | 533 } |
503 | 534 |
504 if ((policy != Use || resource->stillNeedsLoad()) && FetchRequest::NoDefer =
= request.defer()) { | 535 if ((policy != Use || resource->stillNeedsLoad()) && FetchRequest::NoDefer =
= request.defer()) { |
505 if (!frame() || m_documentLoader != frame()->loader()->activeDocumentLoa
der() || m_documentLoader->isStopping()) { | 536 if (!shouldLoadNewResource()) { |
506 if (resource->inCache()) | 537 if (resource->inCache()) |
507 memoryCache()->remove(resource.get()); | 538 memoryCache()->remove(resource.get()); |
508 return 0; | 539 return 0; |
509 } | 540 } |
510 | 541 |
511 if (!m_documentLoader->scheduleArchiveLoad(resource.get(), request.resou
rceRequest())) | 542 if (!m_documentLoader || !m_documentLoader->scheduleArchiveLoad(resource
.get(), request.resourceRequest())) |
512 resource->load(this, request.options()); | 543 resource->load(this, request.options()); |
513 | 544 |
514 // We don't support immediate loads, but we do support immediate failure
. | 545 // We don't support immediate loads, but we do support immediate failure
. |
515 if (resource->errorOccurred()) { | 546 if (resource->errorOccurred()) { |
516 if (resource->inCache()) | 547 if (resource->inCache()) |
517 memoryCache()->remove(resource.get()); | 548 memoryCache()->remove(resource.get()); |
518 return 0; | 549 return 0; |
519 } | 550 } |
520 } | 551 } |
521 | 552 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 targetType = ResourceRequest::TargetIsScript; | 592 targetType = ResourceRequest::TargetIsScript; |
562 break; | 593 break; |
563 case CachedResource::FontResource: | 594 case CachedResource::FontResource: |
564 targetType = ResourceRequest::TargetIsFontResource; | 595 targetType = ResourceRequest::TargetIsFontResource; |
565 break; | 596 break; |
566 case CachedResource::ImageResource: | 597 case CachedResource::ImageResource: |
567 targetType = ResourceRequest::TargetIsImage; | 598 targetType = ResourceRequest::TargetIsImage; |
568 break; | 599 break; |
569 case CachedResource::ShaderResource: | 600 case CachedResource::ShaderResource: |
570 case CachedResource::RawResource: | 601 case CachedResource::RawResource: |
| 602 case CachedResource::ImportResource: |
571 targetType = ResourceRequest::TargetIsSubresource; | 603 targetType = ResourceRequest::TargetIsSubresource; |
572 break; | 604 break; |
573 case CachedResource::LinkPrefetch: | 605 case CachedResource::LinkPrefetch: |
574 targetType = ResourceRequest::TargetIsPrefetch; | 606 targetType = ResourceRequest::TargetIsPrefetch; |
575 break; | 607 break; |
576 case CachedResource::LinkSubresource: | 608 case CachedResource::LinkSubresource: |
577 targetType = ResourceRequest::TargetIsSubresource; | 609 targetType = ResourceRequest::TargetIsSubresource; |
578 break; | 610 break; |
579 case CachedResource::TextTrackResource: | 611 case CachedResource::TextTrackResource: |
580 targetType = ResourceRequest::TargetIsTextTrack; | 612 targetType = ResourceRequest::TargetIsTextTrack; |
(...skipping 19 matching lines...) Expand all Loading... |
600 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) | 632 if (!m_documentLoader->overrideEncoding().isEmpty() || frameLoadType ==
FrameLoadTypeBackForward) |
601 return ReturnCacheDataElseLoad; | 633 return ReturnCacheDataElseLoad; |
602 if (isReload || frameLoadType == FrameLoadTypeSame || request.isConditio
nal()) | 634 if (isReload || frameLoadType == FrameLoadTypeSame || request.isConditio
nal()) |
603 return ReloadIgnoringCacheData; | 635 return ReloadIgnoringCacheData; |
604 return UseProtocolCachePolicy; | 636 return UseProtocolCachePolicy; |
605 } | 637 } |
606 | 638 |
607 if (request.isConditional()) | 639 if (request.isConditional()) |
608 return ReloadIgnoringCacheData; | 640 return ReloadIgnoringCacheData; |
609 | 641 |
610 if (m_documentLoader->isLoadingInAPISense()) { | 642 if (m_documentLoader && m_documentLoader->isLoadingInAPISense()) { |
611 // For POST requests, we mutate the main resource's cache policy to avoi
d form resubmission. | 643 // For POST requests, we mutate the main resource's cache policy to avoi
d form resubmission. |
612 // This policy should not be inherited by subresources. | 644 // This policy should not be inherited by subresources. |
613 ResourceRequestCachePolicy mainResourceCachePolicy = m_documentLoader->r
equest().cachePolicy(); | 645 ResourceRequestCachePolicy mainResourceCachePolicy = m_documentLoader->r
equest().cachePolicy(); |
614 if (mainResourceCachePolicy == ReturnCacheDataDontLoad) | 646 if (mainResourceCachePolicy == ReturnCacheDataDontLoad) |
615 return ReturnCacheDataElseLoad; | 647 return ReturnCacheDataElseLoad; |
616 return mainResourceCachePolicy; | 648 return mainResourceCachePolicy; |
617 } | 649 } |
618 return UseProtocolCachePolicy; | 650 return UseProtocolCachePolicy; |
619 } | 651 } |
620 | 652 |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 m_preloads.clear(); | 1117 m_preloads.clear(); |
1086 } | 1118 } |
1087 | 1119 |
1088 void ResourceFetcher::clearPendingPreloads() | 1120 void ResourceFetcher::clearPendingPreloads() |
1089 { | 1121 { |
1090 m_pendingPreloads.clear(); | 1122 m_pendingPreloads.clear(); |
1091 } | 1123 } |
1092 | 1124 |
1093 inline FrameLoader* ResourceFetcher::frameLoader() | 1125 inline FrameLoader* ResourceFetcher::frameLoader() |
1094 { | 1126 { |
1095 return frame() ? frame()->loader() : 0; | 1127 if (Frame* frame = this->frame()) |
| 1128 return frame->loader(); |
| 1129 return 0; |
1096 } | 1130 } |
1097 | 1131 |
1098 void ResourceFetcher::didFinishLoading(const CachedResource* resource, double fi
nishTime, const ResourceLoaderOptions& options) | 1132 void ResourceFetcher::didFinishLoading(const CachedResource* resource, double fi
nishTime, const ResourceLoaderOptions& options) |
1099 { | 1133 { |
1100 if (options.sendLoadCallbacks != SendCallbacks) | 1134 if (options.sendLoadCallbacks != SendCallbacks) |
1101 return; | 1135 return; |
1102 if (FrameLoader* loader = frameLoader()) | 1136 if (FrameLoader* loader = frameLoader()) |
1103 loader->notifier()->dispatchDidFinishLoading(m_documentLoader, resource-
>identifier(), finishTime); | 1137 loader->notifier()->dispatchDidFinishLoading(m_documentLoader, resource-
>identifier(), finishTime); |
1104 } | 1138 } |
1105 | 1139 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1250 } | 1284 } |
1251 #endif | 1285 #endif |
1252 | 1286 |
1253 const ResourceLoaderOptions& ResourceFetcher::defaultCachedResourceOptions() | 1287 const ResourceLoaderOptions& ResourceFetcher::defaultCachedResourceOptions() |
1254 { | 1288 { |
1255 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); | 1289 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); |
1256 return options; | 1290 return options; |
1257 } | 1291 } |
1258 | 1292 |
1259 } | 1293 } |
OLD | NEW |