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

Unified Diff: third_party/WebKit/Source/core/fetch/Resource.cpp

Issue 1757083002: [SVG 1/4] Move Resource::finish() for data URLs from requestResource() to Resource::load() Base URL: https://chromium.googlesource.com/chromium/src.git@SVG_new0b
Patch Set: auto-Rebase Created 4 years, 9 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
Index: third_party/WebKit/Source/core/fetch/Resource.cpp
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
index 48d35eb5c52429329d1e625ce723b156d05c3b94..9fbbd871a557e1a247b50e44f5491222e4a15ac6 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -36,6 +36,7 @@
#include "platform/Logging.h"
#include "platform/SharedBuffer.h"
#include "platform/TraceEvent.h"
+#include "platform/exported/WrappedResourceRequest.h"
#include "platform/network/HTTPParsers.h"
#include "platform/weborigin/KURL.h"
#include "public/platform/Platform.h"
@@ -208,6 +209,72 @@ DEFINE_TRACE(Resource)
#endif
}
+void Resource::loadLocallyStaticData(const ResourceRequest& request, const ResourceLoaderOptions& options, const WebString& mimetype, const WebString& charset, PassRefPtr<SharedBuffer> data)
+{
+ setOptions(options);
+
+ const KURL& url = request.url();
+ ASSERT(data);
+
+ ResourceResponse response(url, mimetype, data->size(), charset, String());
+ response.setHTTPStatusCode(200);
+ response.setHTTPStatusText("OK");
+ setDataBufferingPolicy(BufferData);
+
+ RefPtrWillBeRawPtr<Resource> protect(this);
+
+ // FIXME: We should provide a body stream here.
+ responseReceived(response, nullptr);
+ if (data->size())
+ // setResourceBuffer(data);
+ appendData(data->data(), data->size());
+ finish();
+
+ return;
+}
+
+void Resource::loadLocallySubstituteData(const ResourceRequest& request, const ResourceLoaderOptions& options, const SubstituteData& substituteData)
+{
+ ASSERT(substituteData.isValid());
+ ASSERT(getType() == MainResource);
+
+ setNeedsSynchronousCacheHit(substituteData.forceSynchronousLoad());
+
+ RefPtr<SharedBuffer> data = substituteData.content();
+ ASSERT(data);
+
+ loadLocallyStaticData(
+ request,
+ options,
+ substituteData.mimeType(),
+ substituteData.textEncoding(),
+ data.release());
+
+ return;
+}
+
+bool Resource::loadLocallyDataURL(const ResourceRequest& request, const ResourceLoaderOptions& options)
+{
+ ASSERT(request.url().protocolIsData());
+
+ // TODO(japhet): We only send main resource data: urls through WebURLLoader for the benefit of
+ // a service worker test (RenderViewImplTest.ServiceWorkerNetworkProviderSetup), which is at a
+ // layer where it isn't easy to mock out a network load. It uses data: urls to emulate the
+ // behavior it wants to test, which would otherwise be reserved for network loads.
+ if (getType() == MainResource || getType() == Raw)
+ return false;
+
+ WrappedResourceRequest wrappedRequest(request);
+ WebString mimetype;
+ WebString charset;
+ RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(Platform::current()->parseDataURL(request.url(), mimetype, charset));
+ if (!data)
+ return false;
+
+ loadLocallyStaticData(request, options, mimetype, charset, data.release());
+ return true;
+}
+
void Resource::load(ResourceFetcher* fetcher, const ResourceLoaderOptions& options)
{
m_options = options;
@@ -232,6 +299,10 @@ void Resource::load(ResourceFetcher* fetcher, const ResourceLoaderOptions& optio
m_loader->changeToSynchronous();
return;
}
+
+ if (request.url().protocolIsData() && loadLocallyDataURL(request, options))
+ return;
+
m_loader = ResourceLoader::create(fetcher, this, request, options);
m_loader->start();
}
« no previous file with comments | « third_party/WebKit/Source/core/fetch/Resource.h ('k') | third_party/WebKit/Source/core/fetch/ResourceFetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698