| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 case CachedResource::XSLStyleSheet: | 86 case CachedResource::XSLStyleSheet: |
| 87 return new CachedXSLStyleSheet(request); | 87 return new CachedXSLStyleSheet(request); |
| 88 case CachedResource::LinkPrefetch: | 88 case CachedResource::LinkPrefetch: |
| 89 return new CachedResource(request, CachedResource::LinkPrefetch); | 89 return new CachedResource(request, CachedResource::LinkPrefetch); |
| 90 case CachedResource::LinkSubresource: | 90 case CachedResource::LinkSubresource: |
| 91 return new CachedResource(request, CachedResource::LinkSubresource); | 91 return new CachedResource(request, CachedResource::LinkSubresource); |
| 92 case CachedResource::TextTrackResource: | 92 case CachedResource::TextTrackResource: |
| 93 return new CachedTextTrack(request); | 93 return new CachedTextTrack(request); |
| 94 case CachedResource::ShaderResource: | 94 case CachedResource::ShaderResource: |
| 95 return new CachedShader(request); | 95 return new CachedShader(request); |
| 96 case CachedResource::ImportResource: |
| 97 return new CachedRawResource(request, type); |
| 96 } | 98 } |
| 99 |
| 97 ASSERT_NOT_REACHED(); | 100 ASSERT_NOT_REACHED(); |
| 98 return 0; | 101 return 0; |
| 99 } | 102 } |
| 100 | 103 |
| 101 static ResourceLoadPriority loadPriority(CachedResource::Type type, const Cached
ResourceRequest& request) | 104 static ResourceLoadPriority loadPriority(CachedResource::Type type, const Cached
ResourceRequest& request) |
| 102 { | 105 { |
| 103 if (request.priority() != ResourceLoadPriorityUnresolved) | 106 if (request.priority() != ResourceLoadPriorityUnresolved) |
| 104 return request.priority(); | 107 return request.priority(); |
| 105 | 108 |
| 106 switch (type) { | 109 switch (type) { |
| 107 case CachedResource::MainResource: | 110 case CachedResource::MainResource: |
| 108 return ResourceLoadPriorityVeryHigh; | 111 return ResourceLoadPriorityVeryHigh; |
| 109 case CachedResource::CSSStyleSheet: | 112 case CachedResource::CSSStyleSheet: |
| 110 return ResourceLoadPriorityHigh; | 113 return ResourceLoadPriorityHigh; |
| 111 case CachedResource::Script: | 114 case CachedResource::Script: |
| 112 case CachedResource::FontResource: | 115 case CachedResource::FontResource: |
| 113 case CachedResource::RawResource: | 116 case CachedResource::RawResource: |
| 117 case CachedResource::ImportResource: |
| 114 return ResourceLoadPriorityMedium; | 118 return ResourceLoadPriorityMedium; |
| 115 case CachedResource::ImageResource: | 119 case CachedResource::ImageResource: |
| 116 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad
PriorityLow; | 120 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad
PriorityLow; |
| 117 case CachedResource::XSLStyleSheet: | 121 case CachedResource::XSLStyleSheet: |
| 118 return ResourceLoadPriorityHigh; | 122 return ResourceLoadPriorityHigh; |
| 119 case CachedResource::SVGDocumentResource: | 123 case CachedResource::SVGDocumentResource: |
| 120 return ResourceLoadPriorityLow; | 124 return ResourceLoadPriorityLow; |
| 121 case CachedResource::LinkPrefetch: | 125 case CachedResource::LinkPrefetch: |
| 122 return ResourceLoadPriorityVeryLow; | 126 return ResourceLoadPriorityVeryLow; |
| 123 case CachedResource::LinkSubresource: | 127 case CachedResource::LinkSubresource: |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac
hedResourceRequest& request) | 233 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac
hedResourceRequest& request) |
| 230 { | 234 { |
| 231 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra
ckResource, request).get()); | 235 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra
ckResource, request).get()); |
| 232 } | 236 } |
| 233 | 237 |
| 234 CachedResourceHandle<CachedShader> CachedResourceLoader::requestShader(CachedRes
ourceRequest& request) | 238 CachedResourceHandle<CachedShader> CachedResourceLoader::requestShader(CachedRes
ourceRequest& request) |
| 235 { | 239 { |
| 236 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso
urce, request).get()); | 240 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso
urce, request).get()); |
| 237 } | 241 } |
| 238 | 242 |
| 243 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestImport(Cach
edResourceRequest& request) |
| 244 { |
| 245 return static_cast<CachedRawResource*>(requestResource(CachedResource::Impor
tResource, request).get()); |
| 246 } |
| 247 |
| 239 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleS
heet(CachedResourceRequest& request) | 248 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleS
heet(CachedResourceRequest& request) |
| 240 { | 249 { |
| 241 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS
StyleSheet, request).get()); | 250 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS
StyleSheet, request).get()); |
| 242 } | 251 } |
| 243 | 252 |
| 244 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSSt
yleSheet(CachedResourceRequest& request) | 253 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSSt
yleSheet(CachedResourceRequest& request) |
| 245 { | 254 { |
| 246 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq
uest().url()); | 255 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq
uest().url()); |
| 247 | 256 |
| 248 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { | 257 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()); | 296 return static_cast<CachedRawResource*>(requestResource(CachedResource::MainR
esource, request).get()); |
| 288 } | 297 } |
| 289 | 298 |
| 290 bool CachedResourceLoader::checkInsecureContent(CachedResource::Type type, const
KURL& url) const | 299 bool CachedResourceLoader::checkInsecureContent(CachedResource::Type type, const
KURL& url) const |
| 291 { | 300 { |
| 292 switch (type) { | 301 switch (type) { |
| 293 case CachedResource::Script: | 302 case CachedResource::Script: |
| 294 case CachedResource::XSLStyleSheet: | 303 case CachedResource::XSLStyleSheet: |
| 295 case CachedResource::SVGDocumentResource: | 304 case CachedResource::SVGDocumentResource: |
| 296 case CachedResource::CSSStyleSheet: | 305 case CachedResource::CSSStyleSheet: |
| 306 case CachedResource::ImportResource: |
| 297 // These resource can inject script into the current document (Script, | 307 // These resource can inject script into the current document (Script, |
| 298 // XSL) or exfiltrate the content of the current document (CSS). | 308 // XSL) or exfiltrate the content of the current document (CSS). |
| 299 if (Frame* f = frame()) | 309 if (Frame* f = frame()) |
| 300 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc
ument->securityOrigin(), url)) | 310 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc
ument->securityOrigin(), url)) |
| 301 return false; | 311 return false; |
| 302 break; | 312 break; |
| 303 case CachedResource::TextTrackResource: | 313 case CachedResource::TextTrackResource: |
| 304 case CachedResource::ShaderResource: | 314 case CachedResource::ShaderResource: |
| 305 case CachedResource::RawResource: | 315 case CachedResource::RawResource: |
| 306 case CachedResource::ImageResource: | 316 case CachedResource::ImageResource: |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 case CachedResource::MainResource: | 351 case CachedResource::MainResource: |
| 342 case CachedResource::ImageResource: | 352 case CachedResource::ImageResource: |
| 343 case CachedResource::CSSStyleSheet: | 353 case CachedResource::CSSStyleSheet: |
| 344 case CachedResource::Script: | 354 case CachedResource::Script: |
| 345 case CachedResource::FontResource: | 355 case CachedResource::FontResource: |
| 346 case CachedResource::RawResource: | 356 case CachedResource::RawResource: |
| 347 case CachedResource::LinkPrefetch: | 357 case CachedResource::LinkPrefetch: |
| 348 case CachedResource::LinkSubresource: | 358 case CachedResource::LinkSubresource: |
| 349 case CachedResource::TextTrackResource: | 359 case CachedResource::TextTrackResource: |
| 350 case CachedResource::ShaderResource: | 360 case CachedResource::ShaderResource: |
| 361 case CachedResource::ImportResource: |
| 351 // By default these types of resources can be loaded from any origin. | 362 // By default these types of resources can be loaded from any origin. |
| 352 // FIXME: Are we sure about CachedResource::FontResource? | 363 // FIXME: Are we sure about CachedResource::FontResource? |
| 353 if (options.requestOriginPolicy == RestrictToSameOrigin && !m_document->
securityOrigin()->canRequest(url)) { | 364 if (options.requestOriginPolicy == RestrictToSameOrigin && !m_document->
securityOrigin()->canRequest(url)) { |
| 354 printAccessDeniedMessage(url); | 365 printAccessDeniedMessage(url); |
| 355 return false; | 366 return false; |
| 356 } | 367 } |
| 357 break; | 368 break; |
| 358 case CachedResource::SVGDocumentResource: | 369 case CachedResource::SVGDocumentResource: |
| 359 case CachedResource::XSLStyleSheet: | 370 case CachedResource::XSLStyleSheet: |
| 360 if (!m_document->securityOrigin()->canRequest(url)) { | 371 if (!m_document->securityOrigin()->canRequest(url)) { |
| 361 printAccessDeniedMessage(url); | 372 printAccessDeniedMessage(url); |
| 362 return false; | 373 return false; |
| 363 } | 374 } |
| 364 break; | 375 break; |
| 365 } | 376 } |
| 366 | 377 |
| 367 switch (type) { | 378 switch (type) { |
| 368 case CachedResource::XSLStyleSheet: | 379 case CachedResource::XSLStyleSheet: |
| 369 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) | 380 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) |
| 370 return false; | 381 return false; |
| 371 break; | 382 break; |
| 372 case CachedResource::Script: | 383 case CachedResource::Script: |
| 384 case CachedResource::ImportResource: |
| 373 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) | 385 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url)) |
| 374 return false; | 386 return false; |
| 375 | 387 |
| 376 if (frame()) { | 388 if (frame()) { |
| 377 Settings* settings = frame()->settings(); | 389 Settings* settings = frame()->settings(); |
| 378 if (!frame()->loader()->client()->allowScriptFromSource(!settings ||
settings->isScriptEnabled(), url)) { | 390 if (!frame()->loader()->client()->allowScriptFromSource(!settings ||
settings->isScriptEnabled(), url)) { |
| 379 frame()->loader()->client()->didNotAllowScript(); | 391 frame()->loader()->client()->didNotAllowScript(); |
| 380 return false; | 392 return false; |
| 381 } | 393 } |
| 382 } | 394 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 | 435 |
| 424 bool CachedResourceLoader::canAccess(CachedResource* resource) | 436 bool CachedResourceLoader::canAccess(CachedResource* resource) |
| 425 { | 437 { |
| 426 // Redirects can change the response URL different from one of request. | 438 // Redirects can change the response URL different from one of request. |
| 427 if (!canRequest(resource->type(), resource->response().url(), resource->opti
ons(), false)) | 439 if (!canRequest(resource->type(), resource->response().url(), resource->opti
ons(), false)) |
| 428 return false; | 440 return false; |
| 429 | 441 |
| 430 String error; | 442 String error; |
| 431 switch (resource->type()) { | 443 switch (resource->type()) { |
| 432 case CachedResource::Script: | 444 case CachedResource::Script: |
| 433 case CachedResource::RawResource: | 445 case CachedResource::ImportResource: |
| 434 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna
bled | 446 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna
bled |
| 435 && !m_document->securityOrigin()->canRequest(resource->response().ur
l()) | 447 && !m_document->securityOrigin()->canRequest(resource->response().ur
l()) |
| 436 && !resource->passesAccessControlCheck(m_document->securityOrigin(),
error)) { | 448 && !resource->passesAccessControlCheck(m_document->securityOrigin(),
error)) { |
| 437 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); | 449 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); |
| 438 return false; | 450 return false; |
| 439 } | 451 } |
| 440 | 452 |
| 441 break; | 453 break; |
| 442 default: | 454 default: |
| 443 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources | 455 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 targetType = ResourceRequest::TargetIsScript; | 572 targetType = ResourceRequest::TargetIsScript; |
| 561 break; | 573 break; |
| 562 case CachedResource::FontResource: | 574 case CachedResource::FontResource: |
| 563 targetType = ResourceRequest::TargetIsFontResource; | 575 targetType = ResourceRequest::TargetIsFontResource; |
| 564 break; | 576 break; |
| 565 case CachedResource::ImageResource: | 577 case CachedResource::ImageResource: |
| 566 targetType = ResourceRequest::TargetIsImage; | 578 targetType = ResourceRequest::TargetIsImage; |
| 567 break; | 579 break; |
| 568 case CachedResource::ShaderResource: | 580 case CachedResource::ShaderResource: |
| 569 case CachedResource::RawResource: | 581 case CachedResource::RawResource: |
| 582 case CachedResource::ImportResource: |
| 570 targetType = ResourceRequest::TargetIsSubresource; | 583 targetType = ResourceRequest::TargetIsSubresource; |
| 571 break; | 584 break; |
| 572 case CachedResource::LinkPrefetch: | 585 case CachedResource::LinkPrefetch: |
| 573 targetType = ResourceRequest::TargetIsPrefetch; | 586 targetType = ResourceRequest::TargetIsPrefetch; |
| 574 break; | 587 break; |
| 575 case CachedResource::LinkSubresource: | 588 case CachedResource::LinkSubresource: |
| 576 targetType = ResourceRequest::TargetIsSubresource; | 589 targetType = ResourceRequest::TargetIsSubresource; |
| 577 break; | 590 break; |
| 578 case CachedResource::TextTrackResource: | 591 case CachedResource::TextTrackResource: |
| 579 targetType = ResourceRequest::TargetIsTextTrack; | 592 targetType = ResourceRequest::TargetIsTextTrack; |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 } | 1265 } |
| 1253 #endif | 1266 #endif |
| 1254 | 1267 |
| 1255 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions(
) | 1268 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions(
) |
| 1256 { | 1269 { |
| 1257 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); | 1270 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon
tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF
orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul
tOriginRestrictionsForType, DocumentContext)); |
| 1258 return options; | 1271 return options; |
| 1259 } | 1272 } |
| 1260 | 1273 |
| 1261 } | 1274 } |
| OLD | NEW |