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

Side by Side Diff: Source/core/loader/cache/CachedResourceLoader.cpp

Issue 19940002: [HTML Import] Respect Content Security Policy Model (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix mac build failure. Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 case CachedResource::XSLStyleSheet: 85 case CachedResource::XSLStyleSheet:
86 return new CachedXSLStyleSheet(request); 86 return new CachedXSLStyleSheet(request);
87 case CachedResource::LinkPrefetch: 87 case CachedResource::LinkPrefetch:
88 return new CachedResource(request, CachedResource::LinkPrefetch); 88 return new CachedResource(request, CachedResource::LinkPrefetch);
89 case CachedResource::LinkSubresource: 89 case CachedResource::LinkSubresource:
90 return new CachedResource(request, CachedResource::LinkSubresource); 90 return new CachedResource(request, CachedResource::LinkSubresource);
91 case CachedResource::TextTrackResource: 91 case CachedResource::TextTrackResource:
92 return new CachedTextTrack(request); 92 return new CachedTextTrack(request);
93 case CachedResource::ShaderResource: 93 case CachedResource::ShaderResource:
94 return new CachedShader(request); 94 return new CachedShader(request);
95 case CachedResource::ImportResource:
96 return new CachedRawResource(request, type);
95 } 97 }
98
96 ASSERT_NOT_REACHED(); 99 ASSERT_NOT_REACHED();
97 return 0; 100 return 0;
98 } 101 }
99 102
100 static ResourceLoadPriority loadPriority(CachedResource::Type type, const Cached ResourceRequest& request) 103 static ResourceLoadPriority loadPriority(CachedResource::Type type, const Cached ResourceRequest& request)
101 { 104 {
102 if (request.priority() != ResourceLoadPriorityUnresolved) 105 if (request.priority() != ResourceLoadPriorityUnresolved)
103 return request.priority(); 106 return request.priority();
104 107
105 switch (type) { 108 switch (type) {
106 case CachedResource::MainResource: 109 case CachedResource::MainResource:
107 return ResourceLoadPriorityVeryHigh; 110 return ResourceLoadPriorityVeryHigh;
108 case CachedResource::CSSStyleSheet: 111 case CachedResource::CSSStyleSheet:
109 return ResourceLoadPriorityHigh; 112 return ResourceLoadPriorityHigh;
110 case CachedResource::Script: 113 case CachedResource::Script:
111 case CachedResource::FontResource: 114 case CachedResource::FontResource:
112 case CachedResource::RawResource: 115 case CachedResource::RawResource:
116 case CachedResource::ImportResource:
113 return ResourceLoadPriorityMedium; 117 return ResourceLoadPriorityMedium;
114 case CachedResource::ImageResource: 118 case CachedResource::ImageResource:
115 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad PriorityLow; 119 return request.forPreload() ? ResourceLoadPriorityVeryLow : ResourceLoad PriorityLow;
116 case CachedResource::XSLStyleSheet: 120 case CachedResource::XSLStyleSheet:
117 return ResourceLoadPriorityHigh; 121 return ResourceLoadPriorityHigh;
118 case CachedResource::SVGDocumentResource: 122 case CachedResource::SVGDocumentResource:
119 return ResourceLoadPriorityLow; 123 return ResourceLoadPriorityLow;
120 case CachedResource::LinkPrefetch: 124 case CachedResource::LinkPrefetch:
121 return ResourceLoadPriorityVeryLow; 125 return ResourceLoadPriorityVeryLow;
122 case CachedResource::LinkSubresource: 126 case CachedResource::LinkSubresource:
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request) 232 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request)
229 { 233 {
230 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get()); 234 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get());
231 } 235 }
232 236
233 CachedResourceHandle<CachedShader> CachedResourceLoader::requestShader(CachedRes ourceRequest& request) 237 CachedResourceHandle<CachedShader> CachedResourceLoader::requestShader(CachedRes ourceRequest& request)
234 { 238 {
235 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso urce, request).get()); 239 return static_cast<CachedShader*>(requestResource(CachedResource::ShaderReso urce, request).get());
236 } 240 }
237 241
242 CachedResourceHandle<CachedRawResource> CachedResourceLoader::requestImport(Cach edResourceRequest& request)
243 {
244 return static_cast<CachedRawResource*>(requestResource(CachedResource::Impor tResource, request).get());
245 }
246
238 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleS heet(CachedResourceRequest& request) 247 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestCSSStyleS heet(CachedResourceRequest& request)
239 { 248 {
240 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS StyleSheet, request).get()); 249 return static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSS StyleSheet, request).get());
241 } 250 }
242 251
243 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSSt yleSheet(CachedResourceRequest& request) 252 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSSt yleSheet(CachedResourceRequest& request)
244 { 253 {
245 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq uest().url()); 254 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.resourceReq uest().url());
246 255
247 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { 256 if (CachedResource* existing = memoryCache()->resourceForURL(url)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 return static_cast<CachedRawResource*>(requestResource(CachedResource::MainR esource, request).get()); 295 return static_cast<CachedRawResource*>(requestResource(CachedResource::MainR esource, request).get());
287 } 296 }
288 297
289 bool CachedResourceLoader::checkInsecureContent(CachedResource::Type type, const KURL& url) const 298 bool CachedResourceLoader::checkInsecureContent(CachedResource::Type type, const KURL& url) const
290 { 299 {
291 switch (type) { 300 switch (type) {
292 case CachedResource::Script: 301 case CachedResource::Script:
293 case CachedResource::XSLStyleSheet: 302 case CachedResource::XSLStyleSheet:
294 case CachedResource::SVGDocumentResource: 303 case CachedResource::SVGDocumentResource:
295 case CachedResource::CSSStyleSheet: 304 case CachedResource::CSSStyleSheet:
305 case CachedResource::ImportResource:
296 // These resource can inject script into the current document (Script, 306 // These resource can inject script into the current document (Script,
297 // XSL) or exfiltrate the content of the current document (CSS). 307 // XSL) or exfiltrate the content of the current document (CSS).
298 if (Frame* f = frame()) 308 if (Frame* f = frame())
299 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc ument->securityOrigin(), url)) 309 if (!f->loader()->mixedContentChecker()->canRunInsecureContent(m_doc ument->securityOrigin(), url))
300 return false; 310 return false;
301 break; 311 break;
302 case CachedResource::TextTrackResource: 312 case CachedResource::TextTrackResource:
303 case CachedResource::ShaderResource: 313 case CachedResource::ShaderResource:
304 case CachedResource::RawResource: 314 case CachedResource::RawResource:
305 case CachedResource::ImageResource: 315 case CachedResource::ImageResource:
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 } 372 }
363 break; 373 break;
364 } 374 }
365 375
366 switch (type) { 376 switch (type) {
367 case CachedResource::XSLStyleSheet: 377 case CachedResource::XSLStyleSheet:
368 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowScriptFromSource(url)) 378 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowScriptFromSource(url))
369 return false; 379 return false;
370 break; 380 break;
371 case CachedResource::Script: 381 case CachedResource::Script:
382 case CachedResource::ImportResource:
372 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowScriptFromSource(url)) 383 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowScriptFromSource(url))
373 return false; 384 return false;
374 385
375 if (frame()) { 386 if (frame()) {
376 Settings* settings = frame()->settings(); 387 Settings* settings = frame()->settings();
377 if (!frame()->loader()->client()->allowScriptFromSource(!settings || settings->isScriptEnabled(), url)) { 388 if (!frame()->loader()->client()->allowScriptFromSource(!settings || settings->isScriptEnabled(), url)) {
378 frame()->loader()->client()->didNotAllowScript(); 389 frame()->loader()->client()->didNotAllowScript();
379 return false; 390 return false;
380 } 391 }
381 } 392 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 433
423 bool CachedResourceLoader::canAccess(CachedResource* resource) 434 bool CachedResourceLoader::canAccess(CachedResource* resource)
424 { 435 {
425 // Redirects can change the response URL different from one of request. 436 // Redirects can change the response URL different from one of request.
426 if (!canRequest(resource->type(), resource->response().url(), resource->opti ons(), false)) 437 if (!canRequest(resource->type(), resource->response().url(), resource->opti ons(), false))
427 return false; 438 return false;
428 439
429 String error; 440 String error;
430 switch (resource->type()) { 441 switch (resource->type()) {
431 case CachedResource::Script: 442 case CachedResource::Script:
432 case CachedResource::RawResource: 443 case CachedResource::ImportResource:
433 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna bled 444 if (resource->options().requestOriginPolicy == PotentiallyCrossOriginEna bled
434 && !m_document->securityOrigin()->canRequest(resource->response().ur l()) 445 && !m_document->securityOrigin()->canRequest(resource->response().ur l())
435 && !resource->passesAccessControlCheck(m_document->securityOrigin(), error)) { 446 && !resource->passesAccessControlCheck(m_document->securityOrigin(), error)) {
436 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); 447 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);
437 return false; 448 return false;
438 } 449 }
439 450
440 break; 451 break;
441 default: 452 default:
442 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources 453 ASSERT_NOT_REACHED(); // FIXME: generalize to non-script resources
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 targetType = ResourceRequest::TargetIsScript; 570 targetType = ResourceRequest::TargetIsScript;
560 break; 571 break;
561 case CachedResource::FontResource: 572 case CachedResource::FontResource:
562 targetType = ResourceRequest::TargetIsFontResource; 573 targetType = ResourceRequest::TargetIsFontResource;
563 break; 574 break;
564 case CachedResource::ImageResource: 575 case CachedResource::ImageResource:
565 targetType = ResourceRequest::TargetIsImage; 576 targetType = ResourceRequest::TargetIsImage;
566 break; 577 break;
567 case CachedResource::ShaderResource: 578 case CachedResource::ShaderResource:
568 case CachedResource::RawResource: 579 case CachedResource::RawResource:
580 case CachedResource::ImportResource:
569 targetType = ResourceRequest::TargetIsSubresource; 581 targetType = ResourceRequest::TargetIsSubresource;
570 break; 582 break;
571 case CachedResource::LinkPrefetch: 583 case CachedResource::LinkPrefetch:
572 targetType = ResourceRequest::TargetIsPrefetch; 584 targetType = ResourceRequest::TargetIsPrefetch;
573 break; 585 break;
574 case CachedResource::LinkSubresource: 586 case CachedResource::LinkSubresource:
575 targetType = ResourceRequest::TargetIsSubresource; 587 targetType = ResourceRequest::TargetIsSubresource;
576 break; 588 break;
577 case CachedResource::TextTrackResource: 589 case CachedResource::TextTrackResource:
578 targetType = ResourceRequest::TargetIsTextTrack; 590 targetType = ResourceRequest::TargetIsTextTrack;
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 } 1254 }
1243 #endif 1255 #endif
1244 1256
1245 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( ) 1257 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( )
1246 { 1258 {
1247 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext)); 1259 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext));
1248 return options; 1260 return options;
1249 } 1261 }
1250 1262
1251 } 1263 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698