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

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, 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
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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 case Resource::Script: 82 case Resource::Script:
83 return new ScriptResource(request, charset); 83 return new ScriptResource(request, charset);
84 case Resource::SVGDocument: 84 case Resource::SVGDocument:
85 return new DocumentResource(request, Resource::SVGDocument); 85 return new DocumentResource(request, Resource::SVGDocument);
86 case Resource::Font: 86 case Resource::Font:
87 return new FontResource(request); 87 return new FontResource(request);
88 case Resource::MainResource: 88 case Resource::MainResource:
89 case Resource::Raw: 89 case Resource::Raw:
90 case Resource::TextTrack: 90 case Resource::TextTrack:
91 case Resource::Media: 91 case Resource::Media:
92 case Resource::ImportResource:
92 return new RawResource(request, type); 93 return new RawResource(request, type);
93 case Resource::XSLStyleSheet: 94 case Resource::XSLStyleSheet:
94 return new XSLStyleSheetResource(request, charset); 95 return new XSLStyleSheetResource(request, charset);
95 case Resource::LinkPrefetch: 96 case Resource::LinkPrefetch:
96 return new Resource(request, Resource::LinkPrefetch);
97 case Resource::LinkSubresource: 97 case Resource::LinkSubresource:
98 return new Resource(request, Resource::LinkSubresource); 98 case Resource::Manifest:
99 case Resource::ImportResource: 99 return new Resource(request, type);
100 return new RawResource(request, type);
101 } 100 }
102 101
103 ASSERT_NOT_REACHED(); 102 ASSERT_NOT_REACHED();
104 return 0; 103 return 0;
105 } 104 }
106 105
107 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 106 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request)
108 { 107 {
109 if (request.priority() != ResourceLoadPriorityUnresolved) 108 if (request.priority() != ResourceLoadPriorityUnresolved)
110 return request.priority(); 109 return request.priority();
111 110
112 switch (type) { 111 switch (type) {
113 case Resource::MainResource: 112 case Resource::MainResource:
114 return ResourceLoadPriorityVeryHigh; 113 return ResourceLoadPriorityVeryHigh;
115 case Resource::CSSStyleSheet: 114 case Resource::CSSStyleSheet:
116 return ResourceLoadPriorityHigh; 115 return ResourceLoadPriorityHigh;
117 case Resource::Raw: 116 case Resource::Raw:
118 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; 117 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
119 case Resource::Script: 118 case Resource::Script:
120 case Resource::Font: 119 case Resource::Font:
121 case Resource::ImportResource: 120 case Resource::ImportResource:
121 case Resource::Manifest:
122 return ResourceLoadPriorityMedium; 122 return ResourceLoadPriorityMedium;
123 case Resource::Image: 123 case Resource::Image:
124 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves 124 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves
125 // speed-index by ~5% on average, ~14% at the 99th percentile. 125 // speed-index by ~5% on average, ~14% at the 99th percentile.
126 return ResourceLoadPriorityVeryLow; 126 return ResourceLoadPriorityVeryLow;
127 case Resource::Media: 127 case Resource::Media:
128 return ResourceLoadPriorityLow; 128 return ResourceLoadPriorityLow;
129 case Resource::XSLStyleSheet: 129 case Resource::XSLStyleSheet:
130 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 130 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
131 return ResourceLoadPriorityHigh; 131 return ResourceLoadPriorityHigh;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 case Resource::CSSStyleSheet: 197 case Resource::CSSStyleSheet:
198 return ResourceRequest::TargetIsStyleSheet; 198 return ResourceRequest::TargetIsStyleSheet;
199 case Resource::Script: 199 case Resource::Script:
200 return ResourceRequest::TargetIsScript; 200 return ResourceRequest::TargetIsScript;
201 case Resource::Font: 201 case Resource::Font:
202 return ResourceRequest::TargetIsFont; 202 return ResourceRequest::TargetIsFont;
203 case Resource::Image: 203 case Resource::Image:
204 return ResourceRequest::TargetIsImage; 204 return ResourceRequest::TargetIsImage;
205 case Resource::Raw: 205 case Resource::Raw:
206 case Resource::ImportResource: 206 case Resource::ImportResource:
207 case Resource::Manifest:
207 return ResourceRequest::TargetIsSubresource; 208 return ResourceRequest::TargetIsSubresource;
208 case Resource::LinkPrefetch: 209 case Resource::LinkPrefetch:
209 return ResourceRequest::TargetIsPrefetch; 210 return ResourceRequest::TargetIsPrefetch;
210 case Resource::LinkSubresource: 211 case Resource::LinkSubresource:
211 return ResourceRequest::TargetIsSubresource; 212 return ResourceRequest::TargetIsSubresource;
212 case Resource::TextTrack: 213 case Resource::TextTrack:
213 return ResourceRequest::TargetIsTextTrack; 214 return ResourceRequest::TargetIsTextTrack;
214 case Resource::SVGDocument: 215 case Resource::SVGDocument:
215 return ResourceRequest::TargetIsImage; 216 return ResourceRequest::TargetIsImage;
216 case Resource::Media: 217 case Resource::Media:
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request) 383 ResourcePtr<RawResource> ResourceFetcher::fetchMedia(FetchRequest& request)
383 { 384 {
384 return toRawResource(requestResource(Resource::Media, request)); 385 return toRawResource(requestResource(Resource::Media, request));
385 } 386 }
386 387
387 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) 388 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request)
388 { 389 {
389 return toRawResource(requestResource(Resource::TextTrack, request)); 390 return toRawResource(requestResource(Resource::TextTrack, request));
390 } 391 }
391 392
393 ResourcePtr<Resource> ResourceFetcher::fetchManifest(FetchRequest& request)
394 {
395 return requestResource(Resource::Manifest, request);
396 }
397
392 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) 398 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
393 { 399 {
394 const KURL& url = request.url(); 400 const KURL& url = request.url();
395 if (Resource* oldResource = memoryCache()->resourceForURL(url)) 401 if (Resource* oldResource = memoryCache()->resourceForURL(url))
396 memoryCache()->remove(oldResource); 402 memoryCache()->remove(oldResource);
397 403
398 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); 404 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString());
399 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); 405 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding());
400 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 406 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
401 resource->setOptions(request.options()); 407 resource->setOptions(request.options());
(...skipping 25 matching lines...) Expand all
427 case Resource::Image: 433 case Resource::Image:
428 case Resource::Font: 434 case Resource::Font:
429 case Resource::Media: 435 case Resource::Media:
430 // These resources can corrupt only the frame's pixels. 436 // These resources can corrupt only the frame's pixels.
431 treatment = TreatAsPassiveContent; 437 treatment = TreatAsPassiveContent;
432 break; 438 break;
433 439
434 case Resource::MainResource: 440 case Resource::MainResource:
435 case Resource::LinkPrefetch: 441 case Resource::LinkPrefetch:
436 case Resource::LinkSubresource: 442 case Resource::LinkSubresource:
443 case Resource::Manifest:
437 // These cannot affect the current document. 444 // These cannot affect the current document.
438 treatment = TreatAsAlwaysAllowedContent; 445 treatment = TreatAsAlwaysAllowedContent;
439 break; 446 break;
440 } 447 }
441 } 448 }
442 if (treatment == TreatAsActiveContent) { 449 if (treatment == TreatAsActiveContent) {
443 if (LocalFrame* f = frame()) { 450 if (LocalFrame* f = frame()) {
444 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url)) 451 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url))
445 return false; 452 return false;
446 LocalFrame* top = f->tree().top(); 453 LocalFrame* top = f->tree().top();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 case Resource::Image: 492 case Resource::Image:
486 case Resource::CSSStyleSheet: 493 case Resource::CSSStyleSheet:
487 case Resource::Script: 494 case Resource::Script:
488 case Resource::Font: 495 case Resource::Font:
489 case Resource::Raw: 496 case Resource::Raw:
490 case Resource::LinkPrefetch: 497 case Resource::LinkPrefetch:
491 case Resource::LinkSubresource: 498 case Resource::LinkSubresource:
492 case Resource::TextTrack: 499 case Resource::TextTrack:
493 case Resource::ImportResource: 500 case Resource::ImportResource:
494 case Resource::Media: 501 case Resource::Media:
502 case Resource::Manifest:
495 // By default these types of resources can be loaded from any origin. 503 // By default these types of resources can be loaded from any origin.
496 // FIXME: Are we sure about Resource::Font? 504 // FIXME: Are we sure about Resource::Font?
497 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 505 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
498 printAccessDeniedMessage(url); 506 printAccessDeniedMessage(url);
499 return false; 507 return false;
500 } 508 }
501 break; 509 break;
502 case Resource::XSLStyleSheet: 510 case Resource::XSLStyleSheet:
503 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 511 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
504 case Resource::SVGDocument: 512 case Resource::SVGDocument:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 break; 551 break;
544 case Resource::Font: { 552 case Resource::Font: {
545 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting)) 553 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowFontFromSource(url, cspReporting))
546 return false; 554 return false;
547 break; 555 break;
548 } 556 }
549 case Resource::MainResource: 557 case Resource::MainResource:
550 case Resource::Raw: 558 case Resource::Raw:
551 case Resource::LinkPrefetch: 559 case Resource::LinkPrefetch:
552 case Resource::LinkSubresource: 560 case Resource::LinkSubresource:
561 case Resource::Manifest:
553 break; 562 break;
554 case Resource::Media: 563 case Resource::Media:
555 case Resource::TextTrack: 564 case Resource::TextTrack:
556 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting)) 565 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS ecurityPolicy()->allowMediaFromSource(url, cspReporting))
557 return false; 566 return false;
558 break; 567 break;
559 } 568 }
560 569
561 // Last of all, check for insecure content. We do this last so that when 570 // Last of all, check for insecure content. We do this last so that when
562 // folks block insecure content with a CSP policy, they don't get a warning. 571 // 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
1457 } 1466 }
1458 } 1467 }
1459 1468
1460 void ResourceFetcher::trace(Visitor* visitor) 1469 void ResourceFetcher::trace(Visitor* visitor)
1461 { 1470 {
1462 visitor->trace(m_document); 1471 visitor->trace(m_document);
1463 ResourceLoaderHost::trace(visitor); 1472 ResourceLoaderHost::trace(visitor);
1464 } 1473 }
1465 1474
1466 } 1475 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698