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

Side by Side Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 356723003: Add 'XHR' to the Resource::Type enum, and use it for XHR requests. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Preflight. Created 6 years, 6 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/fetch/ResourceFetcher.h ('k') | Source/core/fetch/ResourceLoaderOptions.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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 case Resource::CSSStyleSheet: 81 case Resource::CSSStyleSheet:
82 return new CSSStyleSheetResource(request, charset); 82 return new CSSStyleSheetResource(request, charset);
83 case Resource::Script: 83 case Resource::Script:
84 return new ScriptResource(request, charset); 84 return new ScriptResource(request, charset);
85 case Resource::SVGDocument: 85 case Resource::SVGDocument:
86 return new DocumentResource(request, Resource::SVGDocument); 86 return new DocumentResource(request, Resource::SVGDocument);
87 case Resource::Font: 87 case Resource::Font:
88 return new FontResource(request); 88 return new FontResource(request);
89 case Resource::MainResource: 89 case Resource::MainResource:
90 case Resource::Raw: 90 case Resource::Raw:
91 case Resource::XMLHttpRequest:
91 case Resource::TextTrack: 92 case Resource::TextTrack:
92 case Resource::Media: 93 case Resource::Media:
93 return new RawResource(request, type); 94 return new RawResource(request, type);
94 case Resource::XSLStyleSheet: 95 case Resource::XSLStyleSheet:
95 return new XSLStyleSheetResource(request, charset); 96 return new XSLStyleSheetResource(request, charset);
96 case Resource::LinkPrefetch: 97 case Resource::LinkPrefetch:
97 return new Resource(request, Resource::LinkPrefetch); 98 return new Resource(request, Resource::LinkPrefetch);
98 case Resource::LinkSubresource: 99 case Resource::LinkSubresource:
99 return new Resource(request, Resource::LinkSubresource); 100 return new Resource(request, Resource::LinkSubresource);
100 case Resource::ImportResource: 101 case Resource::ImportResource:
101 return new RawResource(request, type); 102 return new RawResource(request, type);
102 } 103 }
103 104
104 ASSERT_NOT_REACHED(); 105 ASSERT_NOT_REACHED();
105 return 0; 106 return 0;
106 } 107 }
107 108
108 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 109 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request)
109 { 110 {
110 if (request.priority() != ResourceLoadPriorityUnresolved) 111 if (request.priority() != ResourceLoadPriorityUnresolved)
111 return request.priority(); 112 return request.priority();
112 113
113 switch (type) { 114 switch (type) {
114 case Resource::MainResource: 115 case Resource::MainResource:
115 return ResourceLoadPriorityVeryHigh; 116 return ResourceLoadPriorityVeryHigh;
116 case Resource::CSSStyleSheet: 117 case Resource::CSSStyleSheet:
117 return ResourceLoadPriorityHigh; 118 return ResourceLoadPriorityHigh;
118 case Resource::Raw: 119 case Resource::Raw:
120 case Resource::XMLHttpRequest:
119 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; 121 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
120 case Resource::Script: 122 case Resource::Script:
121 case Resource::Font: 123 case Resource::Font:
122 case Resource::ImportResource: 124 case Resource::ImportResource:
123 return ResourceLoadPriorityMedium; 125 return ResourceLoadPriorityMedium;
124 case Resource::Image: 126 case Resource::Image:
125 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves 127 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves
126 // speed-index by ~5% on average, ~14% at the 99th percentile. 128 // speed-index by ~5% on average, ~14% at the 99th percentile.
127 return ResourceLoadPriorityVeryLow; 129 return ResourceLoadPriorityVeryLow;
128 case Resource::Media: 130 case Resource::Media:
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 case Resource::LinkPrefetch: 211 case Resource::LinkPrefetch:
210 return ResourceRequest::TargetIsPrefetch; 212 return ResourceRequest::TargetIsPrefetch;
211 case Resource::LinkSubresource: 213 case Resource::LinkSubresource:
212 return ResourceRequest::TargetIsSubresource; 214 return ResourceRequest::TargetIsSubresource;
213 case Resource::TextTrack: 215 case Resource::TextTrack:
214 return ResourceRequest::TargetIsTextTrack; 216 return ResourceRequest::TargetIsTextTrack;
215 case Resource::SVGDocument: 217 case Resource::SVGDocument:
216 return ResourceRequest::TargetIsImage; 218 return ResourceRequest::TargetIsImage;
217 case Resource::Media: 219 case Resource::Media:
218 return ResourceRequest::TargetIsMedia; 220 return ResourceRequest::TargetIsMedia;
221 case Resource::XMLHttpRequest:
222 return ResourceRequest::TargetIsXHR;
219 } 223 }
220 ASSERT_NOT_REACHED(); 224 ASSERT_NOT_REACHED();
221 return ResourceRequest::TargetIsSubresource; 225 return ResourceRequest::TargetIsSubresource;
222 } 226 }
223 227
224 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) 228 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader)
225 : m_document(nullptr) 229 : m_document(nullptr)
226 , m_documentLoader(documentLoader) 230 , m_documentLoader(documentLoader)
227 , m_requestCount(0) 231 , m_requestCount(0)
228 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired) 232 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 return FetchContext::nullInstance(); 270 return FetchContext::nullInstance();
267 } 271 }
268 272
269 ResourcePtr<Resource> ResourceFetcher::fetchSynchronously(FetchRequest& request) 273 ResourcePtr<Resource> ResourceFetcher::fetchSynchronously(FetchRequest& request)
270 { 274 {
271 ASSERT(document()); 275 ASSERT(document());
272 request.mutableResourceRequest().setTimeoutInterval(10); 276 request.mutableResourceRequest().setTimeoutInterval(10);
273 ResourceLoaderOptions options(request.options()); 277 ResourceLoaderOptions options(request.options());
274 options.synchronousPolicy = RequestSynchronously; 278 options.synchronousPolicy = RequestSynchronously;
275 request.setOptions(options); 279 request.setOptions(options);
276 return requestResource(Resource::Raw, request); 280 return requestResource(request.resourceRequest().targetType() == ResourceReq uest::TargetIsXHR ? Resource::XMLHttpRequest : Resource::Raw, request);
277 } 281 }
278 282
279 ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request) 283 ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request)
280 { 284 {
281 if (LocalFrame* f = frame()) { 285 if (LocalFrame* f = frame()) {
282 if (f->document()->pageDismissalEventBeingDispatched() != Document::NoDi smissal) { 286 if (f->document()->pageDismissalEventBeingDispatched() != Document::NoDi smissal) {
283 KURL requestURL = request.resourceRequest().url(); 287 KURL requestURL = request.resourceRequest().url();
284 if (requestURL.isValid() && canRequest(Resource::Image, requestURL, request.options(), request.forPreload(), request.originRestriction())) 288 if (requestURL.isValid() && canRequest(Resource::Image, requestURL, request.options(), request.forPreload(), request.originRestriction()))
285 PingLoader::loadImage(f, requestURL); 289 PingLoader::loadImage(f, requestURL);
286 return 0; 290 return 0;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 ASSERT(frame()); 362 ASSERT(frame());
359 ASSERT(type == Resource::LinkPrefetch || type == Resource::LinkSubresource); 363 ASSERT(type == Resource::LinkPrefetch || type == Resource::LinkSubresource);
360 return requestResource(type, request); 364 return requestResource(type, request);
361 } 365 }
362 366
363 ResourcePtr<RawResource> ResourceFetcher::fetchRawResource(FetchRequest& request ) 367 ResourcePtr<RawResource> ResourceFetcher::fetchRawResource(FetchRequest& request )
364 { 368 {
365 return toRawResource(requestResource(Resource::Raw, request)); 369 return toRawResource(requestResource(Resource::Raw, request));
366 } 370 }
367 371
372 ResourcePtr<RawResource> ResourceFetcher::fetchXMLHttpRequest(FetchRequest& requ est)
373 {
374 return toRawResource(requestResource(Resource::XMLHttpRequest, request));
375 }
376
368 ResourcePtr<RawResource> ResourceFetcher::fetchMainResource(FetchRequest& reques t, const SubstituteData& substituteData) 377 ResourcePtr<RawResource> ResourceFetcher::fetchMainResource(FetchRequest& reques t, const SubstituteData& substituteData)
369 { 378 {
370 if (substituteData.isValid()) 379 if (substituteData.isValid())
371 preCacheSubstituteDataForMainResource(request, substituteData); 380 preCacheSubstituteDataForMainResource(request, substituteData);
372 return toRawResource(requestResource(Resource::MainResource, request)); 381 return toRawResource(requestResource(Resource::MainResource, request));
373 } 382 }
374 383
375 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request) 384 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request)
376 { 385 {
377 return toRawResource(requestResource(Resource::Media, request)); 386 return toRawResource(requestResource(Resource::Media, request));
(...skipping 15 matching lines...) Expand all
393 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 402 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
394 resource->setOptions(request.options()); 403 resource->setOptions(request.options());
395 resource->setDataBufferingPolicy(BufferData); 404 resource->setDataBufferingPolicy(BufferData);
396 resource->responseReceived(response); 405 resource->responseReceived(response);
397 if (substituteData.content()->size()) 406 if (substituteData.content()->size())
398 resource->setResourceBuffer(substituteData.content()); 407 resource->setResourceBuffer(substituteData.content());
399 resource->finish(); 408 resource->finish();
400 memoryCache()->add(resource.get()); 409 memoryCache()->add(resource.get());
401 } 410 }
402 411
403 bool ResourceFetcher::checkInsecureContent(Resource::Type type, const KURL& url, MixedContentBlockingTreatment treatment) const 412 bool ResourceFetcher::checkInsecureContent(Resource::Type type, const KURL& url) const
404 { 413 {
405 if (treatment == TreatAsDefaultForType) {
406 switch (type) {
407 case Resource::XSLStyleSheet:
408 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
409 case Resource::Script:
410 case Resource::SVGDocument:
411 case Resource::CSSStyleSheet:
412 case Resource::ImportResource:
413 // These resource can inject script into the current document (Scrip t,
414 // XSL) or exfiltrate the content of the current document (CSS).
415 treatment = TreatAsActiveContent;
416 break;
417
418 case Resource::Font:
419 case Resource::TextTrack:
420 // These resources are passive, but mixed usage is low enough that w e
421 // can block them in a mixed context.
422 treatment = TreatAsActiveContent;
423 break;
424
425 case Resource::Raw:
426 case Resource::Image:
427 case Resource::Media:
428 // These resources can corrupt only the frame's pixels.
429 treatment = TreatAsPassiveContent;
430 break;
431
432 case Resource::MainResource:
433 case Resource::LinkPrefetch:
434 case Resource::LinkSubresource:
435 // These cannot affect the current document.
436 treatment = TreatAsAlwaysAllowedContent;
437 break;
438 }
439 }
440 // FIXME: We need a way to access the top-level frame's mixedContentChecker when that frame 414 // FIXME: We need a way to access the top-level frame's mixedContentChecker when that frame
441 // is in a different process from the current frame. Until that is done, we always allow 415 // is in a different process from the current frame. Until that is done, we always allow
442 // loads in remote frames. 416 // loads in remote frames.
443 if (frame() && !frame()->tree().top()->isLocalFrame()) 417 if (frame() && !frame()->tree().top()->isLocalFrame())
418 return false;
419
420 if (!frame())
444 return true; 421 return true;
445 if (treatment == TreatAsActiveContent) { 422 LocalFrame* top = toLocalFrame(frame()->tree().top());
446 if (LocalFrame* f = frame()) {
447 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url))
448 return false;
449 Frame* top = f->tree().top();
450 if (top != f && !toLocalFrame(top)->loader().mixedContentChecker()-> canRunInsecureContent(toLocalFrame(top)->document()->securityOrigin(), url))
451 return false;
452 }
453 } else if (treatment == TreatAsPassiveContent) {
454 if (LocalFrame* f = frame()) {
455 Frame* top = f->tree().top();
456 if (!toLocalFrame(top)->loader().mixedContentChecker()->canDisplayIn secureContent(toLocalFrame(top)->document()->securityOrigin(), url))
457 return false;
458 if (MixedContentChecker::isMixedContent(toLocalFrame(top)->document( )->securityOrigin(), url)) {
459 switch (type) {
460 case Resource::TextTrack:
461 UseCounter::count(toLocalFrame(top)->document(), UseCounter: :MixedContentTextTrack);
462 break;
463 423
464 case Resource::Raw: 424 switch (type) {
465 UseCounter::count(toLocalFrame(top)->document(), UseCounter: :MixedContentRaw); 425 // Exit early for these resource types, which cannot affect the current docu ment.
466 break; 426 case Resource::MainResource:
427 case Resource::LinkPrefetch:
428 case Resource::LinkSubresource:
429 return true;
467 430
468 case Resource::Image: 431 // These resource can inject script into the current document (Script,
469 UseCounter::count(toLocalFrame(top)->document(), UseCounter: :MixedContentImage); 432 // XSL) or exfiltrate the content of the current document (CSS).
470 break; 433 case Resource::XSLStyleSheet:
434 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
435 case Resource::Script:
436 case Resource::SVGDocument:
437 case Resource::CSSStyleSheet:
438 case Resource::ImportResource:
439 case Resource::XMLHttpRequest:
440 // Intentionally fall-through.
441 // These resources are passive, but mixed usage is low enough that we
442 // can block them in a mixed context.
443 case Resource::Font:
444 case Resource::TextTrack:
445 if (!frame()->loader().mixedContentChecker()->canRunInsecureContent(m_do cument->securityOrigin(), url))
446 return false;
447 if (top != frame() && !top->loader().mixedContentChecker()->canRunInsecu reContent(top->document()->securityOrigin(), url))
448 return false;
449 break;
471 450
472 case Resource::Media: 451 // These resource are passive, and can only affect the document's pixels.
473 UseCounter::count(toLocalFrame(top)->document(), UseCounter: :MixedContentMedia); 452 case Resource::Raw:
474 break; 453 case Resource::Image:
454 case Resource::Media:
455 if (!frame()->loader().mixedContentChecker()->canDisplayInsecureContent( m_document->securityOrigin(), url))
456 return false;
457 if (top != frame() && !top->loader().mixedContentChecker()->canDisplayIn secureContent(top->document()->securityOrigin(), url))
458 return false;
459 if (MixedContentChecker::isMixedContent(top->document()->securityOrigin( ), url)) {
460 switch (type) {
461 case Resource::TextTrack:
462 UseCounter::count(top->document(), UseCounter::MixedContentTextT rack);
463 break;
475 464
476 default: 465 case Resource::Raw:
477 ASSERT_NOT_REACHED(); 466 UseCounter::count(top->document(), UseCounter::MixedContentRaw);
478 } 467 break;
468
469 case Resource::Image:
470 UseCounter::count(top->document(), UseCounter::MixedContentImage );
471 break;
472
473 case Resource::Media:
474 UseCounter::count(top->document(), UseCounter::MixedContentMedia );
475 break;
476
477 default:
478 ASSERT_NOT_REACHED();
479 } 479 }
480 } 480 }
481 } else { 481 break;
482 ASSERT(treatment == TreatAsAlwaysAllowedContent);
483 } 482 }
483
484 return true; 484 return true;
485 } 485 }
486 486
487 bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res ourceLoaderOptions& options, bool forPreload, FetchRequest::OriginRestriction or iginRestriction) const 487 bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res ourceLoaderOptions& options, bool forPreload, FetchRequest::OriginRestriction or iginRestriction) const
488 { 488 {
489 SecurityOrigin* securityOrigin = options.securityOrigin.get(); 489 SecurityOrigin* securityOrigin = options.securityOrigin.get();
490 if (!securityOrigin && document()) 490 if (!securityOrigin && document())
491 securityOrigin = document()->securityOrigin(); 491 securityOrigin = document()->securityOrigin();
492 492
493 if (securityOrigin && !securityOrigin->canDisplay(url)) { 493 if (securityOrigin && !securityOrigin->canDisplay(url)) {
(...skipping 14 matching lines...) Expand all
508 case Resource::Image: 508 case Resource::Image:
509 case Resource::CSSStyleSheet: 509 case Resource::CSSStyleSheet:
510 case Resource::Script: 510 case Resource::Script:
511 case Resource::Font: 511 case Resource::Font:
512 case Resource::Raw: 512 case Resource::Raw:
513 case Resource::LinkPrefetch: 513 case Resource::LinkPrefetch:
514 case Resource::LinkSubresource: 514 case Resource::LinkSubresource:
515 case Resource::TextTrack: 515 case Resource::TextTrack:
516 case Resource::ImportResource: 516 case Resource::ImportResource:
517 case Resource::Media: 517 case Resource::Media:
518 case Resource::XMLHttpRequest:
518 // By default these types of resources can be loaded from any origin. 519 // By default these types of resources can be loaded from any origin.
519 // FIXME: Are we sure about Resource::Font? 520 // FIXME: Are we sure about Resource::Font?
520 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 521 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
521 printAccessDeniedMessage(url); 522 printAccessDeniedMessage(url);
522 return false; 523 return false;
523 } 524 }
524 break; 525 break;
525 case Resource::XSLStyleSheet: 526 case Resource::XSLStyleSheet:
526 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 527 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
527 case Resource::SVGDocument: 528 case Resource::SVGDocument:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowImageFromSource(url, cspReporting)) 565 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowImageFromSource(url, cspReporting))
565 return false; 566 return false;
566 break; 567 break;
567 case Resource::Font: { 568 case Resource::Font: {
568 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting)) 569 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting))
569 return false; 570 return false;
570 break; 571 break;
571 } 572 }
572 case Resource::MainResource: 573 case Resource::MainResource:
573 case Resource::Raw: 574 case Resource::Raw:
575 case Resource::XMLHttpRequest:
574 case Resource::LinkPrefetch: 576 case Resource::LinkPrefetch:
575 case Resource::LinkSubresource: 577 case Resource::LinkSubresource:
576 break; 578 break;
577 case Resource::Media: 579 case Resource::Media:
578 case Resource::TextTrack: 580 case Resource::TextTrack:
579 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting)) 581 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting))
580 return false; 582 return false;
581 break; 583 break;
582 } 584 }
583 585
584 // SVG Images have unique security rules that prevent all subresource reques ts 586 // SVG Images have unique security rules that prevent all subresource reques ts
585 // except for data urls. 587 // except for data urls.
586 if (type != Resource::MainResource) { 588 if (type != Resource::MainResource) {
587 if (frame() && frame()->chromeClient().isSVGImageChromeClient() && !url. protocolIsData()) 589 if (frame() && frame()->chromeClient().isSVGImageChromeClient() && !url. protocolIsData())
588 return false; 590 return false;
589 } 591 }
590 592
591 // Last of all, check for insecure content. We do this last so that when 593 // Last of all, check for insecure content. We do this last so that when
592 // folks block insecure content with a CSP policy, they don't get a warning. 594 // folks block insecure content with a CSP policy, they don't get a warning.
593 // They'll still get a warning in the console about CSP blocking the load. 595 // They'll still get a warning in the console about CSP blocking the load.
594 596
595 // FIXME: Should we consider forPreload here? 597 // FIXME: Should we consider forPreload here?
596 if (!checkInsecureContent(type, url, options.mixedContentBlockingTreatment)) 598 if (!checkInsecureContent(type, url))
597 return false; 599 return false;
598 600
599 return true; 601 return true;
600 } 602 }
601 603
602 bool ResourceFetcher::canAccessResource(Resource* resource, SecurityOrigin* sour ceOrigin, const KURL& url) const 604 bool ResourceFetcher::canAccessResource(Resource* resource, SecurityOrigin* sour ceOrigin, const KURL& url) const
603 { 605 {
604 // Redirects can change the response URL different from one of request. 606 // Redirects can change the response URL different from one of request.
605 if (!canRequest(resource->type(), url, resource->options(), false, FetchRequ est::UseDefaultOriginRestrictionForType)) 607 if (!canRequest(resource->type(), url, resource->options(), false, FetchRequ est::UseDefaultOriginRestrictionForType))
606 return false; 608 return false;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 m_scheduledResourceTimingReports.add(info, resource->type() == Resource: :MainResource); 661 m_scheduledResourceTimingReports.add(info, resource->type() == Resource: :MainResource);
660 if (!m_resourceTimingReportTimer.isActive()) 662 if (!m_resourceTimingReportTimer.isActive())
661 m_resourceTimingReportTimer.startOneShot(0, FROM_HERE); 663 m_resourceTimingReportTimer.startOneShot(0, FROM_HERE);
662 } 664 }
663 665
664 m_validatedURLs.add(request.resourceRequest().url()); 666 m_validatedURLs.add(request.resourceRequest().url());
665 } 667 }
666 668
667 ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc hRequest& request) 669 ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc hRequest& request)
668 { 670 {
669 ASSERT(request.options().synchronousPolicy == RequestAsynchronously || type == Resource::Raw); 671 ASSERT(request.options().synchronousPolicy == RequestAsynchronously || type == Resource::Raw || type == Resource::XMLHttpRequest);
670 672
671 TRACE_EVENT0("blink", "ResourceFetcher::requestResource"); 673 TRACE_EVENT0("blink", "ResourceFetcher::requestResource");
672 674
673 KURL url = request.resourceRequest().url(); 675 KURL url = request.resourceRequest().url();
674 676
675 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s ', priority=%d, forPreload=%u, type=%s", url.elidedString().latin1().data(), req uest.charset().latin1().data(), request.priority(), request.forPreload(), Resour ceTypeName(type)); 677 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s ', priority=%d, forPreload=%u, type=%s", url.elidedString().latin1().data(), req uest.charset().latin1().data(), request.priority(), request.forPreload(), Resour ceTypeName(type));
676 678
677 // If only the fragment identifiers differ, it is the same resource. 679 // If only the fragment identifiers differ, it is the same resource.
678 url = MemoryCache::removeFragmentIdentifierIfNeeded(url); 680 url = MemoryCache::removeFragmentIdentifierIfNeeded(url);
679 681
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 // "Access-Control-Allow-Origin: *" all the time, but some of the 981 // "Access-Control-Allow-Origin: *" all the time, but some of the
980 // client's requests are made without CORS and some with. 982 // client's requests are made without CORS and some with.
981 if (existingResource->resourceRequest().allowStoredCredentials() != request. allowStoredCredentials()) { 983 if (existingResource->resourceRequest().allowStoredCredentials() != request. allowStoredCredentials()) {
982 WTF_LOG(ResourceLoading, "ResourceFetcher::determineRevalidationPolicy r eloading due to difference in credentials settings."); 984 WTF_LOG(ResourceLoading, "ResourceFetcher::determineRevalidationPolicy r eloading due to difference in credentials settings.");
983 return Reload; 985 return Reload;
984 } 986 }
985 987
986 // During the initial load, avoid loading the same resource multiple times f or a single document, 988 // During the initial load, avoid loading the same resource multiple times f or a single document,
987 // even if the cache policies would tell us to. 989 // even if the cache policies would tell us to.
988 // We also group loads of the same resource together. 990 // We also group loads of the same resource together.
989 // Raw resources are exempted, as XHRs fall into this category and may have user-set Cache-Control: 991 // Raw and XHR resources are exempted, as XHR or plugins may have user-set C ache-Control:
990 // headers or other factors that require separate requests. 992 // headers or other factors that require separate requests.
991 if (type != Resource::Raw) { 993 if (type != Resource::Raw && type != Resource::XMLHttpRequest) {
992 if (document() && !document()->loadEventFinished() && m_validatedURLs.co ntains(existingResource->url())) 994 if (document() && !document()->loadEventFinished() && m_validatedURLs.co ntains(existingResource->url()))
993 return Use; 995 return Use;
994 if (existingResource->isLoading()) 996 if (existingResource->isLoading())
995 return Use; 997 return Use;
996 } 998 }
997 999
998 // CachePolicyReload always reloads 1000 // CachePolicyReload always reloads
999 if (cachePolicy == CachePolicyReload) { 1001 if (cachePolicy == CachePolicyReload) {
1000 WTF_LOG(ResourceLoading, "ResourceFetcher::determineRevalidationPolicy r eloading due to CachePolicyReload."); 1002 WTF_LOG(ResourceLoading, "ResourceFetcher::determineRevalidationPolicy r eloading due to CachePolicyReload.");
1001 return Reload; 1003 return Reload;
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 } 1487 }
1486 } 1488 }
1487 1489
1488 void ResourceFetcher::trace(Visitor* visitor) 1490 void ResourceFetcher::trace(Visitor* visitor)
1489 { 1491 {
1490 visitor->trace(m_document); 1492 visitor->trace(m_document);
1491 ResourceLoaderHost::trace(visitor); 1493 ResourceLoaderHost::trace(visitor);
1492 } 1494 }
1493 1495
1494 } 1496 }
OLDNEW
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/fetch/ResourceLoaderOptions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698