[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/khtml/ecma
From:       Harri Porten <porten () kde ! org>
Date:       2007-04-21 17:00:45
Message-ID: 1177174845.279047.4238.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 656541 by porten:

throw exceptions on send() or setRequestHeader() calls in closed state 


 M  +19 -13    xmlhttprequest.cpp  
 M  +2 -2      xmlhttprequest.h  


--- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.cpp #656540:656541
@@ -48,6 +48,7 @@
 #endif
 
 using namespace KJS;
+using namespace DOM;
 // 
 ////////////////////// XMLHttpRequest Object ////////////////////////
 
@@ -135,11 +136,11 @@
 {
   switch (token) {
   case ReadyState:
-    return Number(state);
+    return Number(m_state);
   case ResponseText:
     return ::getStringOrNull(DOM::DOMString(response));
   case ResponseXML:
-    if (state != XHRS_Loaded) {
+    if (m_state != XHRS_Loaded) {
       return Undefined();
     }
     if (!createdDocument) {
@@ -264,7 +265,7 @@
     async(true),
     contentType(QString()),
     job(0),
-    state(XHRS_Uninitialized),
+    m_state(XHRS_Uninitialized),
     onReadyStateChangeListener(0),
     onLoadListener(0),
     decoder(0),
@@ -289,8 +290,8 @@
 
 void XMLHttpRequest::changeState(XMLHttpRequestState newState)
 {
-  if (state != newState) {
-    state = newState;
+  if (m_state != newState) {
+    m_state = newState;
     ProtectedPtr<ObjectImp> ref(this);
 
     if (onReadyStateChangeListener != 0 && doc->view() && doc->view()->part()) {
@@ -299,7 +300,7 @@
       onReadyStateChangeListener->handleEvent(ev);
     }
 
-    if (state == XHRS_Loaded && onLoadListener != 0 && doc->view() && doc->view()->part()) {
+    if (m_state == XHRS_Loaded && onLoadListener != 0 && doc->view() && doc->view()->part()) {
       DOM::Event ev = doc->view()->part()->document().createEvent("HTMLEvents");
       ev.initEvent("load", true, true);
       onLoadListener->handleEvent(ev);
@@ -488,7 +489,7 @@
   }
 
   // Reject all banned headers.
-  if (!canSetRequestHeader(name)) {
+  if (!canSetRequestHeader(nameTrimmed)) {
       kWarning(6070) << "Refusing to set unsafe XMLHttpRequest header "
                      << name << endl;
       return;
@@ -640,7 +641,7 @@
 void XMLHttpRequest::slotData(KIO::Job*, const QByteArray &_data)
 #endif
 {
-  if (state < XHRS_Sent ) {
+  if (m_state < XHRS_Sent ) {
     responseHeaders = job->queryMetaData("HTTP-Headers");
 
     // NOTE: Replace a 304 response with a 200! Both IE and Mozilla do this.
@@ -752,8 +753,9 @@
         return Undefined();
       }
 
-      if (request->state != XHRS_Open) {
-	return Undefined();
+      if (request->m_state != XHRS_Open) {
+	  setDOMException(exec, DOMException::INVALID_STATE_ERR);
+	  return jsUndefined();
       }
 
       QString body;
@@ -776,16 +778,20 @@
 
       request->send(body);
 
-      return Undefined();
+      return jsUndefined();
     }
   case XMLHttpRequest::SetRequestHeader:
     if (args.size() != 2) {
-      return Undefined();
+      return jsUndefined();
     }
+    if (request->m_state != XHRS_Open) {
+	setDOMException(exec, DOMException::INVALID_STATE_ERR);
+	return jsUndefined();
+    }
 
     request->setRequestHeader(args[0]->toString(exec).qstring(), args[1]->toString(exec).qstring());
 
-    return Undefined();
+    return jsUndefined();
   }
 
   return Undefined();
--- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.h #656540:656541
@@ -49,7 +49,7 @@
   inline bool operator==(const CaseInsensitiveString& a,
                          const CaseInsensitiveString& b)
   {
-    return a.toLower() == b.toLower();
+      return a.original().compare(b.original(), Qt::CaseInsensitive) == 0;
   }
 
   inline uint qHash(const CaseInsensitiveString& key)
@@ -131,7 +131,7 @@
 
     KIO::TransferJob * job;
 
-    XMLHttpRequestState state;
+    XMLHttpRequestState m_state;
     JSEventListener *onReadyStateChangeListener;
     JSEventListener *onLoadListener;
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic