| 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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 if (it != m_resourceTimingInfoMap.end()) { | 945 if (it != m_resourceTimingInfoMap.end()) { |
| 914 ASSERT(document()); | 946 ASSERT(document()); |
| 915 Document* initiatorDocument = document(); | 947 Document* initiatorDocument = document(); |
| 916 if (resource->type() == CachedResource::MainResource) | 948 if (resource->type() == CachedResource::MainResource) |
| 917 initiatorDocument = document()->parentDocument(); | 949 initiatorDocument = document()->parentDocument(); |
| 918 ASSERT(initiatorDocument); | 950 ASSERT(initiatorDocument); |
| 919 RefPtr<ResourceTimingInfo> info = it->value; | 951 RefPtr<ResourceTimingInfo> info = it->value; |
| 920 info->setInitialRequest(resource->resourceRequest()); | 952 info->setInitialRequest(resource->resourceRequest()); |
| 921 info->setFinalResponse(resource->response()); | 953 info->setFinalResponse(resource->response()); |
| 922 info->setLoadFinishTime(resource->loadFinishTime()); | 954 info->setLoadFinishTime(resource->loadFinishTime()); |
| 923 initiatorDocument->domWindow()->performance()->addResourceTiming(*in
fo, initiatorDocument); | 955 if (DOMWindow* initiatorWindow = initiatorDocument->domWindow()) |
| 956 initiatorWindow->performance()->addResourceTiming(*info, initiat
orDocument); |
| 924 m_resourceTimingInfoMap.remove(it); | 957 m_resourceTimingInfoMap.remove(it); |
| 925 } | 958 } |
| 926 } | 959 } |
| 927 | 960 |
| 928 if (frame()) | 961 if (frame()) |
| 929 frame()->loader()->loadDone(); | 962 frame()->loader()->loadDone(); |
| 930 performPostLoadActions(); | 963 performPostLoadActions(); |
| 931 | 964 |
| 932 if (!m_garbageCollectDocumentResourcesTimer.isActive()) | 965 if (!m_garbageCollectDocumentResourcesTimer.isActive()) |
| 933 m_garbageCollectDocumentResourcesTimer.startOneShot(0); | 966 m_garbageCollectDocumentResourcesTimer.startOneShot(0); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 m_preloads.clear(); | 1118 m_preloads.clear(); |
| 1086 } | 1119 } |
| 1087 | 1120 |
| 1088 void ResourceFetcher::clearPendingPreloads() | 1121 void ResourceFetcher::clearPendingPreloads() |
| 1089 { | 1122 { |
| 1090 m_pendingPreloads.clear(); | 1123 m_pendingPreloads.clear(); |
| 1091 } | 1124 } |
| 1092 | 1125 |
| 1093 inline FrameLoader* ResourceFetcher::frameLoader() | 1126 inline FrameLoader* ResourceFetcher::frameLoader() |
| 1094 { | 1127 { |
| 1095 return frame() ? frame()->loader() : 0; | 1128 if (Frame* frame = this->frame()) |
| 1129 return frame->loader(); |
| 1130 return 0; |
| 1096 } | 1131 } |
| 1097 | 1132 |
| 1098 void ResourceFetcher::didFinishLoading(const CachedResource* resource, double fi
nishTime, const ResourceLoaderOptions& options) | 1133 void ResourceFetcher::didFinishLoading(const CachedResource* resource, double fi
nishTime, const ResourceLoaderOptions& options) |
| 1099 { | 1134 { |
| 1100 if (options.sendLoadCallbacks != SendCallbacks) | 1135 if (options.sendLoadCallbacks != SendCallbacks) |
| 1101 return; | 1136 return; |
| 1102 if (FrameLoader* loader = frameLoader()) | 1137 if (FrameLoader* loader = frameLoader()) |
| 1103 loader->notifier()->dispatchDidFinishLoading(m_documentLoader, resource-
>identifier(), finishTime); | 1138 loader->notifier()->dispatchDidFinishLoading(m_documentLoader, resource-
>identifier(), finishTime); |
| 1104 } | 1139 } |
| 1105 | 1140 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1250 } | 1285 } |
| 1251 #endif | 1286 #endif |
| 1252 | 1287 |
| 1253 const ResourceLoaderOptions& ResourceFetcher::defaultCachedResourceOptions() | 1288 const ResourceLoaderOptions& ResourceFetcher::defaultCachedResourceOptions() |
| 1254 { | 1289 { |
| 1255 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); | 1290 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); |
| 1256 return options; | 1291 return options; |
| 1257 } | 1292 } |
| 1258 | 1293 |
| 1259 } | 1294 } |
| OLD | NEW |