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

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: rebase Created 6 years, 4 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 case Resource::Script: 88 case Resource::Script:
89 return new ScriptResource(request, charset); 89 return new ScriptResource(request, charset);
90 case Resource::SVGDocument: 90 case Resource::SVGDocument:
91 return new DocumentResource(request, Resource::SVGDocument); 91 return new DocumentResource(request, Resource::SVGDocument);
92 case Resource::Font: 92 case Resource::Font:
93 return new FontResource(request); 93 return new FontResource(request);
94 case Resource::MainResource: 94 case Resource::MainResource:
95 case Resource::Raw: 95 case Resource::Raw:
96 case Resource::TextTrack: 96 case Resource::TextTrack:
97 case Resource::Media: 97 case Resource::Media:
98 case Resource::ImportResource:
98 return new RawResource(request, type); 99 return new RawResource(request, type);
99 case Resource::XSLStyleSheet: 100 case Resource::XSLStyleSheet:
100 return new XSLStyleSheetResource(request, charset); 101 return new XSLStyleSheetResource(request, charset);
101 case Resource::LinkPrefetch: 102 case Resource::LinkPrefetch:
102 return new Resource(request, Resource::LinkPrefetch);
103 case Resource::LinkSubresource: 103 case Resource::LinkSubresource:
104 return new Resource(request, Resource::LinkSubresource); 104 case Resource::Manifest:
105 case Resource::ImportResource: 105 return new Resource(request, type);
106 return new RawResource(request, type);
107 } 106 }
108 107
109 ASSERT_NOT_REACHED(); 108 ASSERT_NOT_REACHED();
110 return 0; 109 return 0;
111 } 110 }
112 111
113 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 112 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request)
114 { 113 {
115 if (request.priority() != ResourceLoadPriorityUnresolved) 114 if (request.priority() != ResourceLoadPriorityUnresolved)
116 return request.priority(); 115 return request.priority();
117 116
118 switch (type) { 117 switch (type) {
119 case Resource::MainResource: 118 case Resource::MainResource:
120 return ResourceLoadPriorityVeryHigh; 119 return ResourceLoadPriorityVeryHigh;
121 case Resource::CSSStyleSheet: 120 case Resource::CSSStyleSheet:
122 return ResourceLoadPriorityHigh; 121 return ResourceLoadPriorityHigh;
123 case Resource::Raw: 122 case Resource::Raw:
124 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium; 123 return request.options().synchronousPolicy == RequestSynchronously ? Res ourceLoadPriorityVeryHigh : ResourceLoadPriorityMedium;
125 case Resource::Script: 124 case Resource::Script:
126 case Resource::Font: 125 case Resource::Font:
127 case Resource::ImportResource: 126 case Resource::ImportResource:
127 case Resource::Manifest:
128 return ResourceLoadPriorityMedium; 128 return ResourceLoadPriorityMedium;
129 case Resource::Image: 129 case Resource::Image:
130 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves 130 // We'll default images to VeryLow, and promote whatever is visible. Thi s improves
131 // speed-index by ~5% on average, ~14% at the 99th percentile. 131 // speed-index by ~5% on average, ~14% at the 99th percentile.
132 return ResourceLoadPriorityVeryLow; 132 return ResourceLoadPriorityVeryLow;
133 case Resource::Media: 133 case Resource::Media:
134 return ResourceLoadPriorityLow; 134 return ResourceLoadPriorityLow;
135 case Resource::XSLStyleSheet: 135 case Resource::XSLStyleSheet:
136 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 136 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
137 return ResourceLoadPriorityHigh; 137 return ResourceLoadPriorityHigh;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 case Resource::Script: 206 case Resource::Script:
207 return WebURLRequest::RequestContextScript; 207 return WebURLRequest::RequestContextScript;
208 case Resource::Font: 208 case Resource::Font:
209 return WebURLRequest::RequestContextFont; 209 return WebURLRequest::RequestContextFont;
210 case Resource::Image: 210 case Resource::Image:
211 return WebURLRequest::RequestContextImage; 211 return WebURLRequest::RequestContextImage;
212 case Resource::Raw: 212 case Resource::Raw:
213 return WebURLRequest::RequestContextSubresource; 213 return WebURLRequest::RequestContextSubresource;
214 case Resource::ImportResource: 214 case Resource::ImportResource:
215 return WebURLRequest::RequestContextScript; 215 return WebURLRequest::RequestContextScript;
216 case Resource::Manifest:
217 return WebURLRequest::RequestContextSubresource;
216 case Resource::LinkPrefetch: 218 case Resource::LinkPrefetch:
217 return WebURLRequest::RequestContextPrefetch; 219 return WebURLRequest::RequestContextPrefetch;
218 case Resource::LinkSubresource: 220 case Resource::LinkSubresource:
219 return WebURLRequest::RequestContextSubresource; 221 return WebURLRequest::RequestContextSubresource;
220 case Resource::TextTrack: 222 case Resource::TextTrack:
221 return WebURLRequest::RequestContextTrack; 223 return WebURLRequest::RequestContextTrack;
222 case Resource::SVGDocument: 224 case Resource::SVGDocument:
223 return WebURLRequest::RequestContextImage; 225 return WebURLRequest::RequestContextImage;
224 case Resource::Media: // TODO: Split this. 226 case Resource::Media: // TODO: Split this.
225 return WebURLRequest::RequestContextVideo; 227 return WebURLRequest::RequestContextVideo;
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 return toRawResource(requestResource(Resource::Media, request)); 394 return toRawResource(requestResource(Resource::Media, request));
393 } 395 }
394 396
395 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request) 397 ResourcePtr<RawResource> ResourceFetcher::fetchTextTrack(FetchRequest& request)
396 { 398 {
397 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone ); 399 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone );
398 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack); 400 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textTrack);
399 return toRawResource(requestResource(Resource::TextTrack, request)); 401 return toRawResource(requestResource(Resource::TextTrack, request));
400 } 402 }
401 403
404 ResourcePtr<Resource> ResourceFetcher::fetchManifest(FetchRequest& request)
405 {
406 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone );
407 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon textSubresource);
408 return requestResource(Resource::Manifest, request);
409 }
410
402 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) 411 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
403 { 412 {
404 const KURL& url = request.url(); 413 const KURL& url = request.url();
405 if (Resource* oldResource = memoryCache()->resourceForURL(url)) 414 if (Resource* oldResource = memoryCache()->resourceForURL(url))
406 memoryCache()->remove(oldResource); 415 memoryCache()->remove(oldResource);
407 416
408 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); 417 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString());
409 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); 418 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding());
410 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 419 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
411 resource->setOptions(request.options()); 420 resource->setOptions(request.options());
(...skipping 30 matching lines...) Expand all
442 case Resource::Raw: 451 case Resource::Raw:
443 case Resource::Image: 452 case Resource::Image:
444 case Resource::Media: 453 case Resource::Media:
445 // These resources can corrupt only the frame's pixels. 454 // These resources can corrupt only the frame's pixels.
446 treatment = TreatAsPassiveContent; 455 treatment = TreatAsPassiveContent;
447 break; 456 break;
448 457
449 case Resource::MainResource: 458 case Resource::MainResource:
450 case Resource::LinkPrefetch: 459 case Resource::LinkPrefetch:
451 case Resource::LinkSubresource: 460 case Resource::LinkSubresource:
461 case Resource::Manifest:
452 // These cannot affect the current document. 462 // These cannot affect the current document.
453 treatment = TreatAsAlwaysAllowedContent; 463 treatment = TreatAsAlwaysAllowedContent;
454 break; 464 break;
455 } 465 }
456 } 466 }
457 if (treatment == TreatAsActiveContent) { 467 if (treatment == TreatAsActiveContent) {
458 if (LocalFrame* f = frame()) { 468 if (LocalFrame* f = frame()) {
459 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url)) 469 if (!f->loader().mixedContentChecker()->canRunInsecureContent(m_docu ment->securityOrigin(), url))
460 return false; 470 return false;
461 } 471 }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 case Resource::Image: 519 case Resource::Image:
510 case Resource::CSSStyleSheet: 520 case Resource::CSSStyleSheet:
511 case Resource::Script: 521 case Resource::Script:
512 case Resource::Font: 522 case Resource::Font:
513 case Resource::Raw: 523 case Resource::Raw:
514 case Resource::LinkPrefetch: 524 case Resource::LinkPrefetch:
515 case Resource::LinkSubresource: 525 case Resource::LinkSubresource:
516 case Resource::TextTrack: 526 case Resource::TextTrack:
517 case Resource::ImportResource: 527 case Resource::ImportResource:
518 case Resource::Media: 528 case Resource::Media:
529 case Resource::Manifest:
519 // By default these types of resources can be loaded from any origin. 530 // By default these types of resources can be loaded from any origin.
520 // FIXME: Are we sure about Resource::Font? 531 // FIXME: Are we sure about Resource::Font?
521 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) { 532 if (originRestriction == FetchRequest::RestrictToSameOrigin && !security Origin->canRequest(url)) {
522 printAccessDeniedMessage(url); 533 printAccessDeniedMessage(url);
523 return false; 534 return false;
524 } 535 }
525 break; 536 break;
526 case Resource::XSLStyleSheet: 537 case Resource::XSLStyleSheet:
527 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); 538 ASSERT(RuntimeEnabledFeatures::xsltEnabled());
528 case Resource::SVGDocument: 539 case Resource::SVGDocument:
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 break; 589 break;
579 case Resource::Font: { 590 case Resource::Font: {
580 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting)) 591 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor ting))
581 return false; 592 return false;
582 break; 593 break;
583 } 594 }
584 case Resource::MainResource: 595 case Resource::MainResource:
585 case Resource::Raw: 596 case Resource::Raw:
586 case Resource::LinkPrefetch: 597 case Resource::LinkPrefetch:
587 case Resource::LinkSubresource: 598 case Resource::LinkSubresource:
599 case Resource::Manifest:
588 break; 600 break;
589 case Resource::Media: 601 case Resource::Media:
590 case Resource::TextTrack: 602 case Resource::TextTrack:
591 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting)) 603 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo rting))
592 return false; 604 return false;
593 605
594 if (frame()) { 606 if (frame()) {
595 if (!frame()->loader().client()->allowMedia(url)) 607 if (!frame()->loader().client()->allowMedia(url))
596 return false; 608 return false;
597 } 609 }
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 } 1549 }
1538 } 1550 }
1539 1551
1540 void ResourceFetcher::trace(Visitor* visitor) 1552 void ResourceFetcher::trace(Visitor* visitor)
1541 { 1553 {
1542 visitor->trace(m_document); 1554 visitor->trace(m_document);
1543 ResourceLoaderHost::trace(visitor); 1555 ResourceLoaderHost::trace(visitor);
1544 } 1556 }
1545 1557
1546 } 1558 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698