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

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
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/loader/FrameLoaderClient.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 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());
426 resource->setDataBufferingPolicy(BufferData); 435 resource->setDataBufferingPolicy(BufferData);
427 resource->responseReceived(response); 436 resource->responseReceived(response);
428 if (substituteData.content()->size()) 437 if (substituteData.content()->size())
429 resource->setResourceBuffer(substituteData.content()); 438 resource->setResourceBuffer(substituteData.content());
430 resource->finish(); 439 resource->finish();
431 memoryCache()->add(resource.get()); 440 memoryCache()->add(resource.get());
432 } 441 }
433 442
434 bool ResourceFetcher::checkInsecureContent(Resource::Type type, const KURL& url, MixedContentBlockingTreatment treatment) const 443 bool ResourceFetcher::checkInsecureContent(Resource::Type type, const KURL& url, MixedContentBlockingTreatment treatment) const
435 { 444 {
436 if (treatment == TreatAsDefaultForType) { 445 if (treatment == TreatAsDefaultForType) {
437 switch (type) { 446 switch (type) {
447 // Blockable content list is defined here:
448 // http://w3c.github.io/webappsec/specs/mixedcontent/#category-blockable
438 case Resource::XSLStyleSheet: 449 case Resource::XSLStyleSheet:
439 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 450 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
440 case Resource::Script: 451 case Resource::Script:
441 case Resource::SVGDocument: 452 case Resource::SVGDocument:
442 case Resource::CSSStyleSheet: 453 case Resource::CSSStyleSheet:
443 case Resource::ImportResource: 454 case Resource::ImportResource:
444 // These resource can inject script into the current document (Scrip t, 455 // These resource can inject script into the current document (Scrip t,
445 // XSL) or exfiltrate the content of the current document (CSS). 456 // XSL) or exfiltrate the content of the current document (CSS).
446 treatment = TreatAsActiveContent; 457 treatment = TreatAsActiveContent;
447 break; 458 break;
448 459
449 case Resource::Font: 460 case Resource::Font:
461 case Resource::Manifest:
450 case Resource::TextTrack: 462 case Resource::TextTrack:
451 // These resources are passive, but mixed usage is low enough that w e 463 // These resources are passive, but mixed usage is low enough that w e
452 // can block them in a mixed context. 464 // can block them in a mixed context.
453 treatment = TreatAsActiveContent; 465 treatment = TreatAsActiveContent;
454 break; 466 break;
455 467
456 case Resource::Raw: 468 case Resource::Raw:
457 case Resource::Image: 469 case Resource::Image:
458 case Resource::Media: 470 case Resource::Media:
459 // These resources can corrupt only the frame's pixels. 471 // 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: 535 case Resource::Image:
524 case Resource::CSSStyleSheet: 536 case Resource::CSSStyleSheet:
525 case Resource::Script: 537 case Resource::Script:
526 case Resource::Font: 538 case Resource::Font:
527 case Resource::Raw: 539 case Resource::Raw:
528 case Resource::LinkPrefetch: 540 case Resource::LinkPrefetch:
529 case Resource::LinkSubresource: 541 case Resource::LinkSubresource:
530 case Resource::TextTrack: 542 case Resource::TextTrack:
531 case Resource::ImportResource: 543 case Resource::ImportResource:
532 case Resource::Media: 544 case Resource::Media:
545 case Resource::Manifest:
533 // By default these types of resources can be loaded from any origin. 546 // By default these types of resources can be loaded from any origin.
534 // FIXME: Are we sure about Resource::Font? 547 // FIXME: Are we sure about Resource::Font?
535 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 548 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
536 printAccessDeniedMessage(url); 549 printAccessDeniedMessage(url);
537 return false; 550 return false;
538 } 551 }
539 break; 552 break;
540 case Resource::XSLStyleSheet: 553 case Resource::XSLStyleSheet:
541 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 554 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
542 case Resource::SVGDocument: 555 case Resource::SVGDocument:
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 break; 605 break;
593 case Resource::Font: { 606 case Resource::Font: {
594 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting)) 607 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting))
595 return false; 608 return false;
596 break; 609 break;
597 } 610 }
598 case Resource::MainResource: 611 case Resource::MainResource:
599 case Resource::Raw: 612 case Resource::Raw:
600 case Resource::LinkPrefetch: 613 case Resource::LinkPrefetch:
601 case Resource::LinkSubresource: 614 case Resource::LinkSubresource:
615 case Resource::Manifest:
602 break; 616 break;
603 case Resource::Media: 617 case Resource::Media:
604 case Resource::TextTrack: 618 case Resource::TextTrack:
605 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting)) 619 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting))
606 return false; 620 return false;
607 621
608 if (frame()) { 622 if (frame()) {
609 if (!frame()->loader().client()->allowMedia(url)) 623 if (!frame()->loader().client()->allowMedia(url))
610 return false; 624 return false;
611 } 625 }
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 1567
1554 void ResourceFetcher::trace(Visitor* visitor) 1568 void ResourceFetcher::trace(Visitor* visitor)
1555 { 1569 {
1556 visitor->trace(m_document); 1570 visitor->trace(m_document);
1557 visitor->trace(m_loaders); 1571 visitor->trace(m_loaders);
1558 visitor->trace(m_multipartLoaders); 1572 visitor->trace(m_multipartLoaders);
1559 ResourceLoaderHost::trace(visitor); 1573 ResourceLoaderHost::trace(visitor);
1560 } 1574 }
1561 1575
1562 } 1576 }
OLDNEW
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | Source/core/loader/FrameLoaderClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698