+2005-03-24 Richard Williamson <rjw@apple.com>
+
+ Fixed <rdar://problem/4052683> After adding/removing stocks from Stocks Widget, stock areas went blank
+
+ The request was being collected before firing it's load handler.
+ We now gc protect the request while it's loading.
+
+ Reviewed by Maciej.
+
+ * khtml/ecma/xmlhttprequest.cpp:
+ (KJS::XMLHttpRequest::send):
+ (KJS::XMLHttpRequest::abort):
+ (KJS::XMLHttpRequest::slotFinished):
+ (KJS::XMLHttpRequestProtoFunc::tryCall):
+
=== Safari-411 ===
2005-03-23 Darin Adler <darin@apple.com>
data = KWQServeSynchronousRequest(khtml::Cache::loader(), doc->docLoader(), job, finalURL, headers);
job = 0;
processSyncLoadResults(data, finalURL, headers);
+
return;
}
#endif
+ gcProtect (this);
+
qObject->connect( job, SIGNAL( result( KIO::Job* ) ),
SLOT( slotFinished( KIO::Job* ) ) );
#if APPLE_CHANGES
decoder = 0;
}
aborted = true;
+
+ gcUnprotect (this);
}
void XMLHttpRequest::setRequestHeader(const QString& name, const QString &value)
decoder->deref();
decoder = 0;
}
+
+ gcUnprotect (this);
}
void XMLHttpRequest::slotRedirection(KIO::Job*, const KURL& url)
XMLHttpRequest *request = static_cast<XMLHttpRequest *>(thisObj.imp());
switch (id) {
- case XMLHttpRequest::Abort:
+ case XMLHttpRequest::Abort: {
request->abort();
return Undefined();
- case XMLHttpRequest::GetAllResponseHeaders:
+ }
+ case XMLHttpRequest::GetAllResponseHeaders: {
if (args.size() != 0) {
return Undefined();
}
return request->getAllResponseHeaders();
- case XMLHttpRequest::GetResponseHeader:
+ }
+ case XMLHttpRequest::GetResponseHeader: {
if (args.size() != 1) {
return Undefined();
}
return request->getResponseHeader(args[0].toString(exec).qstring());
- case XMLHttpRequest::Open:
+ }
+ case XMLHttpRequest::Open:
{
if (args.size() < 2 || args.size() > 5) {
return Undefined();
return Undefined();
}
- case XMLHttpRequest::SetRequestHeader:
+ case XMLHttpRequest::SetRequestHeader: {
if (args.size() != 2) {
return Undefined();
}
request->setRequestHeader(args[0].toString(exec).qstring(), args[1].toString(exec).qstring());
return Undefined();
- case XMLHttpRequest::OverrideMIMEType:
+ }
+ case XMLHttpRequest::OverrideMIMEType: {
if (args.size() != 1) {
return Undefined();
}
request->MIMETypeOverride = args[0].toString(exec).qstring();
return Undefined();
}
+ }
return Undefined();
}