Changeset 143569 in webkit
- Timestamp:
- Feb 21, 2013, 12:27:10 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/Source/WebCore/ChangeLog ¶
r143568 r143569 1 2013-02-20 Alexey Proskuryakov <ap@apple.com> 2 3 Stop hardcoding knowledge about blob protocol in ResourceHandle 4 https://bugs.webkit.org/show_bug.cgi?id=110382 5 6 Reviewed by Anders Carlsson. 7 8 * platform/network/BlobRegistry.h: 9 * platform/network/chromium/BlobRegistryProxy.h: 10 Removed loadResourceSynchronously(). Chromium did not even implement it, and 11 cross-platform code doesn't need it any more either. 12 13 * platform/network/BlobRegistryImpl.cpp: 14 (WebCore::loadResourceSynchronously): A function to load a blob synchronously, 15 suitable for being in a ResourceHandle map. 16 (WebCore::registerBlobResourceHandleConstructor): Register loadResourceSynchronously too. 17 (WebCore::BlobRegistryImpl::createResourceHandle): Don't make policy decisions here, 18 it's just a registry. Moved code for checking request method down to BlobResourceHandle. 19 20 * platform/network/BlobRegistryImpl.h: Removed BlobRegistryImpl::loadResourceSynchronously(). 21 A registry shouldn't load resources, and it already has enough accessors to implement 22 this externally. 23 24 * platform/network/BlobResourceHandle.h: 25 * platform/network/BlobResourceHandle.cpp: 26 (WebCore::BlobResourceHandle::createAsync): Renamed from create(), to make it clear 27 that it's not OK to call from synchronous loader. Moved method check here. 28 (WebCore::BlobResourceHandle::loadResourceSynchronously): Moved method check here. 29 We used to fall through to NSURLConnection based loader when method was not GET, 30 which of course resulted in an error eventually, but was just wrong. 31 32 * platform/network/ResourceHandle.cpp: 33 (WebCore::builtinResourceHandleSynchronousLoaderMap): Added a map for synchronous case. 34 (WebCore::ResourceHandle::registerBuiltinSynchronousLoader): Ditto. 35 (WebCore::ResourceHandle::loadResourceSynchronously): We no longer need to hardcode 36 knowledge about blobRegistry and blobs here. 37 38 * platform/network/ResourceHandle.h: Added registerBuiltinSynchronousLoader(). 39 40 * platform/network/chromium/ResourceHandle.h: Removed loadResourceSynchronously(), 41 which was not implemented for Chromium. 42 1 43 2013-02-20 Vsevolod Vlasov <vsevik@chromium.org> 2 44 -
TabularUnified trunk/Source/WebCore/platform/network/BlobRegistry.h ¶
r110066 r143569 60 60 61 61 virtual void unregisterBlobURL(const KURL&) = 0; 62 virtual bool loadResourceSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data) = 0;63 62 64 63 protected: -
TabularUnified trunk/Source/WebCore/platform/network/BlobRegistryImpl.cpp ¶
r125391 r143569 1 1 /* 2 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 59 60 } 60 61 62 static void loadResourceSynchronously(NetworkingContext*, const ResourceRequest& request, StoredCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data) 63 { 64 RefPtr<BlobStorageData> blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(request.url()); 65 BlobResourceHandle::loadResourceSynchronously(blobData, request, error, response, data); 66 } 67 61 68 static void registerBlobResourceHandleConstructor() 62 69 { … … 64 71 if (!didRegister) { 65 72 ResourceHandle::registerBuiltinConstructor("blob", createResourceHandle); 73 ResourceHandle::registerBuiltinSynchronousLoader("blob", loadResourceSynchronously); 66 74 didRegister = true; 67 75 } … … 75 83 #endif 76 84 77 bool BlobRegistryImpl::shouldLoadResource(const ResourceRequest& request) const78 {79 // If the resource is not fetched using the GET method, bail out.80 if (!equalIgnoringCase(request.httpMethod(), "GET"))81 return false;82 83 return true;84 }85 86 85 PassRefPtr<ResourceHandle> BlobRegistryImpl::createResourceHandle(const ResourceRequest& request, ResourceHandleClient* client) 87 86 { 88 if (!shouldLoadResource(request)) 87 RefPtr<BlobResourceHandle> handle = BlobResourceHandle::createAsync(m_blobs.get(request.url().string()), request, client); 88 if (!handle) 89 89 return 0; 90 90 91 RefPtr<BlobResourceHandle> handle = BlobResourceHandle::create(m_blobs.get(request.url().string()), request, client);92 91 handle->start(); 93 92 return handle.release(); 94 }95 96 bool BlobRegistryImpl::loadResourceSynchronously(const ResourceRequest& request, ResourceError& error, ResourceResponse& response, Vector<char>& data)97 {98 if (!shouldLoadResource(request))99 return false;100 101 BlobResourceHandle::loadResourceSynchronously(m_blobs.get(request.url().string()), request, error, response, data);102 return true;103 93 } 104 94 -
TabularUnified trunk/Source/WebCore/platform/network/BlobRegistryImpl.h ¶
r128572 r143569 58 58 virtual void registerBlobURL(const KURL&, const KURL& srcURL); 59 59 virtual void unregisterBlobURL(const KURL&); 60 virtual bool loadResourceSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data);61 60 62 61 PassRefPtr<BlobStorageData> getBlobDataFromURL(const KURL&) const; … … 65 64 66 65 private: 67 bool shouldLoadResource(const ResourceRequest& request) const;68 66 void appendStorageItems(BlobStorageData*, const BlobDataItemList&); 69 67 void appendStorageItems(BlobStorageData*, const BlobDataItemList&, long long offset, long long length); -
TabularUnified trunk/Source/WebCore/platform/network/BlobResourceHandle.cpp ¶
r143349 r143569 71 71 rangeError = 3, 72 72 notReadableError = 4, 73 methodNotAllowed = 5 73 74 }; 74 75 … … 133 134 // BlobResourceHandle 134 135 135 // static 136 PassRefPtr<BlobResourceHandle> BlobResourceHandle::createAsync(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceHandleClient* client) 137 { 138 // FIXME: Should probably call didFail() instead of blocking the load without explanation. 139 if (!equalIgnoringCase(request.httpMethod(), "GET")) 140 return 0; 141 142 return adoptRef(new BlobResourceHandle(blobData, request, client, true)); 143 } 144 136 145 void BlobResourceHandle::loadResourceSynchronously(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceError& error, ResourceResponse& response, Vector<char>& data) 137 146 { 147 if (!equalIgnoringCase(request.httpMethod(), "GET")) { 148 error = ResourceError(webKitBlobResourceDomain, methodNotAllowed, response.url(), "Request method must be GET"); 149 return; 150 } 151 138 152 BlobResourceSynchronousLoader loader(error, response, data); 139 RefPtr<BlobResourceHandle> handle = BlobResourceHandle::create(blobData, request, &loader, false);153 RefPtr<BlobResourceHandle> handle = adoptRef(new BlobResourceHandle(blobData, request, &loader, false)); 140 154 handle->start(); 141 155 } -
TabularUnified trunk/Source/WebCore/platform/network/BlobResourceHandle.h ¶
r127757 r143569 51 51 class BlobResourceHandle : public FileStreamClient, public ResourceHandle { 52 52 public: 53 static PassRefPtr<BlobResourceHandle> create(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceHandleClient* client, bool async = true) 54 { 55 return adoptRef(new BlobResourceHandle(blobData, request, client, async)); 56 } 53 static PassRefPtr<BlobResourceHandle> createAsync(PassRefPtr<BlobStorageData>, const ResourceRequest&, ResourceHandleClient*); 57 54 58 55 static void loadResourceSynchronously(PassRefPtr<BlobStorageData> blobData, const ResourceRequest& request, ResourceError& error, ResourceResponse& response, Vector<char>& data); -
TabularUnified trunk/Source/WebCore/platform/network/ResourceHandle.cpp ¶
r143487 r143569 54 54 } 55 55 56 typedef HashMap<AtomicString, ResourceHandle::BuiltinSynchronousLoader> BuiltinResourceHandleSynchronousLoaderMap; 57 static BuiltinResourceHandleSynchronousLoaderMap& builtinResourceHandleSynchronousLoaderMap() 58 { 59 ASSERT(isMainThread()); 60 DEFINE_STATIC_LOCAL(BuiltinResourceHandleSynchronousLoaderMap, map, ()); 61 return map; 62 } 63 64 void ResourceHandle::registerBuiltinSynchronousLoader(const AtomicString& protocol, ResourceHandle::BuiltinSynchronousLoader loader) 65 { 66 builtinResourceHandleSynchronousLoaderMap().add(protocol, loader); 67 } 68 56 69 ResourceHandle::ResourceHandle(NetworkingContext* context, const ResourceRequest& request, ResourceHandleClient* client, bool defersLoading, bool shouldContentSniff) 57 70 : d(adoptPtr(new ResourceHandleInternal(this, context, request, client, defersLoading, shouldContentSniff && shouldContentSniffURL(request.url())))) … … 116 129 void ResourceHandle::loadResourceSynchronously(NetworkingContext* context, const ResourceRequest& request, StoredCredentials storedCredentials, ResourceError& error, ResourceResponse& response, Vector<char>& data) 117 130 { 118 #if ENABLE(BLOB) 119 // FIXME: This should use a more generic mechanism, like builtinResourceHandleConstructorMap we have for async requests. 120 if (request.url().protocolIs("blob")) 121 if (blobRegistry().loadResourceSynchronously(request, error, response, data)) 122 return; 123 #endif 124 125 ASSERT(builtinResourceHandleConstructorMap().find(request.url().protocol()) == builtinResourceHandleConstructorMap().end()); 131 BuiltinResourceHandleSynchronousLoaderMap::iterator protocolMapItem = builtinResourceHandleSynchronousLoaderMap().find(request.url().protocol()); 132 133 if (protocolMapItem != builtinResourceHandleSynchronousLoaderMap().end()) { 134 protocolMapItem->value(context, request, storedCredentials, error, response, data); 135 return; 136 } 126 137 127 138 platformLoadResourceSynchronously(context, request, storedCredentials, error, response, data); -
TabularUnified trunk/Source/WebCore/platform/network/ResourceHandle.h ¶
r143487 r143569 216 216 static void registerBuiltinConstructor(const AtomicString& protocol, BuiltinConstructor); 217 217 218 typedef void (*BuiltinSynchronousLoader)(NetworkingContext*, const ResourceRequest&, StoredCredentials, ResourceError&, ResourceResponse&, Vector<char>& data); 219 static void registerBuiltinSynchronousLoader(const AtomicString& protocol, BuiltinSynchronousLoader); 220 218 221 protected: 219 222 ResourceHandle(NetworkingContext*, const ResourceRequest&, ResourceHandleClient*, bool defersLoading, bool shouldContentSniff); -
TabularUnified trunk/Source/WebCore/platform/network/chromium/BlobRegistryProxy.h ¶
r139698 r143569 48 48 virtual void unregisterBlobURL(const KURL&); 49 49 50 virtual bool loadResourceSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data) { return false; }51 52 50 private: 53 51 virtual ~BlobRegistryProxy() { }
Note:
See TracChangeset
for help on using the changeset viewer.