Fixed <rdar://problem/4052683> After adding/removing stocks from Stocks Widget,...
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Mar 2005 22:58:01 +0000 (22:58 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Mar 2005 22:58:01 +0000 (22:58 +0000)
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):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8973 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/xmlhttprequest.cpp

index 2ae342d656cd1443f19c069c76a5e4a49a4ad302..943e2836101d4ec86956532eb39ac0462c49071a 100644 (file)
@@ -1,3 +1,18 @@
+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>
index 42cbad7718662ebe9ad6984fefddac2ed802aa6b..3c91c45d19635b63ee2f271e6844e9ccf54c2f91 100644 (file)
@@ -350,10 +350,13 @@ void XMLHttpRequest::send(const QString& _body)
     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
@@ -384,6 +387,8 @@ void XMLHttpRequest::abort()
     decoder = 0;
   }
   aborted = true;
+
+  gcUnprotect (this);
 }
 
 void XMLHttpRequest::setRequestHeader(const QString& name, const QString &value)
@@ -526,6 +531,8 @@ void XMLHttpRequest::slotFinished(KIO::Job *)
     decoder->deref();
     decoder = 0;
   }
+
+  gcUnprotect (this);
 }
 
 void XMLHttpRequest::slotRedirection(KIO::Job*, const KURL& url)
@@ -586,22 +593,25 @@ Value XMLHttpRequestProtoFunc::tryCall(ExecState *exec, Object &thisObj, const L
   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();
@@ -663,7 +673,7 @@ Value XMLHttpRequestProtoFunc::tryCall(ExecState *exec, Object &thisObj, const L
 
       return Undefined();
     }
-  case XMLHttpRequest::SetRequestHeader:
+  case XMLHttpRequest::SetRequestHeader: {
     if (args.size() != 2) {
       return Undefined();
     }
@@ -671,13 +681,15 @@ Value XMLHttpRequestProtoFunc::tryCall(ExecState *exec, Object &thisObj, const L
     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();
 }