<rdar://problem/
3770306> XMLHttpRequest does not honor character set encoding
* khtml/ecma/xmlhttprequest.cpp:
(KJS::XMLHttpRequest::slotData): Get encoding from the transfer job.
* kwq/KWQKJobClasses.h:
* kwq/KWQKJobClasses.mm:
(KIO::TransferJobPrivate::TransferJobPrivate): Added retrievedCharset
flag.
(KIO::TransferJob::retrieveCharset): New method, gets the charset
from the response.
(KIO::TransferJob::queryMetaData): Handle charset.
(KIO::TransferJob::emitReceivedResponse): Clear retreivedCharset flag.
* kwq/KWQLoader.h:
* kwq/KWQLoader.mm:
(KWQResponseTextEncodingName): New function, gets the encoding from the response.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7323
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2004-08-23 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin.
+
+ <rdar://problem/3770306> XMLHttpRequest does not honor character set encoding
+
+ * khtml/ecma/xmlhttprequest.cpp:
+ (KJS::XMLHttpRequest::slotData): Get encoding from the transfer job.
+ * kwq/KWQKJobClasses.h:
+ * kwq/KWQKJobClasses.mm:
+ (KIO::TransferJobPrivate::TransferJobPrivate): Added retrievedCharset
+ flag.
+ (KIO::TransferJob::retrieveCharset): New method, gets the charset
+ from the response.
+ (KIO::TransferJob::queryMetaData): Handle charset.
+ (KIO::TransferJob::emitReceivedResponse): Clear retreivedCharset flag.
+ * kwq/KWQLoader.h:
+ * kwq/KWQLoader.mm:
+ (KWQResponseTextEncodingName): New function, gets the encoding from the response.
+
2004-08-23 David Hyatt <hyatt@apple.com>
Apply leo's fix to marquees.
{
if (state < Loaded) {
responseHeaders = job->queryMetaData("HTTP-Headers");
+ encoding = job->queryMetaData("charset");
changeState(Loaded);
}
QString method() const;
private:
void assembleResponseHeaders() const;
+ void retrieveCharset() const;
TransferJobPrivate *d;
, loader(nil)
, method("GET")
, response(0)
- , assembledResponseHeaders(true)
+ , assembledResponseHeaders(true)
+ , retrievedCharset(true)
{
}
, postData(_postData)
, response(0)
, assembledResponseHeaders(true)
+ , retrievedCharset(true)
{
}
void *response;
bool assembledResponseHeaders;
+ bool retrievedCharset;
QString responseHeaders;
};
d->responseHeaders = QString::fromNSString((NSString *)KWQResponseHeaderString(d->response));
d->assembledResponseHeaders = true;
}
+}
+void TransferJob::retrieveCharset() const
+{
+ if (!d->retrievedCharset) {
+ NSString *charset = (NSString *)KWQResponseTextEncodingName(d->response);
+ if (charset) {
+ [d->metaData setObject:charset forKey:@"charset"];
+ }
+ d->retrievedCharset = true;
+ }
}
QString TransferJob::queryMetaData(const QString &key) const
if (key == "HTTP-Headers") {
assembleResponseHeaders();
return d->responseHeaders;
+ }
+
+ if (key == "charset") {
+ // this will put it in the regular metadata dictionary
+ retrieveCharset();
}
NSString *value = [d->metaData objectForKey:key.getNSString()];
void TransferJob::emitReceivedResponse(void *response)
{
d->assembledResponseHeaders = false;
+ d->retrievedCharset = false;
d->response = response;
KWQRetainResponse(d->response);
void KWQRetainResponse(void *response);
void KWQReleaseResponse(void *response);
void *KWQResponseMIMEType(void *response);
+void *KWQResponseTextEncodingName(void *response);
void *KWQResponseHeaderString(void *response);
int KWQNumberOfPendingOrLoadingRequests(khtml::DocLoader *dl);
time_t KWQCacheObjectExpiresTime(khtml::DocLoader *docLoader, void *response);
return NULL;
}
+void *KWQResponseTextEncodingName(void *response)
+{
+ KWQ_BLOCK_EXCEPTIONS;
+ return [(NSURLResponse *)response textEncodingName];
+ KWQ_UNBLOCK_EXCEPTIONS;
+
+ return NULL;
+}
+
void *KWQResponseHeaderString(void *response)
{
KWQ_BLOCK_EXCEPTIONS;