OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |