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

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

Issue 295063002: [NotLanded] Implement the fetching algorithm of the Web Manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 7 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
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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
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::TextTrack: 91 case Resource::TextTrack:
92 case Resource::Media: 92 case Resource::Media:
93 case Resource::ImportResource:
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); 96 return new XSLStyleSheetResource(request);
96 case Resource::LinkPrefetch: 97 case Resource::LinkPrefetch:
97 return new Resource(request, Resource::LinkPrefetch);
98 case Resource::LinkSubresource: 98 case Resource::LinkSubresource:
99 return new Resource(request, Resource::LinkSubresource); 99 case Resource::Manifest:
100 return new Resource(request, type);
100 case Resource::Shader: 101 case Resource::Shader:
101 return new ShaderResource(request); 102 return new ShaderResource(request);
102 case Resource::ImportResource:
103 return new RawResource(request, type);
104 } 103 }
105 104
106 ASSERT_NOT_REACHED(); 105 ASSERT_NOT_REACHED();
107 return 0; 106 return 0;
108 } 107 }
109 108
110 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 109 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request)
111 { 110 {
112 if (request.priority() != ResourceLoadPriorityUnresolved) 111 if (request.priority() != ResourceLoadPriorityUnresolved)
113 return request.priority(); 112 return request.priority();
114 113
115 switch (type) { 114 switch (type) {
116 case Resource::MainResource: 115 case Resource::MainResource:
117 return ResourceLoadPriorityVeryHigh; 116 return ResourceLoadPriorityVeryHigh;
118 case Resource::CSSStyleSheet: 117 case Resource::CSSStyleSheet:
119 return ResourceLoadPriorityHigh; 118 return ResourceLoadPriorityHigh;
120 case Resource::Raw: 119 case Resource::Raw:
121 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; 120 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
122 case Resource::Script: 121 case Resource::Script:
123 case Resource::Font: 122 case Resource::Font:
124 case Resource::ImportResource: 123 case Resource::ImportResource:
124 case Resource::Manifest:
125 return ResourceLoadPriorityMedium; 125 return ResourceLoadPriorityMedium;
126 case Resource::Image: 126 case Resource::Image:
127 // 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
128 // speed-index by ~5% on average, ~14% at the 99th percentile. 128 // speed-index by ~5% on average, ~14% at the 99th percentile.
129 return ResourceLoadPriorityVeryLow; 129 return ResourceLoadPriorityVeryLow;
130 case Resource::Media: 130 case Resource::Media:
131 return ResourceLoadPriorityLow; 131 return ResourceLoadPriorityLow;
132 case Resource::XSLStyleSheet: 132 case Resource::XSLStyleSheet:
133 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 133 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
134 return ResourceLoadPriorityHigh; 134 return ResourceLoadPriorityHigh;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 return ResourceRequest::TargetIsStyleSheet; 203 return ResourceRequest::TargetIsStyleSheet;
204 case Resource::Script: 204 case Resource::Script:
205 return ResourceRequest::TargetIsScript; 205 return ResourceRequest::TargetIsScript;
206 case Resource::Font: 206 case Resource::Font:
207 return ResourceRequest::TargetIsFont; 207 return ResourceRequest::TargetIsFont;
208 case Resource::Image: 208 case Resource::Image:
209 return ResourceRequest::TargetIsImage; 209 return ResourceRequest::TargetIsImage;
210 case Resource::Shader: 210 case Resource::Shader:
211 case Resource::Raw: 211 case Resource::Raw:
212 case Resource::ImportResource: 212 case Resource::ImportResource:
213 case Resource::Manifest:
213 return ResourceRequest::TargetIsSubresource; 214 return ResourceRequest::TargetIsSubresource;
214 case Resource::LinkPrefetch: 215 case Resource::LinkPrefetch:
215 return ResourceRequest::TargetIsPrefetch; 216 return ResourceRequest::TargetIsPrefetch;
216 case Resource::LinkSubresource: 217 case Resource::LinkSubresource:
217 return ResourceRequest::TargetIsSubresource; 218 return ResourceRequest::TargetIsSubresource;
218 case Resource::TextTrack: 219 case Resource::TextTrack:
219 return ResourceRequest::TargetIsTextTrack; 220 return ResourceRequest::TargetIsTextTrack;
220 case Resource::SVGDocument: 221 case Resource::SVGDocument:
221 return ResourceRequest::TargetIsImage; 222 return ResourceRequest::TargetIsImage;
222 case Resource::Media: 223 case Resource::Media:
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request) 394 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request)
394 { 395 {
395 return toRawResource(requestResource(Resource::Media, request)); 396 return toRawResource(requestResource(Resource::Media, request));
396 } 397 }
397 398
398 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) 399 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request)
399 { 400 {
400 return toRawResource(requestResource(Resource::TextTrack, request)); 401 return toRawResource(requestResource(Resource::TextTrack, request));
401 } 402 }
402 403
404 ResourcePtr<Resource> ResourceFetcher::fetchManifest(FetchRequest& request)
405 {
406 return requestResource(Resource::Manifest, request);
407 }
408
403 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) 409 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
404 { 410 {
405 const KURL& url = request.url(); 411 const KURL& url = request.url();
406 if (Resource* oldResource = memoryCache()->resourceForURL(url)) 412 if (Resource* oldResource = memoryCache()->resourceForURL(url))
407 memoryCache()->remove(oldResource); 413 memoryCache()->remove(oldResource);
408 414
409 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); 415 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString());
410 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); 416 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding());
411 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 417 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
412 resource->setOptions(request.options()); 418 resource->setOptions(request.options());
(...skipping 26 matching lines...) Expand all
439 case Resource::Image: 445 case Resource::Image:
440 case Resource::Font: 446 case Resource::Font:
441 case Resource::Media: 447 case Resource::Media:
442 // These resources can corrupt only the frame's pixels. 448 // These resources can corrupt only the frame's pixels.
443 treatment = TreatAsPassiveContent; 449 treatment = TreatAsPassiveContent;
444 break; 450 break;
445 451
446 case Resource::MainResource: 452 case Resource::MainResource:
447 case Resource::LinkPrefetch: 453 case Resource::LinkPrefetch:
448 case Resource::LinkSubresource: 454 case Resource::LinkSubresource:
455 case Resource::Manifest:
449 // These cannot affect the current document. 456 // These cannot affect the current document.
450 treatment = TreatAsAlwaysAllowedContent; 457 treatment = TreatAsAlwaysAllowedContent;
451 break; 458 break;
452 } 459 }
453 } 460 }
454 if (treatment == TreatAsActiveContent) { 461 if (treatment == TreatAsActiveContent) {
455 if (LocalFrame* f = frame()) { 462 if (LocalFrame* f = frame()) {
456 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url)) 463 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url))
457 return false; 464 return false;
458 LocalFrame* top = f->tree().top(); 465 LocalFrame* top = f->tree().top();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 case Resource::CSSStyleSheet: 503 case Resource::CSSStyleSheet:
497 case Resource::Script: 504 case Resource::Script:
498 case Resource::Font: 505 case Resource::Font:
499 case Resource::Raw: 506 case Resource::Raw:
500 case Resource::LinkPrefetch: 507 case Resource::LinkPrefetch:
501 case Resource::LinkSubresource: 508 case Resource::LinkSubresource:
502 case Resource::TextTrack: 509 case Resource::TextTrack:
503 case Resource::Shader: 510 case Resource::Shader:
504 case Resource::ImportResource: 511 case Resource::ImportResource:
505 case Resource::Media: 512 case Resource::Media:
513 case Resource::Manifest:
506 // By default these types of resources can be loaded from any origin. 514 // By default these types of resources can be loaded from any origin.
507 // FIXME: Are we sure about Resource::Font? 515 // FIXME: Are we sure about Resource::Font?
508 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 516 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
509 printAccessDeniedMessage(url); 517 printAccessDeniedMessage(url);
510 return false; 518 return false;
511 } 519 }
512 break; 520 break;
513 case Resource::XSLStyleSheet: 521 case Resource::XSLStyleSheet:
514 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 522 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
515 case Resource::SVGDocument: 523 case Resource::SVGDocument:
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 break; 564 break;
557 case Resource::Font: { 565 case Resource::Font: {
558 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting)) 566 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting))
559 return false; 567 return false;
560 break; 568 break;
561 } 569 }
562 case Resource::MainResource: 570 case Resource::MainResource:
563 case Resource::Raw: 571 case Resource::Raw:
564 case Resource::LinkPrefetch: 572 case Resource::LinkPrefetch:
565 case Resource::LinkSubresource: 573 case Resource::LinkSubresource:
574 case Resource::Manifest:
566 break; 575 break;
567 case Resource::Media: 576 case Resource::Media:
568 case Resource::TextTrack: 577 case Resource::TextTrack:
569 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting)) 578 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting))
570 return false; 579 return false;
571 break; 580 break;
572 } 581 }
573 582
574 // Last of all, check for insecure content. We do this last so that when 583 // Last of all, check for insecure content. We do this last so that when
575 // folks block insecure content with a CSP policy, they don't get a warning. 584 // folks block insecure content with a CSP policy, they don't get a warning.
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
1470 } 1479 }
1471 } 1480 }
1472 1481
1473 void ResourceFetcher::trace(Visitor* visitor) 1482 void ResourceFetcher::trace(Visitor* visitor)
1474 { 1483 {
1475 visitor->trace(m_document); 1484 visitor->trace(m_document);
1476 ResourceLoaderHost::trace(visitor); 1485 ResourceLoaderHost::trace(visitor);
1477 } 1486 }
1478 1487
1479 } 1488 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698