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

Side by Side Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 166633002: Prefetch @import files from CSS files. Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 #include "platform/weborigin/SecurityPolicy.h" 66 #include "platform/weborigin/SecurityPolicy.h"
67 #include "public/platform/Platform.h" 67 #include "public/platform/Platform.h"
68 #include "public/platform/WebURL.h" 68 #include "public/platform/WebURL.h"
69 #include "wtf/text/CString.h" 69 #include "wtf/text/CString.h"
70 #include "wtf/text/WTFString.h" 70 #include "wtf/text/WTFString.h"
71 71
72 #define PRELOAD_DEBUG 0 72 #define PRELOAD_DEBUG 0
73 73
74 namespace WebCore { 74 namespace WebCore {
75 75
76 static Resource* createResource(Resource::Type type, const ResourceRequest& requ est, const String& charset) 76 static Resource* createResource(Resource::Type type, const ResourceRequest& requ est, const String& charset, Document* document)
77 { 77 {
78 switch (type) { 78 switch (type) {
79 case Resource::Image: 79 case Resource::Image:
80 return new ImageResource(request); 80 return new ImageResource(request);
81 case Resource::CSSStyleSheet: 81 case Resource::CSSStyleSheet:
82 return new CSSStyleSheetResource(request, charset); 82 return new CSSStyleSheetResource(request, charset, document);
83 case Resource::Script: 83 case Resource::Script:
84 return new ScriptResource(request, charset); 84 return new ScriptResource(request, charset);
85 case Resource::SVGDocument: 85 case Resource::SVGDocument:
86 return new DocumentResource(request, Resource::SVGDocument); 86 return new DocumentResource(request, Resource::SVGDocument);
87 case Resource::Font: 87 case Resource::Font:
88 return new FontResource(request); 88 return new FontResource(request);
89 case Resource::MainResource: 89 case Resource::MainResource:
90 case Resource::Raw: 90 case Resource::Raw:
91 case Resource::TextTrack: 91 case Resource::TextTrack:
92 return new RawResource(request, type); 92 return new RawResource(request, type);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 const KURL& url = request.url(); 149 const KURL& url = request.url();
150 ASSERT(url.protocolIsData()); 150 ASSERT(url.protocolIsData());
151 151
152 blink::WebString mimetype; 152 blink::WebString mimetype;
153 blink::WebString charset; 153 blink::WebString charset;
154 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset)); 154 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset));
155 if (!data) 155 if (!data)
156 return 0; 156 return 0;
157 ResourceResponse response(url, mimetype, data->size(), charset, String()); 157 ResourceResponse response(url, mimetype, data->size(), charset, String());
158 158
159 Resource* resource = createResource(Resource::Image, request, charset); 159 Resource* resource = createResource(Resource::Image, request, charset, 0);
160 resource->setOptions(resourceOptions); 160 resource->setOptions(resourceOptions);
161 resource->responseReceived(response); 161 resource->responseReceived(response);
162 if (data->size()) 162 if (data->size())
163 resource->setResourceBuffer(data); 163 resource->setResourceBuffer(data);
164 resource->finish(); 164 resource->finish();
165 return resource; 165 return resource;
166 } 166 }
167 167
168 static void populateResourceTiming(ResourceTimingInfo* info, Resource* resource, bool clearLoadTimings) 168 static void populateResourceTiming(ResourceTimingInfo* info, Resource* resource, bool clearLoadTimings)
169 { 169 {
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 return toRawResource(requestResource(Resource::MainResource, request)); 376 return toRawResource(requestResource(Resource::MainResource, request));
377 } 377 }
378 378
379 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData) 379 void ResourceFetcher::preCacheSubstituteDataForMainResource(const FetchRequest& request, const SubstituteData& substituteData)
380 { 380 {
381 const KURL& url = request.url(); 381 const KURL& url = request.url();
382 if (Resource* oldResource = memoryCache()->resourceForURL(url)) 382 if (Resource* oldResource = memoryCache()->resourceForURL(url))
383 memoryCache()->remove(oldResource); 383 memoryCache()->remove(oldResource);
384 384
385 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString()); 385 ResourceResponse response(url, substituteData.mimeType(), substituteData.con tent()->size(), substituteData.textEncoding(), emptyString());
386 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding()); 386 ResourcePtr<Resource> resource = createResource(Resource::MainResource, requ est.resourceRequest(), substituteData.textEncoding(), document());
387 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ; 387 resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad()) ;
388 resource->setOptions(request.options()); 388 resource->setOptions(request.options());
389 resource->setDataBufferingPolicy(BufferData); 389 resource->setDataBufferingPolicy(BufferData);
390 resource->responseReceived(response); 390 resource->responseReceived(response);
391 if (substituteData.content()->size()) 391 if (substituteData.content()->size())
392 resource->setResourceBuffer(substituteData.content()); 392 resource->setResourceBuffer(substituteData.content());
393 resource->finish(); 393 resource->finish();
394 memoryCache()->add(resource.get()); 394 memoryCache()->add(resource.get());
395 } 395 }
396 396
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 if (!lastModified.isEmpty() || !eTag.isEmpty()) { 789 if (!lastModified.isEmpty() || !eTag.isEmpty()) {
790 ASSERT(context().cachePolicy(document()) != CachePolicyReload); 790 ASSERT(context().cachePolicy(document()) != CachePolicyReload);
791 if (context().cachePolicy(document()) == CachePolicyRevalidate) 791 if (context().cachePolicy(document()) == CachePolicyRevalidate)
792 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0") ; 792 revalidatingRequest.setHTTPHeaderField("Cache-Control", "max-age=0") ;
793 if (!lastModified.isEmpty()) 793 if (!lastModified.isEmpty())
794 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModi fied); 794 revalidatingRequest.setHTTPHeaderField("If-Modified-Since", lastModi fied);
795 if (!eTag.isEmpty()) 795 if (!eTag.isEmpty())
796 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag); 796 revalidatingRequest.setHTTPHeaderField("If-None-Match", eTag);
797 } 797 }
798 798
799 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding()); 799 ResourcePtr<Resource> newResource = createResource(resource->type(), revalid atingRequest, resource->encoding(), document());
800 800
801 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource); 801 WTF_LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource .get(), resource);
802 newResource->setResourceToRevalidate(resource); 802 newResource->setResourceToRevalidate(resource);
803 803
804 memoryCache()->remove(resource); 804 memoryCache()->remove(resource);
805 memoryCache()->add(newResource.get()); 805 memoryCache()->add(newResource.get());
806 storeResourceTimingInitiatorInformation(newResource, request); 806 storeResourceTimingInitiatorInformation(newResource, request);
807 TRACE_EVENT_ASYNC_BEGIN2("net", "Resource", newResource.get(), "url", newRes ource->url().string().ascii(), "priority", newResource->resourceRequest().priori ty()); 807 TRACE_EVENT_ASYNC_BEGIN2("net", "Resource", newResource.get(), "url", newRes ource->url().string().ascii(), "priority", newResource->resourceRequest().priori ty());
808 return newResource; 808 return newResource;
809 } 809 }
810 810
811 ResourcePtr<Resource> ResourceFetcher::loadResource(Resource::Type type, FetchRe quest& request, const String& charset) 811 ResourcePtr<Resource> ResourceFetcher::loadResource(Resource::Type type, FetchRe quest& request, const String& charset)
812 { 812 {
813 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); 813 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url()));
814 814
815 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); 815 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data());
816 816
817 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); 817 addAdditionalRequestHeaders(request.mutableResourceRequest(), type);
818 ResourcePtr<Resource> resource = createResource(type, request.mutableResourc eRequest(), charset); 818 ResourcePtr<Resource> resource = createResource(type, request.mutableResourc eRequest(), charset, document());
819 819
820 memoryCache()->add(resource.get()); 820 memoryCache()->add(resource.get());
821 storeResourceTimingInitiatorInformation(resource, request); 821 storeResourceTimingInitiatorInformation(resource, request);
822 TRACE_EVENT_ASYNC_BEGIN2("net", "Resource", resource.get(), "url", resource- >url().string().ascii(), "priority", resource->resourceRequest().priority()); 822 TRACE_EVENT_ASYNC_BEGIN2("net", "Resource", resource.get(), "url", resource- >url().string().ascii(), "priority", resource->resourceRequest().priority());
823 return resource; 823 return resource;
824 } 824 }
825 825
826 void ResourceFetcher::storeResourceTimingInitiatorInformation(const ResourcePtr< Resource>& resource, const FetchRequest& request) 826 void ResourceFetcher::storeResourceTimingInitiatorInformation(const ResourcePtr< Resource>& resource, const FetchRequest& request)
827 { 827 {
828 if (request.options().requestInitiatorContext != DocumentContext) 828 if (request.options().requestInitiatorContext != DocumentContext)
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 case Revalidate: 1401 case Revalidate:
1402 ++m_revalidateCount; 1402 ++m_revalidateCount;
1403 return; 1403 return;
1404 case Use: 1404 case Use:
1405 ++m_useCount; 1405 ++m_useCount;
1406 return; 1406 return;
1407 } 1407 }
1408 } 1408 }
1409 1409
1410 } 1410 }
OLDNEW
« Source/core/fetch/CSSStyleSheetResource.cpp ('K') | « Source/core/fetch/CSSStyleSheetResource.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698