[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
mjs
mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:14:45 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit d093215572d6e98785f0c1629aacf71a7be73edf
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Nov 21 23:27:33 2003 +0000
WebCore:
Reviewed by Ken.
WebCore part of fix for:
<rdar://problem/3487134>: Implement http request/response status and headers for XMLHttpRequest
* khtml/ecma/xmlhttprequest.cpp:
(KJS::XMLHttpRequest::getValueProperty): Call appropriate methods for
status and statusText.
(KJS::XMLHttpRequest::send): Set request headers as "customHeaders"
metadata property.
(KJS::XMLHttpRequest::setRequestHeader): Simply append to header
string.
(KJS::XMLHttpRequest::getAllResponseHeaders): Return the header string
except for the first line.
(KJS::XMLHttpRequest::getResponseHeader): Scan the response header
string for the header field. Not sure if it's worth being more
efficient.
(KJS::XMLHttpRequest::getStatus): Try to pull a code out
of the status line.
(KJS::XMLHttpRequest::getStatusText): Pull the first line
off the headers (if any), otherwise return undefined.
(KJS::XMLHttpRequest::slotData): The first time through, save
the response headers, retrieved from "HTTP-Headers" metadata
property.
(KJS::XMLHttpRequestProtoFunc::tryCall): Make setRequestHeader,
getResponseHeader, getAllResponseHeaders call the right thing.
* khtml/ecma/xmlhttprequest.h:
* kwq/KWQKJobClasses.h:
* kwq/KWQKJobClasses.mm:
(KIO::TransferJobPrivate::TransferJobPrivate): Added header
support.
(KIO::TransferJobPrivate::~TransferJobPrivate):
(KIO::TransferJob::assembleResponseHeaders): Get a header string
out of the response if needed.
(KIO::TransferJob::queryMetaData): Special-case "HTTP-Headers".
(KIO::TransferJob::emitReceivedResponse): Save response.
* kwq/KWQLoader.h:
* kwq/KWQLoader.mm:
(-[NSDictionary _webcore_initWithHeaderString:]): Helper method to
turn a string of header fields into a dictionary.
(KWQServeRequest): Pass custom headers through.
(KWQResponseMIMEType): Admit it's an NSURLResponse *.
(KWQResponseHeaderString): Assembled status code and response
header fields into response header. Cheat a little on the status
line.
* kwq/KWQResourceLoader.mm:
(-[KWQResourceLoader receivedResponse:]): Admit it's an
NSURLResponse *.
* kwq/WebCoreResourceLoader.h: Ditto.
* kwq/WebCoreBridge.h: Add customHeader: arguments.
WebKit:
Reviewed by Ken.
WebKit part of fix for:
<rdar://problem/3487134>: Implement http request/response status and headers for XMLHttpRequest
* WebCoreSupport.subproj/WebBridge.m:
(-[WebBridge startLoadingResource:withURL:customHeaders:]): Added customHeaders
parameter.
(-[WebBridge startLoadingResource:withURL:customHeaders:postData:]): Ditto.
* WebCoreSupport.subproj/WebSubresourceClient.h:
* WebCoreSupport.subproj/WebSubresourceClient.m:
(+[WebSubresourceClient startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]): Add the custom headers.
(+[WebSubresourceClient startLoadingResource:withURL:customHeaders:referrer:forDataSource:]): Pass along the custom headers.
(+[WebSubresourceClient startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]): Pass along the custom headers.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@5625 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index a7a7eff..864fe6a 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,57 @@
+2003-11-21 Maciej Stachowiak <mjs at apple.com>
+
+ Reviewed by Ken.
+
+ WebCore part of fix for:
+
+ <rdar://problem/3487134>: Implement http request/response status and headers for XMLHttpRequest
+
+ * khtml/ecma/xmlhttprequest.cpp:
+ (KJS::XMLHttpRequest::getValueProperty): Call appropriate methods for
+ status and statusText.
+ (KJS::XMLHttpRequest::send): Set request headers as "customHeaders"
+ metadata property.
+ (KJS::XMLHttpRequest::setRequestHeader): Simply append to header
+ string.
+ (KJS::XMLHttpRequest::getAllResponseHeaders): Return the header string
+ except for the first line.
+ (KJS::XMLHttpRequest::getResponseHeader): Scan the response header
+ string for the header field. Not sure if it's worth being more
+ efficient.
+ (KJS::XMLHttpRequest::getStatus): Try to pull a code out
+ of the status line.
+ (KJS::XMLHttpRequest::getStatusText): Pull the first line
+ off the headers (if any), otherwise return undefined.
+ (KJS::XMLHttpRequest::slotData): The first time through, save
+ the response headers, retrieved from "HTTP-Headers" metadata
+ property.
+ (KJS::XMLHttpRequestProtoFunc::tryCall): Make setRequestHeader,
+ getResponseHeader, getAllResponseHeaders call the right thing.
+ * khtml/ecma/xmlhttprequest.h:
+ * kwq/KWQKJobClasses.h:
+ * kwq/KWQKJobClasses.mm:
+ (KIO::TransferJobPrivate::TransferJobPrivate): Added header
+ support.
+ (KIO::TransferJobPrivate::~TransferJobPrivate):
+ (KIO::TransferJob::assembleResponseHeaders): Get a header string
+ out of the response if needed.
+ (KIO::TransferJob::queryMetaData): Special-case "HTTP-Headers".
+ (KIO::TransferJob::emitReceivedResponse): Save response.
+ * kwq/KWQLoader.h:
+ * kwq/KWQLoader.mm:
+ (-[NSDictionary _webcore_initWithHeaderString:]): Helper method to
+ turn a string of header fields into a dictionary.
+ (KWQServeRequest): Pass custom headers through.
+ (KWQResponseMIMEType): Admit it's an NSURLResponse *.
+ (KWQResponseHeaderString): Assembled status code and response
+ header fields into response header. Cheat a little on the status
+ line.
+ * kwq/KWQResourceLoader.mm:
+ (-[KWQResourceLoader receivedResponse:]): Admit it's an
+ NSURLResponse *.
+ * kwq/WebCoreResourceLoader.h: Ditto.
+ * kwq/WebCoreBridge.h: Add customHeader: arguments.
+
2003-11-21 Chris Blumenberg <cblu at apple.com>
Fixed: <rdar://problem/3491907>: When viewing applet, view hierarchy was an empty KWQView
diff --git a/WebCore/khtml/ecma/xmlhttprequest.cpp b/WebCore/khtml/ecma/xmlhttprequest.cpp
index 13d724b..89d1f57 100644
--- a/WebCore/khtml/ecma/xmlhttprequest.cpp
+++ b/WebCore/khtml/ecma/xmlhttprequest.cpp
@@ -130,15 +130,15 @@ Value XMLHttpRequest::getValueProperty(ExecState *, int token) const
case ResponseXML:
return Undefined();
case Status:
- return Undefined();
+ return getStatus();
case StatusText:
- return Undefined();
+ return getStatusText();
case Onreadystatechange:
- if (onReadyStateChangeListener && onReadyStateChangeListener->listenerObjImp()) {
- return onReadyStateChangeListener->listenerObj();
- } else {
- return Null();
- }
+ if (onReadyStateChangeListener && onReadyStateChangeListener->listenerObjImp()) {
+ return onReadyStateChangeListener->listenerObj();
+ } else {
+ return Null();
+ }
default:
kdWarning() << "XMLHttpRequest::getValueProperty unhandled token " << token << endl;
return Value();
@@ -213,6 +213,9 @@ void XMLHttpRequest::send(const QString& _body)
{
job = KIO::get( url, false, false );
}
+ if (requestHeaders.length() > 0) {
+ job->addMetaData("customHTTPHeader", requestHeaders);
+ }
qObject->connect( job, SIGNAL( result( KIO::Job* ) ),
SLOT( slotFinished( KIO::Job* ) ) );
@@ -241,6 +244,97 @@ void XMLHttpRequest::abort()
}
}
+void XMLHttpRequest::setRequestHeader(const QString& name, const QString &value)
+{
+ if (requestHeaders.length() > 0) {
+ requestHeaders += "\r\n";
+ }
+ requestHeaders += name;
+ requestHeaders += ": ";
+ requestHeaders += value;
+}
+
+Value XMLHttpRequest::getAllResponseHeaders() const
+{
+ if (responseHeaders.isEmpty()) {
+ return Undefined();
+ }
+
+ int endOfLine = responseHeaders.find("\n");
+
+ if (endOfLine == -1) {
+ return Undefined();
+ }
+
+ return String(responseHeaders.mid(endOfLine + 1) + "\n");
+}
+
+Value XMLHttpRequest::getResponseHeader(const QString& name) const
+{
+ if (responseHeaders.isEmpty()) {
+ return Undefined();
+ }
+
+ QRegExp headerLinePattern(name + ":", false);
+
+ int matchLength;
+ int headerLinePos = headerLinePattern.match(responseHeaders, 0, &matchLength);
+ while (headerLinePos != -1) {
+ if (headerLinePos == 0 || responseHeaders[headerLinePos-1] == '\n') {
+ break;
+ }
+
+ headerLinePos = headerLinePattern.match(responseHeaders, headerLinePos + 1, &matchLength);
+ }
+
+
+ if (headerLinePos == -1) {
+ return Undefined();
+ }
+
+ int endOfLine = responseHeaders.find("\n", headerLinePos + matchLength);
+
+ return String(responseHeaders.mid(headerLinePos + matchLength, endOfLine - (headerLinePos + matchLength)).stripWhiteSpace());
+}
+
+Value XMLHttpRequest::getStatus() const
+{
+ if (responseHeaders.isEmpty()) {
+ return Undefined();
+ }
+
+ int endOfLine = responseHeaders.find("\n");
+ QString firstLine = endOfLine == -1 ? responseHeaders : responseHeaders.left(endOfLine);
+ int codeStart = firstLine.find(" ");
+ int codeEnd = firstLine.find(" ", codeStart + 1);
+
+ if (codeStart == -1 || codeEnd == -1) {
+ return Undefined();
+ }
+
+ QString number = firstLine.mid(codeStart + 1, codeEnd - (codeStart + 1));
+
+ bool ok = false;
+ int code = number.toInt(&ok);
+ if (!ok) {
+ return Undefined();
+ }
+
+ return Number(code);
+}
+
+Value XMLHttpRequest::getStatusText() const
+{
+ if (responseHeaders.isEmpty()) {
+ return Undefined();
+ }
+
+ int endOfLine = responseHeaders.find("\n");
+ QString firstLine = endOfLine == -1 ? responseHeaders : responseHeaders.left(endOfLine);
+
+ return String(firstLine);
+}
+
void XMLHttpRequest::slotFinished(KIO::Job *)
{
if (decoder) {
@@ -261,13 +355,13 @@ void XMLHttpRequest::slotRedirection(KIO::Job*, const KURL& url)
}
#if APPLE_CHANGES
-void XMLHttpRequest::slotData( KIO::Job* _job, const char *data, int len )
+void XMLHttpRequest::slotData( KIO::Job*, const char *data, int len )
#else
-void XMLHttpRequest::slotData(KIO::Job* _job, const QByteArray &_data)
+void XMLHttpRequest::slotData(KIO::Job*, const QByteArray &_data)
#endif
{
if (state < Loaded) {
- // handle http headers here
+ responseHeaders = job->queryMetaData("HTTP-Headers");
changeState(Loaded);
}
@@ -314,9 +408,17 @@ Value XMLHttpRequestProtoFunc::tryCall(ExecState *exec, Object &thisObj, const L
request->abort();
return Undefined();
case XMLHttpRequest::GetAllResponseHeaders:
- return Undefined();
+ if (args.size() != 0) {
+ return Undefined();
+ }
+
+ return request->getAllResponseHeaders();
case XMLHttpRequest::GetResponseHeader:
- return Undefined();
+ if (args.size() != 1) {
+ return Undefined();
+ }
+
+ return request->getResponseHeader(args[0].toString(exec).qstring());
case XMLHttpRequest::Open:
{
if (args.size() < 2 || args.size() > 5) {
@@ -371,6 +473,12 @@ Value XMLHttpRequestProtoFunc::tryCall(ExecState *exec, Object &thisObj, const L
return Undefined();
}
case XMLHttpRequest::SetRequestHeader:
+ if (args.size() != 2) {
+ return Undefined();
+ }
+
+ request->setRequestHeader(args[0].toString(exec).qstring(), args[1].toString(exec).qstring());
+
return Undefined();
}
diff --git a/WebCore/khtml/ecma/xmlhttprequest.h b/WebCore/khtml/ecma/xmlhttprequest.h
index 94c238a..20798e9 100644
--- a/WebCore/khtml/ecma/xmlhttprequest.h
+++ b/WebCore/khtml/ecma/xmlhttprequest.h
@@ -66,6 +66,9 @@ namespace KJS {
friend class XMLHttpRequestProtoFunc;
friend class XMLHttpRequestQObject;
+ Value getStatusText() const;
+ Value getStatus() const;
+
XMLHttpRequestQObject *qObject;
#if APPLE_CHANGES
@@ -79,6 +82,9 @@ namespace KJS {
void open(const QString& _method, const KURL& _url, bool _async);
void send(const QString& _body);
void abort();
+ void setRequestHeader(const QString& name, const QString &value);
+ Value getAllResponseHeaders() const;
+ Value getResponseHeader(const QString& name) const;
void changeState(XMLHttpRequestState newState);
@@ -87,6 +93,7 @@ namespace KJS {
KURL url;
QString method;
bool async;
+ QString requestHeaders;
KIO::TransferJob * job;
@@ -96,6 +103,8 @@ namespace KJS {
khtml::Decoder *decoder;
QString encoding;
QString response;
+
+ QString responseHeaders;
};
diff --git a/WebCore/kwq/KWQKJobClasses.h b/WebCore/kwq/KWQKJobClasses.h
index 11f0f12..f8b1dee 100644
--- a/WebCore/kwq/KWQKJobClasses.h
+++ b/WebCore/kwq/KWQKJobClasses.h
@@ -76,6 +76,8 @@ public:
QByteArray postData() const;
QString method() const;
private:
+ void assembleResponseHeaders() const;
+
TransferJobPrivate *d;
KWQSignal m_data;
diff --git a/WebCore/kwq/KWQKJobClasses.mm b/WebCore/kwq/KWQKJobClasses.mm
index e31deda..46f9fe2 100644
--- a/WebCore/kwq/KWQKJobClasses.mm
+++ b/WebCore/kwq/KWQKJobClasses.mm
@@ -27,6 +27,7 @@
#import "KWQExceptions.h"
#import "KWQKJobClasses.h"
+#import "KWQLoader.h"
#import "KWQResourceLoader.h"
#import "KWQString.h"
@@ -46,6 +47,8 @@ public:
, URL(kurl)
, loader(nil)
, method("GET")
+ , response(0)
+ , assembledResponseHeaders(true)
{
}
@@ -56,11 +59,14 @@ public:
, loader(nil)
, method("POST")
, postData(_postData)
+ , response(0)
+ , assembledResponseHeaders(true)
{
}
~TransferJobPrivate()
{
+ KWQReleaseResponse(response);
[metaData release];
[loader release];
}
@@ -71,6 +77,10 @@ public:
KWQResourceLoader *loader;
QString method;
QByteArray postData;
+
+ void *response;
+ bool assembledResponseHeaders;
+ QString responseHeaders;
};
TransferJob::TransferJob(const KURL &url, bool reload, bool showProgressInfo)
@@ -121,8 +131,22 @@ QString TransferJob::errorText() const
return QString::null;
}
+void TransferJob::assembleResponseHeaders() const
+{
+ if (!d->assembledResponseHeaders) {
+ d->responseHeaders = QString::fromNSString((NSString *)KWQResponseHeaderString(d->response));
+ d->assembledResponseHeaders = true;
+ }
+
+}
+
QString TransferJob::queryMetaData(const QString &key) const
{
+ if (key == "HTTP-Headers") {
+ assembleResponseHeaders();
+ return d->responseHeaders;
+ }
+
NSString *value = [d->metaData objectForKey:key.getNSString()];
return value ? QString::fromNSString(value) : QString::null;
}
@@ -186,6 +210,10 @@ void TransferJob::emitResult()
void TransferJob::emitReceivedResponse(void *response)
{
+ d->assembledResponseHeaders = false;
+ d->response = response;
+ KWQRetainResponse(d->response);
+
m_receivedResponse.call(this, response);
}
diff --git a/WebCore/kwq/KWQLoader.h b/WebCore/kwq/KWQLoader.h
index b424fd9..b0aabf8 100644
--- a/WebCore/kwq/KWQLoader.h
+++ b/WebCore/kwq/KWQLoader.h
@@ -43,6 +43,7 @@ bool KWQCheckIfReloading(khtml::DocLoader *loader);
void KWQRetainResponse(void *response);
void KWQReleaseResponse(void *response);
void *KWQResponseMIMEType(void *response);
+void *KWQResponseHeaderString(void *response);
int KWQNumberOfPendingOrLoadingRequests(khtml::DocLoader *dl);
class KWQLoader
diff --git a/WebCore/kwq/KWQLoader.mm b/WebCore/kwq/KWQLoader.mm
index ec09840..49361bd 100644
--- a/WebCore/kwq/KWQLoader.mm
+++ b/WebCore/kwq/KWQLoader.mm
@@ -33,6 +33,8 @@
#import "khtml_part.h"
#import "loader.h"
+#import <Foundation/NSURLResponse.h>
+
using khtml::Cache;
using khtml::CachedObject;
using khtml::CachedImage;
@@ -50,6 +52,58 @@ bool KWQServeRequest(Loader *loader, Request *request, TransferJob *job)
return KWQServeRequest(loader, request->m_docLoader, job);
}
+ at interface NSDictionary (WebCore_Extras)
+- (id)_webcore_initWithHeaderString:(NSString *)string;
+ at end
+
+ at implementation NSDictionary (WebCore_Extras)
+- (id)_webcore_initWithHeaderString:(NSString *)string
+{
+ NSMutableDictionary *headers = [[NSMutableDictionary alloc] init];
+
+ NSArray *lines = [string componentsSeparatedByString:@"\r\n"];
+
+ NSEnumerator *e = [lines objectEnumerator];
+ NSString *line;
+
+ NSString *lastHeaderName = nil;
+
+ while ((line = (NSString *)[e nextObject]) != nil) {
+ if (([line characterAtIndex:0] == ' ' || [line characterAtIndex:0] == '\t')
+ && lastHeaderName != nil) {
+ // lines that start with space or tab continue the previous header value
+ NSString *oldVal = [headers objectForKey:lastHeaderName];
+ ASSERT(oldVal);
+ [headers setObject:[NSString stringWithFormat:@"%@ %@", oldVal, [line stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \t"]]]
+ forKey:lastHeaderName];
+ continue;
+ }
+
+ NSRange colonRange = [line rangeOfString:@":"];
+ if (colonRange.location != NSNotFound) {
+ // don't worry about case, assume lower levels will take care of it
+
+ NSString *headerName = [[line substringToIndex:colonRange.location] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \t"]];
+ NSString *headerValue = [[line substringFromIndex:colonRange.location + 1] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \t"]];
+
+ NSString *oldVal = [headers objectForKey:headerName];
+ if (oldVal) {
+ headerValue = [NSString stringWithFormat:@"%@, %@", oldVal, headerValue];
+ }
+
+ [headers setObject:headerValue forKey:headerName];
+
+ lastHeaderName = headerName;
+ }
+ }
+
+ self = [self initWithDictionary:headers];
+ [headers release];
+ return self;
+}
+
+ at end
+
bool KWQServeRequest(Loader *loader, DocLoader *docLoader, TransferJob *job)
{
KWQKHTMLPart *part = static_cast<KWQKHTMLPart *>(docLoader->part());
@@ -62,11 +116,18 @@ bool KWQServeRequest(Loader *loader, DocLoader *docLoader, TransferJob *job)
id <WebCoreResourceHandle> handle;
+ NSDictionary *headerDict = nil;
+ QString headerString = job->queryMetaData("customHTTPHeader");
+
+ if (!headerString.isEmpty()) {
+ headerDict = [[NSDictionary alloc] _webcore_initWithHeaderString:headerString.getNSString()];
+ }
+
if (job->method() == "POST") {
NSData *postData = [NSData dataWithBytesNoCopy:job->postData().data() length:job->postData().size() freeWhenDone:NO];
- handle = [bridge startLoadingResource:resourceLoader withURL:job->url().getNSURL() postData:postData];
+ handle = [bridge startLoadingResource:resourceLoader withURL:job->url().getNSURL() customHeaders:headerDict postData:postData];
} else {
- handle = [bridge startLoadingResource:resourceLoader withURL:job->url().getNSURL()];
+ handle = [bridge startLoadingResource:resourceLoader withURL:job->url().getNSURL() customHeaders:headerDict];
}
[resourceLoader setHandle:handle];
[resourceLoader release];
@@ -142,19 +203,48 @@ void KWQReleaseResponse(void *response)
KWQ_UNBLOCK_EXCEPTIONS;
}
- at interface NSObject (WebPrivateResponse)
-- (NSString *)MIMEType;
- at end
-
void *KWQResponseMIMEType(void *response)
{
KWQ_BLOCK_EXCEPTIONS;
- return [(id)response MIMEType];
+ return [(NSURLResponse *)response MIMEType];
KWQ_UNBLOCK_EXCEPTIONS;
return NULL;
}
+void *KWQResponseHeaderString(void *response)
+{
+ KWQ_BLOCK_EXCEPTIONS;
+ NSURLResponse *nsResponse = (NSURLResponse *)response;
+ if ([nsResponse isKindOfClass:[NSHTTPURLResponse class]]) {
+ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)nsResponse;
+ NSMutableString *headerString = [[NSMutableString alloc] init];
+ [headerString appendString:[NSString stringWithFormat:@"HTTP/1.0 %d OK\n", [httpResponse statusCode]]];
+ NSDictionary *headers = [httpResponse allHeaderFields];
+
+ NSEnumerator *e = [headers keyEnumerator];
+ NSString *key;
+
+ bool first = true;
+
+ while ((key = [e nextObject]) != nil) {
+ if (first) {
+ first = false;
+ } else {
+ [headerString appendString:@"\n"];
+ }
+ [headerString appendString:key];
+ [headerString appendString:@": "];
+ [headerString appendString:[headers objectForKey:key]];
+ }
+
+ return headerString;
+ }
+
+ KWQ_UNBLOCK_EXCEPTIONS;
+
+ return NULL;
+}
KWQLoader::KWQLoader(Loader *loader)
: _requestStarted(loader, SIGNAL(requestStarted(khtml::DocLoader *, khtml::CachedObject *)))
diff --git a/WebCore/kwq/KWQResourceLoader.mm b/WebCore/kwq/KWQResourceLoader.mm
index ec9b077..16cff16 100644
--- a/WebCore/kwq/KWQResourceLoader.mm
+++ b/WebCore/kwq/KWQResourceLoader.mm
@@ -51,7 +51,7 @@ using KIO::TransferJob;
_handle = [handle retain];
}
-- (void)receivedResponse:(id)response
+- (void)receivedResponse:(NSURLResponse *)response
{
ASSERT(response);
ASSERT(_job);
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index 40ad7f4..972a70b 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -291,8 +291,8 @@ typedef enum {
- (BOOL)runJavaScriptConfirmPanelWithMessage:(NSString *)message;
- (BOOL)runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText returningText:(NSString **)result;
-- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL;
-- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL postData:(NSData *)data;
+- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders;
+- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders postData:(NSData *)data;
- (void)objectLoadedFromCacheWithURL:(NSURL *)URL response:(id)response size:(unsigned)bytes;
- (BOOL)isReloading;
diff --git a/WebCore/kwq/WebCoreResourceLoader.h b/WebCore/kwq/WebCoreResourceLoader.h
index 80f9390..e1dac63 100644
--- a/WebCore/kwq/WebCoreResourceLoader.h
+++ b/WebCore/kwq/WebCoreResourceLoader.h
@@ -27,7 +27,7 @@
@protocol WebCoreResourceLoader <NSObject>
-- (void)receivedResponse:(id)response;
+- (void)receivedResponse:(NSURLResponse *)response;
- (void)addData:(NSData *)data;
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 22e5e00..0f435f7 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,21 @@
+2003-11-21 Maciej Stachowiak <mjs at apple.com>
+
+ Reviewed by Ken.
+
+ WebKit part of fix for:
+
+ <rdar://problem/3487134>: Implement http request/response status and headers for XMLHttpRequest
+
+ * WebCoreSupport.subproj/WebBridge.m:
+ (-[WebBridge startLoadingResource:withURL:customHeaders:]): Added customHeaders
+ parameter.
+ (-[WebBridge startLoadingResource:withURL:customHeaders:postData:]): Ditto.
+ * WebCoreSupport.subproj/WebSubresourceClient.h:
+ * WebCoreSupport.subproj/WebSubresourceClient.m:
+ (+[WebSubresourceClient startLoadingResource:withRequest:customHeaders:referrer:forDataSource:]): Add the custom headers.
+ (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:referrer:forDataSource:]): Pass along the custom headers.
+ (+[WebSubresourceClient startLoadingResource:withURL:customHeaders:postData:referrer:forDataSource:]): Pass along the custom headers.
+
2003-11-21 John Sullivan <sullivan at apple.com>
- WebKit part of fix for <rdar://problem/3333744>: Safari prints page with
diff --git a/WebKit/WebCoreSupport.subproj/WebBridge.m b/WebKit/WebCoreSupport.subproj/WebBridge.m
index 57d78c2..01481b8 100644
--- a/WebKit/WebCoreSupport.subproj/WebBridge.m
+++ b/WebKit/WebCoreSupport.subproj/WebBridge.m
@@ -363,7 +363,7 @@
[self addData:data];
}
-- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)resourceLoader withURL:(NSURL *)URL
+- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)resourceLoader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders
{
// If we are no longer attached to a WebView, this must be an attempted load from an
// onUnload handler, so let's just block it.
@@ -373,11 +373,12 @@
return [WebSubresourceClient startLoadingResource:resourceLoader
withURL:URL
+ customHeaders:customHeaders
referrer:[self referrer]
forDataSource:[self dataSource]];
}
-- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)resourceLoader withURL:(NSURL *)URL postData:(NSData *)data
+- (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)resourceLoader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders postData:(NSData *)data
{
// If we are no longer attached to a WebView, this must be an attempted load from an
// onUnload handler, so let's just block it.
@@ -387,6 +388,7 @@
return [WebSubresourceClient startLoadingResource:resourceLoader
withURL:URL
+ customHeaders:customHeaders
postData:data
referrer:[self referrer]
forDataSource:[self dataSource]];
diff --git a/WebKit/WebCoreSupport.subproj/WebSubresourceClient.h b/WebKit/WebCoreSupport.subproj/WebSubresourceClient.h
index b27f663..9d7d420 100644
--- a/WebKit/WebCoreSupport.subproj/WebSubresourceClient.h
+++ b/WebKit/WebCoreSupport.subproj/WebSubresourceClient.h
@@ -18,9 +18,16 @@
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL referrer:(NSString *)referrer forDataSource:(WebDataSource *)source;
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source;
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL postData:(NSData *)data referrer:(NSString *)referrer forDataSource:(WebDataSource *)source;
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ postData:(NSData *)data
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source;
@end
diff --git a/WebKit/WebCoreSupport.subproj/WebSubresourceClient.m b/WebKit/WebCoreSupport.subproj/WebSubresourceClient.m
index 4aad3c5..ffa6d69 100644
--- a/WebKit/WebCoreSupport.subproj/WebSubresourceClient.m
+++ b/WebKit/WebCoreSupport.subproj/WebSubresourceClient.m
@@ -41,6 +41,7 @@
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
withRequest:(NSMutableURLRequest *)newRequest
+ customHeaders:(NSDictionary *)customHeaders
referrer:(NSString *)referrer
forDataSource:(WebDataSource *)source
{
@@ -48,6 +49,13 @@
[source _addSubresourceClient:client];
+
+ NSEnumerator *e = [customHeaders keyEnumerator];
+ NSString *key;
+ while ((key = (NSString *)[e nextObject]) != nil) {
+ [newRequest addValue:[customHeaders objectForKey:key] forHTTPHeaderField:key];
+ }
+
[newRequest setCachePolicy:[[source request] cachePolicy]];
[newRequest setHTTPReferrer:referrer];
@@ -74,22 +82,29 @@
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL referrer:(NSString *)referrer forDataSource:(WebDataSource *)source
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source
{
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL];
- WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest referrer:referrer forDataSource:source];
+ WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest customHeaders:customHeaders referrer:referrer forDataSource:source];
[newRequest release];
return client;
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL postData:(NSData *)data referrer:(NSString *)referrer forDataSource:(WebDataSource *)source
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ postData:(NSData *)data
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source
{
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL];
[newRequest setHTTPMethod:@"POST"];
[newRequest setHTTPBody:data];
- WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest referrer:referrer forDataSource:source];
+ WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest customHeaders:customHeaders referrer:referrer forDataSource:source];
[newRequest release];
return client;
diff --git a/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.h b/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.h
index b27f663..9d7d420 100644
--- a/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.h
+++ b/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.h
@@ -18,9 +18,16 @@
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL referrer:(NSString *)referrer forDataSource:(WebDataSource *)source;
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source;
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL postData:(NSData *)data referrer:(NSString *)referrer forDataSource:(WebDataSource *)source;
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ postData:(NSData *)data
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source;
@end
diff --git a/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.m b/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.m
index 4aad3c5..ffa6d69 100644
--- a/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.m
+++ b/WebKit/WebCoreSupport.subproj/WebSubresourceLoader.m
@@ -41,6 +41,7 @@
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
withRequest:(NSMutableURLRequest *)newRequest
+ customHeaders:(NSDictionary *)customHeaders
referrer:(NSString *)referrer
forDataSource:(WebDataSource *)source
{
@@ -48,6 +49,13 @@
[source _addSubresourceClient:client];
+
+ NSEnumerator *e = [customHeaders keyEnumerator];
+ NSString *key;
+ while ((key = (NSString *)[e nextObject]) != nil) {
+ [newRequest addValue:[customHeaders objectForKey:key] forHTTPHeaderField:key];
+ }
+
[newRequest setCachePolicy:[[source request] cachePolicy]];
[newRequest setHTTPReferrer:referrer];
@@ -74,22 +82,29 @@
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL referrer:(NSString *)referrer forDataSource:(WebDataSource *)source
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source
{
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL];
- WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest referrer:referrer forDataSource:source];
+ WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest customHeaders:customHeaders referrer:referrer forDataSource:source];
[newRequest release];
return client;
}
+ (WebSubresourceClient *)startLoadingResource:(id <WebCoreResourceLoader>)rLoader
- withURL:(NSURL *)URL postData:(NSData *)data referrer:(NSString *)referrer forDataSource:(WebDataSource *)source
+ withURL:(NSURL *)URL
+ customHeaders:(NSDictionary *)customHeaders
+ postData:(NSData *)data
+ referrer:(NSString *)referrer
+ forDataSource:(WebDataSource *)source
{
NSMutableURLRequest *newRequest = [[NSMutableURLRequest alloc] initWithURL:URL];
[newRequest setHTTPMethod:@"POST"];
[newRequest setHTTPBody:data];
- WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest referrer:referrer forDataSource:source];
+ WebSubresourceClient *client = [self startLoadingResource:rLoader withRequest:newRequest customHeaders:customHeaders referrer:referrer forDataSource:source];
[newRequest release];
return client;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list