- More movement towards the final network API.
Changed ResourceLoader::create to take a ResurceRequest and start
the load. Removed methods relating to setting request
headers. Removed methods relating to metaData. Added some more
convenience methods to ResourceRequest.
* dom/XMLTokenizer.cpp:
(WebCore::openFunc):
* loader/LoaderFunctions.h:
* loader/icon/IconLoader.cpp:
(IconLoader::startLoading):
(IconLoader::didFinishLoading):
* loader/icon/IconLoader.h:
* loader/loader.cpp:
(WebCore::Loader::servePendingRequests):
* loader/mac/LoaderFunctionsMac.mm:
(WebCore::ServeSynchronousRequest):
* platform/gdk/FrameGdk.cpp:
(WebCore::FrameGdkClientDefault::openURL):
(WebCore::FrameGdkClientDefault::submitForm):
* platform/network/ResourceLoader.cpp:
(WebCore::ResourceLoader::ResourceLoader):
(WebCore::ResourceLoader::create):
(WebCore::ResourceLoader::responseHTTPHeadersAsString):
(WebCore::ResourceLoader::url):
(WebCore::ResourceLoader::postData):
(WebCore::ResourceLoader::method):
(WebCore::ResourceLoader::client):
* platform/network/ResourceLoader.h:
* platform/network/ResourceLoaderInternal.h:
(WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
* platform/network/ResourceRequest.h:
(WebCore::ResourceRequest::ResourceRequest):
(WebCore::ResourceRequest::httpAccept):
(WebCore::ResourceRequest::setHTTPAccept):
(WebCore::ResourceRequest::addHTTPHeaderFields):
* platform/network/mac/ResourceLoaderMac.mm:
(WebCore::ResourceLoader::start):
(WebCore::ResourceLoader::receivedResponse):
* platform/qt/FrameQtClient.cpp:
(WebCore::FrameQtClientDefault::openURL):
(WebCore::FrameQtClientDefault::submitForm):
* platform/win/TemporaryLinkStubs.cpp:
(WebCore::ResourceLoader::retrieveResponseEncoding):
* xml/XSLTProcessor.cpp:
(WebCore::docLoaderFunc):
* xml/xmlhttprequest.cpp:
(WebCore::XMLHttpRequest::send):
(WebCore::XMLHttpRequest::didFinishLoading):
(WebCore::XMLHttpRequest::didReceiveData):
* xml/xmlhttprequest.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@17264
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2006-10-24 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin.
+
+ - More movement towards the final network API.
+
+ Changed ResourceLoader::create to take a ResurceRequest and start
+ the load. Removed methods relating to setting request
+ headers. Removed methods relating to metaData. Added some more
+ convenience methods to ResourceRequest.
+
+ * dom/XMLTokenizer.cpp:
+ (WebCore::openFunc):
+ * loader/LoaderFunctions.h:
+ * loader/icon/IconLoader.cpp:
+ (IconLoader::startLoading):
+ (IconLoader::didFinishLoading):
+ * loader/icon/IconLoader.h:
+ * loader/loader.cpp:
+ (WebCore::Loader::servePendingRequests):
+ * loader/mac/LoaderFunctionsMac.mm:
+ (WebCore::ServeSynchronousRequest):
+ * platform/gdk/FrameGdk.cpp:
+ (WebCore::FrameGdkClientDefault::openURL):
+ (WebCore::FrameGdkClientDefault::submitForm):
+ * platform/network/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::ResourceLoader):
+ (WebCore::ResourceLoader::create):
+ (WebCore::ResourceLoader::responseHTTPHeadersAsString):
+ (WebCore::ResourceLoader::url):
+ (WebCore::ResourceLoader::postData):
+ (WebCore::ResourceLoader::method):
+ (WebCore::ResourceLoader::client):
+ * platform/network/ResourceLoader.h:
+ * platform/network/ResourceLoaderInternal.h:
+ (WebCore::ResourceLoaderInternal::ResourceLoaderInternal):
+ * platform/network/ResourceRequest.h:
+ (WebCore::ResourceRequest::ResourceRequest):
+ (WebCore::ResourceRequest::httpAccept):
+ (WebCore::ResourceRequest::setHTTPAccept):
+ (WebCore::ResourceRequest::addHTTPHeaderFields):
+ * platform/network/mac/ResourceLoaderMac.mm:
+ (WebCore::ResourceLoader::start):
+ (WebCore::ResourceLoader::receivedResponse):
+ * platform/qt/FrameQtClient.cpp:
+ (WebCore::FrameQtClientDefault::openURL):
+ (WebCore::FrameQtClientDefault::submitForm):
+ * platform/win/TemporaryLinkStubs.cpp:
+ (WebCore::ResourceLoader::retrieveResponseEncoding):
+ * xml/XSLTProcessor.cpp:
+ (WebCore::docLoaderFunc):
+ * xml/xmlhttprequest.cpp:
+ (WebCore::XMLHttpRequest::send):
+ (WebCore::XMLHttpRequest::didFinishLoading):
+ (WebCore::XMLHttpRequest::didReceiveData):
+ * xml/xmlhttprequest.h:
+
2006-10-24 Anders Carlsson <acarlsson@apple.com>
Reviewed by Geoff.
if (!globalDocLoader || !shouldAllowExternalLoad(uri))
return &globalDescriptor;
+ KURL kurl(uri);
+ ResourceRequest request(kurl);
KURL finalURL;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(0, "GET", uri);
DeprecatedString headers;
- Vector<char> data = ServeSynchronousRequest(cache()->loader(), globalDocLoader, loader.get(), finalURL, headers);
+ Vector<char> data = ServeSynchronousRequest(cache()->loader(), globalDocLoader, request, finalURL, headers);
return new OffsetBuffer(data);
}
#include <wtf/HashMap.h>
#include "PlatformString.h"
#include "ResourceLoaderClient.h" // Defines PlatformResponse
+#include "ResourceRequest.h"
#ifdef __OBJC__
@class NSDictionary;
@class NSString;
@interface NSDictionary (WebCore_Extras)
-+ (id)_webcore_dictionaryWithHeaderMap:(const HashMap<WebCore::String, WebCore::String>&)headerMap;
++ (id)_webcore_dictionaryWithHeaderMap:(const WebCore::ResourceRequest::HTTPHeaderMap&)headerMap;
@end
#else
class DocLoader;
class Loader;
class Request;
+class ResourceRequest;
-
-Vector<char> ServeSynchronousRequest(Loader*, DocLoader*, ResourceLoader*, KURL& finalURL, DeprecatedString& headers);
+Vector<char> ServeSynchronousRequest(Loader*, DocLoader*, const ResourceRequest&, KURL& finalURL, DeprecatedString& headers);
void CheckCacheObjectStatus(DocLoader*, CachedResource*);
bool CheckIfReloading(DocLoader*);
return;
m_httpStatusCode = 0;
- m_resourceLoader = ResourceLoader::create(this, "GET", m_frame->iconURL());
// A frame may be documentless - one example is viewing a PDF directly
if (!m_frame->document()) {
// FIXME - http://bugzilla.opendarwin.org/show_bug.cgi?id=10902
// Once the loader infrastructure will cleanly let us load an icon without a DocLoader, we can implement this
LOG(IconDatabase, "Documentless-frame - icon won't be loaded");
- } else if (!m_resourceLoader->start(m_frame->document()->docLoader())) {
+ }
+
+ m_url = m_frame->iconURL();
+ ResourceRequest request(m_url);
+ m_resourceLoader = ResourceLoader::create(request, this, m_frame->document()->docLoader());
+
+ if (!m_resourceLoader)
LOG_ERROR("Failed to start load for icon at url %s", m_frame->iconURL().url().ascii());
- if (m_resourceLoader)
- m_resourceLoader->kill();
- m_resourceLoader = 0;
- }
}
void IconLoader::stopLoading()
IconDatabase* iconDatabase = IconDatabase::sharedIconDatabase();
ASSERT(iconDatabase);
- KURL iconURL(resourceLoader->url());
+ KURL iconURL(m_url);
if (data)
iconDatabase->setIconDataForIconURL(data, size, iconURL.url());
IconLoader(Frame* frame);
void notifyIconChanged(const KURL& iconURL);
-
+
+ KURL m_url;
RefPtr<ResourceLoader> m_resourceLoader;
Frame* m_frame;
// get the first pending request
Request* req = m_requestsPending.take(0);
- KURL u(req->cachedObject()->url().deprecatedString());
- RefPtr<ResourceLoader> loader = ResourceLoader::create(this, "GET", u);
+ ResourceRequest request(req->cachedObject()->url());
if (!req->cachedObject()->accept().isEmpty())
- loader->addMetaData("accept", req->cachedObject()->accept());
+ request.setHTTPAccept(req->cachedObject()->accept());
if (req->docLoader()) {
KURL r = req->docLoader()->doc()->URL();
if (r.protocol().startsWith("http") && r.path().isEmpty())
r.setPath("/");
- loader->addMetaData("referrer", r.url());
+ request.setHTTPReferrer(r.url());
DeprecatedString domain = r.host();
if (req->docLoader()->doc()->isHTMLDocument())
domain = static_cast<HTMLDocument*>(req->docLoader()->doc())->domain().deprecatedString();
}
+
+ RefPtr<ResourceLoader> loader = ResourceLoader::create(request, this, req->docLoader());
- if (loader->start(req->docLoader()))
+ if (loader)
m_requestsLoading.add(loader.get(), req);
}
#import "Logging.h"
#import "Request.h"
#import "ResourceLoader.h"
+#import "ResourceRequest.h"
#import "WebCoreFrameBridge.h"
#import "loader.h"
#import <wtf/Vector.h>
@implementation NSDictionary (WebCore_Extras)
-+ (id)_webcore_dictionaryWithHeaderMap:(const HashMap<String, String>&)headerMap
++ (id)_webcore_dictionaryWithHeaderMap:(const ResourceRequest::HTTPHeaderMap&)headerMap
{
NSMutableDictionary *headers = [[NSMutableDictionary alloc] init];
- HashMap<String, String>::const_iterator end = headerMap.end();
- for (HashMap<String, String>::const_iterator it = headerMap.begin(); it != end; ++it)
+ ResourceRequest::HTTPHeaderMap::const_iterator end = headerMap.end();
+ for (ResourceRequest::HTTPHeaderMap::const_iterator it = headerMap.begin(); it != end; ++it)
[headers setValue:it->second forKey:it->first];
return [headers autorelease];
return headerString;
}
-Vector<char> ServeSynchronousRequest(Loader *loader, DocLoader *docLoader, ResourceLoader *job, KURL &finalURL, DeprecatedString &responseHeaders)
+Vector<char> ServeSynchronousRequest(Loader *loader, DocLoader *docLoader, const ResourceRequest& request, KURL &finalURL, DeprecatedString &responseHeaders)
{
FrameMac *frame = static_cast<FrameMac *>(docLoader->frame());
WebCoreFrameBridge *bridge = frame->bridge();
- frame->didTellBridgeAboutLoad(job->url().url());
+ frame->didTellBridgeAboutLoad(request.url().url());
BEGIN_BLOCK_OBJC_EXCEPTIONS;
NSDictionary *headerDict = nil;
- const HashMap<String, String>& requestHeaders = job->requestHeaders();
+ const ResourceRequest::HTTPHeaderMap& requestHeaders = request.httpHeaderFields();
if (!requestHeaders.isEmpty())
headerDict = [NSDictionary _webcore_dictionaryWithHeaderMap:requestHeaders];
NSArray *postData = nil;
- if (!job->postData().elements().isEmpty())
- postData = arrayFromFormData(job->postData());
+ if (!request.httpBody().elements().isEmpty())
+ postData = arrayFromFormData(request.httpBody());
NSURL *finalNSURL = nil;
NSDictionary *responseHeaderDict = nil;
int statusCode = 0;
- NSData *resultData = [bridge syncLoadResourceWithMethod:job->method() URL:job->url().getNSURL() customHeaders:headerDict postData:postData finalURL:&finalNSURL responseHeaders:&responseHeaderDict statusCode:&statusCode];
+ NSData *resultData = [bridge syncLoadResourceWithMethod:request.httpMethod() URL:request.url().getNSURL() customHeaders:headerDict postData:postData finalURL:&finalNSURL responseHeaders:&responseHeaderDict statusCode:&statusCode];
- job->kill();
-
finalURL = finalNSURL;
responseHeaders = DeprecatedString::fromNSString(HeaderStringFromDictionary(responseHeaderDict, statusCode));
m_frame->didOpenURL(url);
m_beginCalled = false;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(this, "GET", url);
- loader->start(0);
+ ResourceRequest request(url);
+ RefPtr<ResourceLoader> loader = ResourceLoader::create(request, this, 0);
}
void FrameGdkClientDefault::submitForm(const String& method, const KURL& url, const FormData* postData)
{
m_beginCalled = false;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(this, method, url, *postData);
- loader->start(0);
+ ResourceRequest request(url);
+ request.setHTTPMethod(method);
+ request.setHTTPBody(*postData);
+
+ RefPtr<ResourceLoader> loader = ResourceLoader::create(request, this, 0);
}
void FrameGdkClientDefault::receivedResponse(ResourceLoader*, PlatformResponse)
namespace WebCore {
-ResourceLoader::ResourceLoader(ResourceLoaderClient* client, const String& method, const KURL& url)
- : d(new ResourceLoaderInternal(this, client, method, url))
+ResourceLoader::ResourceLoader(const ResourceRequest& request, ResourceLoaderClient* client)
+ : d(new ResourceLoaderInternal(this, request, client))
{
}
-ResourceLoader::ResourceLoader(ResourceLoaderClient* client, const String& method, const KURL& url, const FormData& postData)
- : d(new ResourceLoaderInternal(this, client, method, url, postData))
+PassRefPtr<ResourceLoader> ResourceLoader::create(const ResourceRequest& request, ResourceLoaderClient* client, DocLoader* dl)
{
-}
-
-PassRefPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderClient* client, const String& method, const KURL& url)
-{
- return new ResourceLoader(client, method, url);
-}
+ RefPtr<ResourceLoader> newLoader(new ResourceLoader(request, client));
+
+ if (newLoader->start(dl))
+ return newLoader.release();
-PassRefPtr<ResourceLoader> ResourceLoader::create(ResourceLoaderClient* client, const String& method, const KURL& url, const FormData& postData)
-{
- return new ResourceLoader(client, method, url, postData);
+ return 0;
}
bool ResourceLoader::isErrorPage() const
return d->m_responseEncoding;
}
-void ResourceLoader::setRequestHeaders(const HashMap<String, String>& requestHeaders)
-{
- d->m_requestHeaders = requestHeaders;
-}
-
-const HashMap<String, String>& ResourceLoader::requestHeaders() const
-{
- return d->m_requestHeaders;
-}
-
-String ResourceLoader::queryMetaData(const String& key) const
-{
- if (key == "HTTP-Headers") {
- assembleResponseHeaders();
- return d->responseHeaders;
- }
-
- return d->metaData.get(key);
-}
-
-void ResourceLoader::addMetaData(const String& key, const String& value)
+String ResourceLoader::responseHTTPHeadersAsString() const
{
- d->metaData.set(key, value);
-}
-
-void ResourceLoader::addMetaData(const HashMap<String, String>& keysAndValues)
-{
- HashMap<String, String>::const_iterator end = keysAndValues.end();
- for (HashMap<String, String>::const_iterator it = keysAndValues.begin(); it != end; ++it)
- d->metaData.set(it->first, it->second);
+ assembleResponseHeaders();
+ return d->responseHeaders;
}
void ResourceLoader::kill()
}
}
-KURL ResourceLoader::url() const
+const ResourceRequest::HTTPHeaderMap& ResourceLoader::requestHeaders() const
+{
+ return d->m_request.httpHeaderFields();
+}
+
+const KURL& ResourceLoader::url() const
{
- return d->URL;
+ return d->m_request.url();
}
-FormData ResourceLoader::postData() const
+const FormData& ResourceLoader::postData() const
{
- return d->postData;
+ return d->m_request.httpBody();
}
-String ResourceLoader::method() const
+const String& ResourceLoader::method() const
{
- return d->method;
+ return d->m_request.httpMethod();
}
ResourceLoaderClient* ResourceLoader::client() const
{
- return d->client;
+ return d->m_client;
}
} // namespace WebCore
#define ResourceLoader_h
#include "ResourceLoaderClient.h" // for PlatformResponse
+#include "ResourceRequest.h"
#include "StringHash.h"
#include "Timer.h"
#include <wtf/HashMap.h>
class ResourceLoader : public Shared<ResourceLoader> {
private:
- ResourceLoader(ResourceLoaderClient*, const String& method, const KURL&);
- ResourceLoader(ResourceLoaderClient*, const String& method, const KURL&, const FormData& postData);
+ ResourceLoader(const ResourceRequest&, ResourceLoaderClient*);
public:
- static PassRefPtr<ResourceLoader> create(ResourceLoaderClient*, const String& method, const KURL&);
- static PassRefPtr<ResourceLoader> create(ResourceLoaderClient*, const String& method, const KURL&, const FormData& postData);
+ // FIXME: should not need the DocLoader
+ static PassRefPtr<ResourceLoader> create(const ResourceRequest&, ResourceLoaderClient*, DocLoader*);
~ResourceLoader();
- bool start(DocLoader*);
- bool startHTTPRequest(const String& referrer);
-
int error() const;
void setError(int);
String errorText() const;
bool isErrorPage() const;
- void setRequestHeaders(const HashMap<String, String>& requestHeaders);
- const HashMap<String, String>& requestHeaders() const;
-
String responseEncoding() const;
- String queryMetaData(const String&) const;
- void addMetaData(const String& key, const String& value);
- void addMetaData(const HashMap<String, String>&);
- void kill();
- KURL url() const;
- String method() const;
- FormData postData() const;
+ String responseHTTPHeadersAsString() const;
+ void kill();
#if PLATFORM(MAC)
void setLoader(WebCoreResourceLoaderImp*);
void receivedResponse(PlatformResponse);
+ const ResourceRequest::HTTPHeaderMap& requestHeaders() const;
+ const KURL& url() const;
+ const String& method() const;
+ const FormData& postData() const;
+
private:
+ bool start(DocLoader*);
+
void assembleResponseHeaders() const;
void retrieveResponseEncoding() const;
class ResourceLoaderInternal
{
public:
- ResourceLoaderInternal(ResourceLoader* job, ResourceLoaderClient* c, const String& method, const KURL& u)
- : client(c)
+ ResourceLoaderInternal(ResourceLoader* loader, const ResourceRequest& request, ResourceLoaderClient* c)
+ : m_client(c)
+ , m_request(request)
, status(0)
- , URL(u)
- , method(method)
, assembledResponseHeaders(true)
, m_retrievedResponseEncoding(true)
, m_loading(false)
#endif
#if USE(WININET)
, m_fileHandle(INVALID_HANDLE_VALUE)
- , m_fileLoadTimer(job, &ResourceLoader::fileLoadTimer)
+ , m_fileLoadTimer(loader, &ResourceLoader::fileLoadTimer)
, m_resourceHandle(0)
, m_secondaryHandle(0)
, m_jobId(0)
{
}
- ResourceLoaderInternal(ResourceLoader* job, ResourceLoaderClient* c, const String& method, const KURL& u, const FormData& p)
- : client(c)
- , status(0)
- , URL(u)
- , method(method)
- , postData(p)
- , assembledResponseHeaders(true)
- , m_retrievedResponseEncoding(true)
- , m_loading(false)
- , m_cancelled(false)
-#if USE(CFNETWORK)
- , m_connection(0)
-#elif PLATFORM(MAC)
- , loader(nil)
- , response(nil)
-#endif
-#if USE(WININET)
- , m_fileHandle(INVALID_HANDLE_VALUE)
- , m_fileLoadTimer(job, &ResourceLoader::fileLoadTimer)
- , m_resourceHandle(0)
- , m_secondaryHandle(0)
- , m_jobId(0)
- , m_threadId(0)
- , m_writing(false)
- , m_formDataString(0)
- , m_formDataLength(0)
- , m_bytesRemainingToWrite(0)
- , m_hasReceivedResponse(false)
- , m_resend(false)
-#endif
-#if USE(CURL)
- , m_handle(0)
-#endif
- {
- }
-
~ResourceLoaderInternal();
- ResourceLoaderClient* client;
-
- int status;
- HashMap<String, String> metaData;
- KURL URL;
- String method;
- FormData postData;
+ ResourceLoaderClient* m_client;
- HashMap<String, String> m_requestHeaders;
+ ResourceRequest m_request;
+ int status;
String m_responseEncoding;
DeprecatedString responseHeaders;
: m_url(url)
, m_cachePolicy(UseProtocolCachePolicy)
, m_timeoutInterval(defaultTimeoutInterval)
+ , m_httpMethod("GET")
, m_allowHTTPCookies(true)
{
}
: m_url(url)
, m_cachePolicy(policy)
, m_timeoutInterval(defaultTimeoutInterval)
+ , m_httpMethod("GET")
, m_allowHTTPCookies(true)
{
setHTTPReferrer(referrer);
String httpHeaderField(const String& name) const { return m_httpHeaderFields.get(name); }
void setHTTPHeaderField(const String& name, const String& value) { m_httpHeaderFields.set(name, value); }
void addHTTPHeaderField(const String& name, const String& value);
+ void addHTTPHeaderFields(const HTTPHeaderMap& headerFields);
String httpContentType() const { return httpHeaderField("Content-Type"); }
void setHTTPContentType(const String& httpContentType) { setHTTPHeaderField("Content-Type", httpContentType); }
String httpUserAgent() const { return httpHeaderField("User-Agent"); }
void setHTTPUserAgent(const String& httpUserAgent) { setHTTPHeaderField("User-Agent", httpUserAgent); }
-
+
+ String httpAccept() const { return httpHeaderField("Accept"); }
+ void setHTTPAccept(const String& httpUserAgent) { setHTTPHeaderField("Accept", httpUserAgent); }
+
const FormData& httpBody() const { return m_httpBody; }
FormData& httpBody() { return m_httpBody; }
void setHTTPBody(const FormData& httpBody) { m_httpBody = httpBody; }
result.first->second += "," + value;
}
+ // FIXME: probably shouldn't inline this
+ inline void ResourceRequest::addHTTPHeaderFields(const HTTPHeaderMap& headerFields)
+ {
+ HTTPHeaderMap::const_iterator end = headerFields.end();
+ for (HTTPHeaderMap::const_iterator it = headerFields.begin(); it != end; ++it)
+ addHTTPHeaderField(it->first, it->second);
+ }
+
} // namespace WebCore
#endif // ResourceRequest_H_
NSDictionary* headerDict = nil;
- if (!d->m_requestHeaders.isEmpty())
- headerDict = [[NSDictionary _webcore_dictionaryWithHeaderMap:d->m_requestHeaders] retain];
+ if (!d->m_request.httpHeaderFields().isEmpty())
+ headerDict = [[NSDictionary _webcore_dictionaryWithHeaderMap:d->m_request.httpHeaderFields()] retain];
if (!postData().elements().isEmpty())
handle = [bridge startLoadingResource:resourceLoader withMethod:method() URL:url().getNSURL() customHeaders:headerDict postData:arrayFromFormData(postData())];
d->m_retrievedResponseEncoding = false;
d->response = response;
HardRetain(d->response);
- if (d->client)
- d->client->receivedResponse(this, response);
+ if (client())
+ client()->receivedResponse(this, response);
}
void ResourceLoader::cancel()
m_frame->didOpenURL(url);
m_assignedMimetype = false;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(this, "GET", url);
- loader->start(m_frame->document() ? m_frame->document()->docLoader() : 0);
+ RequestRequest request(url);
+ RefPtr<ResourceLoader> loader = ResourceLoader::create(request, this, m_frame->document() ? m_frame->document()->docLoader() : 0);
}
void FrameQtClientDefault::submitForm(const String& method, const KURL& url, const FormData* postData)
m_assignedMimetype = false;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(this, method, url, *postData);
- loader->start(m_frame->document() ? m_frame->document()->docLoader() : 0);
+ ResourceRequest request(url);
+ request.setHTTPMethod(method);
+ request.setHTTPBody(*postData);
+
+ RefPtr<ResourceLoader> loader = ResourceLoader::create(request, this, m_frame->document() ? m_frame->document()->docLoader() : 0);
}
void FrameQtClientDefault::checkLoaded()
void ResourceLoader::assembleResponseHeaders() const { }
void ResourceLoader::retrieveResponseEncoding() const {}
-bool ResourceLoader::startHTTPRequest(const String& referrer) { return false; }
Vector<char> ServeSynchronousRequest(Loader*, DocLoader*, ResourceLoader*, KURL&, DeprecatedString&) { notImplemented(); return Vector<char>(); }
xmlChar *base = xmlNodeGetBase(context->document->doc, context->node);
KURL url((const char*)base, (const char*)uri);
xmlFree(base);
+ ResourceRequest request(url);
KURL finalURL;
- RefPtr<ResourceLoader> loader = ResourceLoader::create(0, "GET", url);
DeprecatedString headers;
xmlGenericErrorFunc oldErrorFunc = xmlGenericError;
void *oldErrorContext = xmlGenericErrorContext;
- Vector<char> data = ServeSynchronousRequest(cache()->loader(), globalDocLoader, loader.get(), finalURL, headers);
+ Vector<char> data = ServeSynchronousRequest(cache()->loader(), globalDocLoader, request, finalURL, headers);
xmlSetGenericErrorFunc(0, parseErrorFunc);
// We don't specify an encoding here. Neither Gecko nor WinIE respects
m_aborted = false;
+ ResourceRequest request(m_url);
+
if (!body.isNull() && m_method != "GET" && m_method != "HEAD" && (m_url.protocol().lower() == "http" || m_url.protocol().lower() == "https")) {
String contentType = getRequestHeader("Content-Type");
String charset;
if (!m_encoding.isValid()) // FIXME: report an error?
m_encoding = UTF8Encoding();
- m_loader = ResourceLoader::create(m_async ? this : 0, m_method, m_url, m_encoding.encode(body.characters(), body.length()));
+ request.setHTTPBody(m_encoding.encode(body.characters(), body.length()));
} else {
// FIXME: HEAD requests just crash; see <rdar://4460899> and the commented out tests in http/tests/xmlhttprequest/methods.html.
+ // FIXME: the radar is fixed, should conditionalize this
if (m_method == "HEAD")
m_method = "GET";
- m_loader = ResourceLoader::create(m_async ? this : 0, m_method, m_url);
}
+ request.setHTTPMethod(m_method);
if (m_requestHeaders.size() > 0)
- m_loader->setRequestHeaders(m_requestHeaders);
+ request.addHTTPHeaderFields(m_requestHeaders);
if (!m_async) {
Vector<char> data;
{
// avoid deadlock in case the loader wants to use JS on a background thread
KJS::JSLock::DropAllLocks dropLocks;
- data = ServeSynchronousRequest(cache()->loader(), m_doc->docLoader(), m_loader.get(), finalURL, headers);
+ data = ServeSynchronousRequest(cache()->loader(), m_doc->docLoader(), request, finalURL, headers);
}
m_loader = 0;
gcProtectNullTolerant(KJS::ScriptInterpreter::getDOMObject(this));
}
- // start can return false here, for example if we're no longer attached to a page.
+ // create can return null here, for example if we're no longer attached to a page.
// this is true while running onunload handlers
- // FIXME: Maybe start can return false for other reasons too?
- if (!m_loader->start(m_doc->docLoader()))
- m_loader = 0;
+ // FIXME: Maybe create can return false for other reasons too?
+ m_loader = ResourceLoader::create(request, this, m_doc->docLoader());
}
void XMLHttpRequest::abort()
ASSERT(loader == m_loader);
if (m_responseHeaders.isEmpty() && m_loader)
- m_responseHeaders = m_loader->queryMetaData("HTTP-Headers");
+ m_responseHeaders = m_loader->responseHTTPHeadersAsString();
if (m_state < Sent)
changeState(Sent);
void XMLHttpRequest::didReceiveData(ResourceLoader*, const char* data, int len)
{
if (m_responseHeaders.isEmpty() && m_loader)
- m_responseHeaders = m_loader->queryMetaData("HTTP-Headers");
+ m_responseHeaders = m_loader->responseHTTPHeadersAsString();
if (m_state < Sent)
changeState(Sent);
#include "KURL.h"
#include "ResourceLoaderClient.h"
#include "PlatformString.h"
+#include "ResourceRequest.h"
#include "StringHash.h"
namespace WebCore {
KURL m_url;
DeprecatedString m_method;
bool m_async;
- HashMap<String, String> m_requestHeaders;
+ ResourceRequest::HTTPHeaderMap m_requestHeaders;
RefPtr<ResourceLoader> m_loader;