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

Unified Diff: Source/core/fetch/RawResource.cpp

Issue 1170503003: Remove resource type-specific fetching logic from ResourceFetcher (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Null-check Document::loader() before calling startPreload() Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/fetch/RawResource.h ('k') | Source/core/fetch/Resource.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/RawResource.cpp
diff --git a/Source/core/fetch/RawResource.cpp b/Source/core/fetch/RawResource.cpp
index 0f8f946864d822bfdccae31448d0a5e8c5d55601..57c32362fe801c028bbb1241dcc33bf81b9a2623 100644
--- a/Source/core/fetch/RawResource.cpp
+++ b/Source/core/fetch/RawResource.cpp
@@ -26,13 +26,84 @@
#include "config.h"
#include "core/fetch/RawResource.h"
+#include "core/fetch/FetchRequest.h"
+#include "core/fetch/MemoryCache.h"
#include "core/fetch/ResourceClientWalker.h"
#include "core/fetch/ResourceFetcher.h"
#include "core/fetch/ResourceLoader.h"
+#include "core/fetch/SubstituteData.h"
#include "platform/SharedBuffer.h"
namespace blink {
+void RawResource::preCacheSubstituteDataForMainResource(const FetchRequest& request, ResourceFetcher* fetcher, const SubstituteData& substituteData)
+{
+ const String cacheIdentifier = fetcher->getCacheIdentifier();
+ const KURL& url = request.url();
+ if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifier))
+ memoryCache()->remove(oldResource);
+
+ ResourceResponse response(url, substituteData.mimeType(), substituteData.content()->size(), substituteData.textEncoding(), emptyString());
+ ResourcePtr<Resource> resource = new RawResource(request.resourceRequest(), Resource::MainResource);
+ resource->setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad());
+ resource->setOptions(request.options());
+ resource->setDataBufferingPolicy(BufferData);
+ resource->responseReceived(response, nullptr);
+ if (substituteData.content()->size())
+ resource->setResourceBuffer(substituteData.content());
+ resource->setCacheIdentifier(cacheIdentifier);
+ resource->finish();
+ memoryCache()->add(resource.get());
+}
+
+ResourcePtr<Resource> RawResource::fetchSynchronously(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ request.mutableResourceRequest().setTimeoutInterval(10);
+ ResourceLoaderOptions options(request.options());
+ options.synchronousPolicy = RequestSynchronously;
+ request.setOptions(options);
+ return fetcher->requestResource(request, RawResourceFactory(Resource::Raw));
+}
+
+ResourcePtr<RawResource> RawResource::fetchImport(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone);
+ request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImport);
+ RawResourceFactory factory(Resource::ImportResource);
+ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::ImportResource)));
+}
+
+ResourcePtr<RawResource> RawResource::fetch(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone);
+ ASSERT(request.resourceRequest().requestContext() != WebURLRequest::RequestContextUnspecified);
+ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::Raw)));
+}
+
+ResourcePtr<RawResource> RawResource::fetchMainResource(FetchRequest& request, ResourceFetcher* fetcher, const SubstituteData& substituteData)
+{
+ ASSERT(request.resourceRequest().frameType() != WebURLRequest::FrameTypeNone);
+ ASSERT(request.resourceRequest().requestContext() == WebURLRequest::RequestContextForm || request.resourceRequest().requestContext() == WebURLRequest::RequestContextFrame || request.resourceRequest().requestContext() == WebURLRequest::RequestContextHyperlink || request.resourceRequest().requestContext() == WebURLRequest::RequestContextIframe || request.resourceRequest().requestContext() == WebURLRequest::RequestContextInternal || request.resourceRequest().requestContext() == WebURLRequest::RequestContextLocation);
+
+ if (substituteData.isValid())
+ preCacheSubstituteDataForMainResource(request, fetcher, substituteData);
+ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::MainResource)));
+}
+
+ResourcePtr<RawResource> RawResource::fetchMedia(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone);
+ ASSERT(request.resourceRequest().requestContext() == WebURLRequest::RequestContextAudio || request.resourceRequest().requestContext() == WebURLRequest::RequestContextVideo);
+ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::Media)));
+}
+
+ResourcePtr<RawResource> RawResource::fetchTextTrack(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone);
+ request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextTrack);
+ return toRawResource(fetcher->requestResource(request, RawResourceFactory(Resource::TextTrack)));
+}
+
RawResource::RawResource(const ResourceRequest& resourceRequest, Type type)
: Resource(resourceRequest, type)
{
« no previous file with comments | « Source/core/fetch/RawResource.h ('k') | Source/core/fetch/Resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698