Changeset 80219 in webkit
- Timestamp:
- Mar 3, 2011 2:28:47 AM (13 years ago)
- Location:
- trunk/Source/WebKit/chromium
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/chromium/ChangeLog
r80215 r80219 1 2011-03-03 Bill Budge <bbudge@chromium.org> 2 3 Reviewed by David Levin. 4 5 AssociatedURLLoader does not support Cross Origin Requests 6 https://bugs.webkit.org/show_bug.cgi?id=53925 7 8 No tests needed. Exposes no new functionality. 9 10 * src/AssociatedURLLoader.cpp: 11 (WebKit::AssociatedURLLoader::ClientAdapter::create): 12 (WebKit::AssociatedURLLoader::ClientAdapter::ClientAdapter): 13 (WebKit::AssociatedURLLoader::ClientAdapter::willSendRequest): 14 (WebKit::AssociatedURLLoader::ClientAdapter::didSendData): 15 (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveResponse): 16 (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveData): 17 (WebKit::AssociatedURLLoader::ClientAdapter::didReceiveCachedMetadata): 18 (WebKit::AssociatedURLLoader::ClientAdapter::didFinishLoading): 19 (WebKit::AssociatedURLLoader::ClientAdapter::didFail): 20 (WebKit::AssociatedURLLoader::AssociatedURLLoader): 21 (WebKit::AssociatedURLLoader::~AssociatedURLLoader): 22 (WebKit::AssociatedURLLoader::loadSynchronously): 23 (WebKit::AssociatedURLLoader::loadAsynchronously): 24 (WebKit::AssociatedURLLoader::cancel): 25 (WebKit::AssociatedURLLoader::setDefersLoading): 26 * src/AssociatedURLLoader.h: 27 (WebKit::AssociatedURLLoaderOptions::AssociatedURLLoaderOptions): 28 1 29 2011-03-03 Steve Lacey <sjl@chromium.org> 2 30 -
trunk/Source/WebKit/chromium/src/AssociatedURLLoader.cpp
r74161 r80219 1 1 /* 2 * Copyright (C) 2010 Google Inc. All rights reserved.2 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 32 32 #include "AssociatedURLLoader.h" 33 33 34 #include "DocumentThreadableLoader.h" 35 #include "SubresourceLoader.h" 36 #include "ThreadableLoaderClient.h" 34 37 #include "WebApplicationCacheHost.h" 35 38 #include "WebDataSource.h" … … 37 40 #include "WebKit.h" 38 41 #include "WebKitClient.h" 42 #include "WebURLError.h" 43 #include "WebURLLoaderClient.h" 39 44 #include "WebURLRequest.h" 45 #include "WrappedResourceRequest.h" 46 #include "WrappedResourceResponse.h" 47 48 using namespace WebCore; 49 using namespace WebKit; 50 using namespace WTF; 40 51 41 52 namespace WebKit { 42 53 54 // This class bridges the interface differences between WebCore and WebKit loader clients. 55 // It forwards its ThreadableLoaderClient notifications to a WebURLLoaderClient. 56 class AssociatedURLLoader::ClientAdapter : public ThreadableLoaderClient { 57 public: 58 static PassOwnPtr<ClientAdapter> create(WebURLLoader*, WebURLLoaderClient*, bool /*downloadToFile*/); 59 60 virtual void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/); 61 virtual void willSendRequest(ResourceRequest& /*newRequest*/, const ResourceResponse& /*redirectResponse*/); 62 63 virtual void didReceiveResponse(const ResourceResponse&); 64 virtual void didReceiveData(const char*, int /*dataLength*/); 65 virtual void didReceiveCachedMetadata(const char*, int /*dataLength*/); 66 virtual void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/); 67 virtual void didFail(const ResourceError&); 68 69 private: 70 ClientAdapter(WebURLLoader*, WebURLLoaderClient*, bool /*downloadingToFile*/); 71 72 WebURLLoader* m_loader; 73 WebURLLoaderClient* m_client; 74 unsigned long m_downloadLength; 75 bool m_downloadingToFile; 76 }; 77 78 PassOwnPtr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientAdapter::create(WebURLLoader* loader, WebURLLoaderClient* client, bool downloadToFile) 79 { 80 return adoptPtr(new ClientAdapter(loader, client, downloadToFile)); 81 } 82 83 AssociatedURLLoader::ClientAdapter::ClientAdapter(WebURLLoader* loader, WebURLLoaderClient* client, bool downloadingToFile) 84 : m_loader(loader) 85 , m_client(client) 86 , m_downloadLength(0) 87 , m_downloadingToFile(downloadingToFile) 88 { 89 ASSERT(m_loader); 90 ASSERT(m_client); 91 } 92 93 void AssociatedURLLoader::ClientAdapter::willSendRequest(ResourceRequest& newRequest, const ResourceResponse& redirectResponse) 94 { 95 WrappedResourceRequest wrappedNewRequest(newRequest); 96 WrappedResourceResponse wrappedRedirectResponse(redirectResponse); 97 m_client->willSendRequest(m_loader, wrappedNewRequest, wrappedRedirectResponse); 98 } 99 100 void AssociatedURLLoader::ClientAdapter::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 101 { 102 m_client->didSendData(m_loader, bytesSent, totalBytesToBeSent); 103 } 104 105 void AssociatedURLLoader::ClientAdapter::didReceiveResponse(const ResourceResponse& response) 106 { 107 WrappedResourceResponse wrappedResponse(response); 108 m_client->didReceiveResponse(m_loader, wrappedResponse); 109 } 110 111 void AssociatedURLLoader::ClientAdapter::didReceiveData(const char* data, int lengthReceived) 112 { 113 m_client->didReceiveData(m_loader, data, lengthReceived); 114 m_downloadLength += lengthReceived; 115 } 116 117 void AssociatedURLLoader::ClientAdapter::didReceiveCachedMetadata(const char* data, int lengthReceived) 118 { 119 m_client->didReceiveCachedMetadata(m_loader, data, lengthReceived); 120 } 121 122 void AssociatedURLLoader::ClientAdapter::didFinishLoading(unsigned long identifier, double finishTime) 123 { 124 m_client->didFinishLoading(m_loader, finishTime); 125 126 if (m_downloadingToFile) { 127 int downloadLength = m_downloadLength <= INT_MAX ? m_downloadLength : INT_MAX; 128 m_client->didDownloadData(m_loader, downloadLength); 129 } 130 } 131 132 void AssociatedURLLoader::ClientAdapter::didFail(const ResourceError& error) 133 { 134 WebURLError webError(error); 135 m_client->didFail(m_loader, webError); 136 } 137 43 138 AssociatedURLLoader::AssociatedURLLoader(PassRefPtr<WebFrameImpl> frameImpl) 44 : m_frameImpl(frameImpl), 45 m_realLoader(webKitClient()->createURLLoader()), 46 m_realClient(0) 47 { 139 : m_frameImpl(frameImpl) 140 , m_client(0) 141 { 142 ASSERT(m_frameImpl); 143 } 144 145 AssociatedURLLoader::AssociatedURLLoader(PassRefPtr<WebFrameImpl> frameImpl, const AssociatedURLLoaderOptions& options) 146 : m_frameImpl(frameImpl) 147 , m_options(options) 148 , m_client(0) 149 { 150 ASSERT(m_frameImpl); 48 151 } 49 152 … … 52 155 } 53 156 157 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, webcore_name) \ 158 COMPILE_ASSERT(static_cast<int>(WebKit::webkit_name) == static_cast<int>(WebCore::webcore_name), mismatching_enums) 159 160 COMPILE_ASSERT_MATCHING_ENUM(DenyCrossOriginRequests, DenyCrossOriginRequests); 161 COMPILE_ASSERT_MATCHING_ENUM(UseAccessControl, UseAccessControl); 162 COMPILE_ASSERT_MATCHING_ENUM(AllowCrossOriginRequests, AllowCrossOriginRequests); 163 54 164 void AssociatedURLLoader::loadSynchronously(const WebURLRequest& request, WebURLResponse& response, WebURLError& error, WebData& data) 55 165 { 56 ASSERT(!m_realClient); 166 ASSERT(0); // Synchronous loading is not supported. 167 } 168 169 void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client) 170 { 171 ASSERT(!m_client); 172 173 m_client = client; 174 ASSERT(m_client); 175 176 ThreadableLoaderOptions options; 177 options.sendLoadCallbacks = m_options.sendLoadCallbacks; 178 options.sniffContent = m_options.sniffContent; 179 options.allowCredentials = m_options.allowCredentials; 180 options.forcePreflight = m_options.forcePreflight; 181 options.crossOriginRequestPolicy = static_cast<WebCore::CrossOriginRequestPolicy>(options.crossOriginRequestPolicy); 57 182 58 183 WebURLRequest requestCopy(request); 59 prepareRequest(requestCopy); 60 61 m_realLoader->loadSynchronously(requestCopy, response, error, data); 62 } 63 64 void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client) 65 { 66 ASSERT(!m_realClient); 67 68 WebURLRequest requestCopy(request); 69 prepareRequest(requestCopy); 70 71 m_realClient = client; 72 m_realLoader->loadAsynchronously(requestCopy, this); 184 const ResourceRequest& webcoreRequest = request.toResourceRequest(); 185 Document* webcoreDocument = m_frameImpl->frame()->document(); 186 m_clientAdapter = ClientAdapter::create(this, m_client, request.downloadToFile()); 187 188 m_loader = DocumentThreadableLoader::create(webcoreDocument, m_clientAdapter.get(), webcoreRequest, options); 73 189 } 74 190 75 191 void AssociatedURLLoader::cancel() 76 192 { 77 m_realLoader->cancel(); 193 if (m_loader) 194 m_loader->cancel(); 78 195 } 79 196 80 197 void AssociatedURLLoader::setDefersLoading(bool defersLoading) 81 198 { 82 m_realLoader->setDefersLoading(defersLoading); 83 } 84 85 void AssociatedURLLoader::prepareRequest(WebURLRequest& request) 86 { 87 WebApplicationCacheHost* applicationCacheHost = m_frameImpl->dataSource()->applicationCacheHost(); 88 if (applicationCacheHost) 89 applicationCacheHost->willStartSubResourceRequest(request); 90 m_frameImpl->dispatchWillSendRequest(request); 91 } 92 93 void AssociatedURLLoader::willSendRequest(WebURLLoader*, WebURLRequest& newRequest, const WebURLResponse& redirectResponse) 94 { 95 m_realClient->willSendRequest(this, newRequest, redirectResponse); 96 } 97 98 void AssociatedURLLoader::didSendData(WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 99 { 100 m_realClient->didSendData(this, bytesSent, totalBytesToBeSent); 101 } 102 103 void AssociatedURLLoader::didReceiveResponse(WebURLLoader*, const WebURLResponse& response) 104 { 105 m_realClient->didReceiveResponse(this, response); 106 } 107 108 void AssociatedURLLoader::didDownloadData(WebURLLoader*, int dataLength) 109 { 110 m_realClient->didDownloadData(this, dataLength); 111 } 112 113 void AssociatedURLLoader::didReceiveData(WebURLLoader*, const char* data, int dataLength) 114 { 115 m_realClient->didReceiveData(this, data, dataLength); 116 } 117 118 void AssociatedURLLoader::didReceiveCachedMetadata(WebURLLoader*, const char* data, int dataLength) 119 { 120 m_realClient->didReceiveCachedMetadata(this, data, dataLength); 121 } 122 123 void AssociatedURLLoader::didFinishLoading(WebURLLoader*, double finishTime) 124 { 125 m_realClient->didFinishLoading(this, finishTime); 126 } 127 128 void AssociatedURLLoader::didFail(WebURLLoader*, const WebURLError& error) 129 { 130 m_realClient->didFail(this, error); 199 if (m_loader) 200 m_loader->setDefersLoading(defersLoading); 131 201 } 132 202 -
trunk/Source/WebKit/chromium/src/AssociatedURLLoader.h
r74161 r80219 1 1 /* 2 * Copyright (C) 2010 Google Inc. All rights reserved.2 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 33 33 34 34 #include "WebURLLoader.h" 35 #include "WebURLLoaderClient.h"35 #include <wtf/Noncopyable.h> 36 36 #include <wtf/OwnPtr.h> 37 37 #include <wtf/RefPtr.h> 38 39 namespace WebCore { class DocumentThreadableLoader; } 38 40 39 41 namespace WebKit { … … 41 43 class WebFrameImpl; 42 44 45 enum CrossOriginRequestPolicy { 46 DenyCrossOriginRequests, 47 UseAccessControl, 48 AllowCrossOriginRequests 49 }; 50 51 struct AssociatedURLLoaderOptions { 52 AssociatedURLLoaderOptions() : sendLoadCallbacks(false), sniffContent(false), allowCredentials(false), forcePreflight(false), crossOriginRequestPolicy(DenyCrossOriginRequests) { } 53 bool sendLoadCallbacks; 54 bool sniffContent; 55 bool allowCredentials; // Whether to send HTTP credentials and cookies with the request. 56 bool forcePreflight; // If AccessControl is used, whether to force a preflight. 57 CrossOriginRequestPolicy crossOriginRequestPolicy; 58 }; 59 43 60 // This class is used to implement WebFrame::createAssociatedURLLoader. 44 // FIXME: Implement in terms of WebCore::SubresourceLoader. 45 class AssociatedURLLoader : public WebURLLoader, 46 public WebURLLoaderClient { 61 class AssociatedURLLoader : public WebURLLoader { 62 WTF_MAKE_NONCOPYABLE(AssociatedURLLoader); 47 63 public: 48 64 AssociatedURLLoader(PassRefPtr<WebFrameImpl>); 65 AssociatedURLLoader(PassRefPtr<WebFrameImpl>, const AssociatedURLLoaderOptions&); 49 66 ~AssociatedURLLoader(); 50 67 … … 55 72 virtual void setDefersLoading(bool); 56 73 57 // WebURLLoaderClient methods:58 virtual void willSendRequest(WebURLLoader*, WebURLRequest& newRequest, const WebURLResponse& redirectResponse);59 virtual void didSendData(WebURLLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);60 virtual void didReceiveResponse(WebURLLoader*, const WebURLResponse&);61 virtual void didDownloadData(WebURLLoader*, int dataLength);62 virtual void didReceiveData(WebURLLoader*, const char* data, int dataLength);63 virtual void didReceiveCachedMetadata(WebURLLoader*, const char* data, int dataLength);64 virtual void didFinishLoading(WebURLLoader*, double finishTime);65 virtual void didFail(WebURLLoader*, const WebURLError&);66 67 74 private: 68 void prepareRequest(WebURLRequest&);75 class ClientAdapter; 69 76 70 77 RefPtr<WebFrameImpl> m_frameImpl; 71 OwnPtr<WebURLLoader> m_realLoader; 72 WebURLLoaderClient* m_realClient; 78 AssociatedURLLoaderOptions m_options; 79 WebURLLoaderClient* m_client; 80 OwnPtr<ClientAdapter> m_clientAdapter; 81 RefPtr<WebCore::DocumentThreadableLoader> m_loader; 73 82 }; 74 83
Note: See TracChangeset
for help on using the changeset viewer.