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

Side by Side Diff: Source/core/loader/cache/ResourceFetcher.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
« no previous file with comments | « Source/core/loader/cache/ResourceFetcher.h ('k') | Source/core/page/ContentSecurityPolicy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 13 matching lines...) Expand all
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « Source/core/loader/cache/ResourceFetcher.h ('k') | Source/core/page/ContentSecurityPolicy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698