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

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: review comments Created 6 years, 3 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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 case Resource::Script: 89 case Resource::Script:
90 return new ScriptResource(request, charset); 90 return new ScriptResource(request, charset);
91 case Resource::SVGDocument: 91 case Resource::SVGDocument:
92 return new DocumentResource(request, Resource::SVGDocument); 92 return new DocumentResource(request, Resource::SVGDocument);
93 case Resource::Font: 93 case Resource::Font:
94 return new FontResource(request); 94 return new FontResource(request);
95 case Resource::MainResource: 95 case Resource::MainResource:
96 case Resource::Raw: 96 case Resource::Raw:
97 case Resource::TextTrack: 97 case Resource::TextTrack:
98 case Resource::Media: 98 case Resource::Media:
99 case Resource::ImportResource:
99 return new RawResource(request, type); 100 return new RawResource(request, type);
100 case Resource::XSLStyleSheet: 101 case Resource::XSLStyleSheet:
101 return new XSLStyleSheetResource(request, charset); 102 return new XSLStyleSheetResource(request, charset);
102 case Resource::LinkPrefetch: 103 case Resource::LinkPrefetch:
103 return new Resource(request, Resource::LinkPrefetch);
104 case Resource::LinkSubresource: 104 case Resource::LinkSubresource:
105 return new Resource(request, Resource::LinkSubresource); 105 case Resource::Manifest:
106 case Resource::ImportResource: 106 return new Resource(request, type);
107 return new RawResource(request, type);
108 } 107 }
109 108
110 ASSERT_NOT_REACHED(); 109 ASSERT_NOT_REACHED();
111 return 0; 110 return 0;
112 } 111 }
113 112
114 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 113 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request)
115 { 114 {
116 if (request.priority() != ResourceLoadPriorityUnresolved) 115 if (request.priority() != ResourceLoadPriorityUnresolved)
117 return request.priority(); 116 return request.priority();
118 117
119 switch (type) { 118 switch (type) {
120 case Resource::MainResource: 119 case Resource::MainResource:
121 return ResourceLoadPriorityVeryHigh; 120 return ResourceLoadPriorityVeryHigh;
122 case Resource::CSSStyleSheet: 121 case Resource::CSSStyleSheet:
123 return ResourceLoadPriorityHigh; 122 return ResourceLoadPriorityHigh;
124 case Resource::Raw: 123 case Resource::Raw:
125 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; 124 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
126 case Resource::Script: 125 case Resource::Script:
127 case Resource::Font: 126 case Resource::Font:
128 case Resource::ImportResource: 127 case Resource::ImportResource:
128 case Resource::Manifest:
129 return ResourceLoadPriorityMedium; 129 return ResourceLoadPriorityMedium;
130 case Resource::Image: 130 case Resource::Image:
131 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves 131 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves
132 // speed-index by ~5% on average, ~14% at the 99th percentile. 132 // speed-index by ~5% on average, ~14% at the 99th percentile.
133 return ResourceLoadPriorityVeryLow; 133 return ResourceLoadPriorityVeryLow;
134 case Resource::Media: 134 case Resource::Media:
135 return ResourceLoadPriorityLow; 135 return ResourceLoadPriorityLow;
136 case Resource::XSLStyleSheet: 136 case Resource::XSLStyleSheet:
137 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 137 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
138 return ResourceLoadPriorityHigh; 138 return ResourceLoadPriorityHigh;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 case Resource::Image: 211 case Resource::Image:
212 return WebURLRequest::RequestContextImage; 212 return WebURLRequest::RequestContextImage;
213 case Resource::Raw: 213 case Resource::Raw:
214 return WebURLRequest::RequestContextSubresource; 214 return WebURLRequest::RequestContextSubresource;
215 case Resource::ImportResource: 215 case Resource::ImportResource:
216 return WebURLRequest::RequestContextImport; 216 return WebURLRequest::RequestContextImport;
217 case Resource::LinkPrefetch: 217 case Resource::LinkPrefetch:
218 return WebURLRequest::RequestContextPrefetch; 218 return WebURLRequest::RequestContextPrefetch;
219 case Resource::LinkSubresource: 219 case Resource::LinkSubresource:
220 return WebURLRequest::RequestContextSubresource; 220 return WebURLRequest::RequestContextSubresource;
221 case Resource::Manifest:
222 return WebURLRequest::RequestContextManifest;
221 case Resource::TextTrack: 223 case Resource::TextTrack:
222 return WebURLRequest::RequestContextTrack; 224 return WebURLRequest::RequestContextTrack;
223 case Resource::SVGDocument: 225 case Resource::SVGDocument:
224 return WebURLRequest::RequestContextImage; 226 return WebURLRequest::RequestContextImage;
225 case Resource::Media: // TODO: Split this. 227 case Resource::Media: // TODO: Split this.
226 return WebURLRequest::RequestContextVideo; 228 return WebURLRequest::RequestContextVideo;
227 } 229 }
228 ASSERT_NOT_REACHED(); 230 ASSERT_NOT_REACHED();
229 return WebURLRequest::RequestContextSubresource; 231 return WebURLRequest::RequestContextSubresource;
230 } 232 }
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 return toRawResource(requestResource(Resource::Media, request)); 408 return toRawResource(requestResource(Resource::Media, request));
407 } 409 }
408 410
409 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) 411 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request)
410 { 412 {
411 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); 413 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone );
412 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack); 414 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack);
413 return toRawResource(requestResource(Resource::TextTrack, request)); 415 return toRawResource(requestResource(Resource::TextTrack, request));
414 } 416 }
415 417
418 ResourcePtr<Resource> ResourceFetcher::fetchManifest(FetchRequest& request)
419 {
420 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone );
421 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textManifest);
422 return requestResource(Resource::Manifest, request);
423 }
424
416 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) 425 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
417 { 426 {
418 const KURL& url = request.url(); 427 const KURL& url = request.url();
419 if (Resource* oldResource = memoryCache()->resourceForURL(url)) 428 if (Resource* oldResource = memoryCache()->resourceForURL(url))
420 memoryCache()->remove(oldResource); 429 memoryCache()->remove(oldResource);
421 430
422 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); 431 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString());
423 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); 432 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding());
424 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 433 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
425 resource->setOptions(request.options()); 434 resource->setOptions(request.options());
(...skipping 14 matching lines...) Expand all
440 case Resource::Script: 449 case Resource::Script:
441 case Resource::SVGDocument: 450 case Resource::SVGDocument:
442 case Resource::CSSStyleSheet: 451 case Resource::CSSStyleSheet:
443 case Resource::ImportResource: 452 case Resource::ImportResource:
444 // These resource can inject script into the current document (Scrip t, 453 // These resource can inject script into the current document (Scrip t,
445 // XSL) or exfiltrate the content of the current document (CSS). 454 // XSL) or exfiltrate the content of the current document (CSS).
446 treatment = TreatAsActiveContent; 455 treatment = TreatAsActiveContent;
447 break; 456 break;
448 457
449 case Resource::Font: 458 case Resource::Font:
459 case Resource::Manifest:
kenneth.christiansen 2014/09/02 08:42:23 Link to http://w3c.github.io/webappsec/specs/mixed
mlamouri (slow - plz ping) 2014/09/02 15:24:39 Done.
450 case Resource::TextTrack: 460 case Resource::TextTrack:
451 // These resources are passive, but mixed usage is low enough that w e 461 // These resources are passive, but mixed usage is low enough that w e
452 // can block them in a mixed context. 462 // can block them in a mixed context.
453 treatment = TreatAsActiveContent; 463 treatment = TreatAsActiveContent;
454 break; 464 break;
455 465
456 case Resource::Raw: 466 case Resource::Raw:
457 case Resource::Image: 467 case Resource::Image:
458 case Resource::Media: 468 case Resource::Media:
459 // These resources can corrupt only the frame's pixels. 469 // These resources can corrupt only the frame's pixels.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 case Resource::Image: 533 case Resource::Image:
524 case Resource::CSSStyleSheet: 534 case Resource::CSSStyleSheet:
525 case Resource::Script: 535 case Resource::Script:
526 case Resource::Font: 536 case Resource::Font:
527 case Resource::Raw: 537 case Resource::Raw:
528 case Resource::LinkPrefetch: 538 case Resource::LinkPrefetch:
529 case Resource::LinkSubresource: 539 case Resource::LinkSubresource:
530 case Resource::TextTrack: 540 case Resource::TextTrack:
531 case Resource::ImportResource: 541 case Resource::ImportResource:
532 case Resource::Media: 542 case Resource::Media:
543 case Resource::Manifest:
533 // By default these types of resources can be loaded from any origin. 544 // By default these types of resources can be loaded from any origin.
534 // FIXME: Are we sure about Resource::Font? 545 // FIXME: Are we sure about Resource::Font?
535 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 546 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
536 printAccessDeniedMessage(url); 547 printAccessDeniedMessage(url);
537 return false; 548 return false;
538 } 549 }
539 break; 550 break;
540 case Resource::XSLStyleSheet: 551 case Resource::XSLStyleSheet:
541 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 552 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
542 case Resource::SVGDocument: 553 case Resource::SVGDocument:
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 break; 603 break;
593 case Resource::Font: { 604 case Resource::Font: {
594 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting)) 605 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting))
595 return false; 606 return false;
596 break; 607 break;
597 } 608 }
598 case Resource::MainResource: 609 case Resource::MainResource:
599 case Resource::Raw: 610 case Resource::Raw:
600 case Resource::LinkPrefetch: 611 case Resource::LinkPrefetch:
601 case Resource::LinkSubresource: 612 case Resource::LinkSubresource:
613 case Resource::Manifest:
602 break; 614 break;
603 case Resource::Media: 615 case Resource::Media:
604 case Resource::TextTrack: 616 case Resource::TextTrack:
605 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting)) 617 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting))
606 return false; 618 return false;
607 619
608 if (frame()) { 620 if (frame()) {
609 if (!frame()->loader().client()->allowMedia(url)) 621 if (!frame()->loader().client()->allowMedia(url))
610 return false; 622 return false;
611 } 623 }
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 1565
1554 void ResourceFetcher::trace(Visitor* visitor) 1566 void ResourceFetcher::trace(Visitor* visitor)
1555 { 1567 {
1556 visitor->trace(m_document); 1568 visitor->trace(m_document);
1557 visitor->trace(m_loaders); 1569 visitor->trace(m_loaders);
1558 visitor->trace(m_multipartLoaders); 1570 visitor->trace(m_multipartLoaders);
1559 ResourceLoaderHost::trace(visitor); 1571 ResourceLoaderHost::trace(visitor);
1560 } 1572 }
1561 1573
1562 } 1574 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698