[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:56:57
Message-ID: 1177178217.561890.10225.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 656559 by porten:

argument checking


 M  +36 -24    xmlhttprequest.cpp  
 M  +2 -2      xmlhttprequest.h  


--- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.cpp #656558:656559
@@ -354,10 +354,15 @@
   changeState(XHRS_Open);
 }
 
-void XMLHttpRequest::send(const QString& _body)
+void XMLHttpRequest::send(const QString& _body, int& ec)
 {
   aborted = false;
 
+  if (m_state != XHRS_Open) {
+      ec =  DOMException::INVALID_STATE_ERR;
+      return;
+  }
+
   if (method == "post") {
     QString protocol = url.protocol().toLower();
 
@@ -459,10 +464,22 @@
   changeState(XHRS_Uninitialized);
 }
 
-void XMLHttpRequest::setRequestHeader(const QString& _name, const QString &value)
+void XMLHttpRequest::setRequestHeader(const QString& _name, const QString& _value, int& ec)
 {
+  if (m_state != XHRS_Open) {
+      ec = DOMException::INVALID_STATE_ERR;
+      return;
+  }
+
   QString nameTrimmed = _name.trimmed();
+  if (nameTrimmed.isEmpty()) {
+      ec = DOMException::SYNTAX_ERR;
+      return;
+  }
   QString name = nameTrimmed.toLower();
+  QString value = _value.trimmed();
+  if (value.isEmpty())
+      return;
 
   // Content-type needs to be set separately from the other headers
   if(name == "content-type") {
@@ -495,7 +512,7 @@
       return;
   }
 
-  m_requestHeaders[nameTrimmed] = value.trimmed();
+  m_requestHeaders[nameTrimmed] = value;
 }
 
 ValueImp *XMLHttpRequest::getAllResponseHeaders() const
@@ -702,6 +719,9 @@
   }
 
   XMLHttpRequest *request = static_cast<XMLHttpRequest *>(thisObj);
+
+  int ec = 0;
+
   switch (id) {
   case XMLHttpRequest::Abort:
     request->abort();
@@ -749,15 +769,6 @@
     }
   case XMLHttpRequest::Send:
     {
-      if (args.size() > 1) {
-        return Undefined();
-      }
-
-      if (request->m_state != XHRS_Open) {
-	  setDOMException(exec, DOMException::INVALID_STATE_ERR);
-	  return jsUndefined();
-      }
-
       QString body;
       if (args.size() >= 1) {
         DOM::NodeImpl* docNode = toNode(args[0]);
@@ -776,22 +787,23 @@
         }
       }
 
-      request->send(body);
-
+      request->send(body, ec);
+      setDOMException(exec, ec);  
       return jsUndefined();
     }
   case XMLHttpRequest::SetRequestHeader:
-    if (args.size() != 2) {
+      if (args.size() < 2)
+          return throwError(exec, SyntaxError, "Not enough arguments");
+      JSValue* keyArgument = args[0];
+      JSValue* valArgument = args[1];
+      QString key, val;
+      if (!keyArgument->isUndefined() && !keyArgument->isNull())
+          key = keyArgument->toString(exec).qstring();
+      if (!valArgument->isUndefined() && !valArgument->isNull())
+          val = valArgument->toString(exec).qstring();
+      request->setRequestHeader(key, val, ec);
+      setDOMException(exec, ec);
       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 jsUndefined();
   }
 
   return Undefined();
--- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.h #656558:656559
@@ -113,9 +113,9 @@
     void processSyncLoadResults(const QByteArray &data, const KUrl &finalURL, const QString &headers);
 
     void open(const QString& _method, const KUrl& _url, bool _async);
-    void send(const QString& _body);
+    void send(const QString& _body, int& ec);
     void abort();
-    void setRequestHeader(const QString& name, const QString &value);
+    void setRequestHeader(const QString& name, const QString& value, int& ec);
     ValueImp *getAllResponseHeaders() const;
     ValueImp *getResponseHeader(const QString& name) const;
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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