OSDN Git Service

Merge WebKit at r73109: Initial merge by git.
[android-x86/external-webkit.git] / WebCore / bindings / v8 / custom / V8XMLHttpRequestCustom.cpp
index cfeb503..6a571ae 100644 (file)
 #include "config.h"
 #include "V8XMLHttpRequest.h"
 
+#include "ArrayBuffer.h"
 #include "Frame.h"
+#include "InspectorInstrumentation.h"
+#include "V8ArrayBuffer.h"
 #include "V8Binding.h"
 #include "V8Blob.h"
 #include "V8DOMFormData.h"
@@ -50,10 +53,63 @@ v8::Handle<v8::Value> V8XMLHttpRequest::responseTextAccessorGetter(v8::Local<v8:
     INC_STATS("DOM.XMLHttpRequest.responsetext._get");
     XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(info.Holder());
     ExceptionCode ec = 0;
-    const ScriptString& text = xmlHttpRequest->responseText(ec);
+    const String& text = xmlHttpRequest->responseText(ec);
     if (ec)
         return throwError(ec);
-    return text.v8StringOrNull();
+    return v8String(text);
+}
+
+v8::Handle<v8::Value> V8XMLHttpRequest::responseAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
+{
+    INC_STATS("DOM.XMLHttpRequest.response._get");
+    XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(info.Holder());
+
+    switch (xmlHttpRequest->responseTypeCode()) {
+    case XMLHttpRequest::ResponseTypeDefault:
+    case XMLHttpRequest::ResponseTypeText:
+        return responseTextAccessorGetter(name, info);
+
+    case XMLHttpRequest::ResponseTypeDocument:
+        {
+            ExceptionCode ec = 0;
+            Document* document = xmlHttpRequest->responseXML(ec);
+            if (ec) {
+                V8Proxy::setDOMException(ec);
+                return v8::Undefined();
+            }
+            return toV8(document);
+        }
+
+    case XMLHttpRequest::ResponseTypeBlob:
+#if ENABLE(XHR_RESPONSE_BLOB)
+        {
+            ExceptionCode ec = 0;
+            Blob* blob = xmlHttpRequest->responseBlob(ec);
+            if (ec) {
+                V8Proxy::setDOMException(ec);
+                return v8::Undefined();
+            }
+            return toV8(blob);
+        }
+#else
+        return v8::Undefined();
+#endif
+
+#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+    case XMLHttpRequest::ResponseTypeArrayBuffer:
+        {
+            ExceptionCode ec = 0;
+            ArrayBuffer* arrayBuffer = xmlHttpRequest->responseArrayBuffer(ec);
+            if (ec) {
+                V8Proxy::setDOMException(ec);
+                return v8::Undefined();
+            }
+            return toV8(arrayBuffer);
+        }
+#endif
+    }
+
+    return v8::Undefined();
 }
 
 v8::Handle<v8::Value> V8XMLHttpRequest::openCallback(const v8::Arguments& args)
@@ -113,6 +169,8 @@ v8::Handle<v8::Value> V8XMLHttpRequest::sendCallback(const v8::Arguments& args)
     INC_STATS("DOM.XMLHttpRequest.send()");
     XMLHttpRequest* xmlHttpRequest = V8XMLHttpRequest::toNative(args.Holder());
 
+    InspectorInstrumentation::willSendXMLHttpRequest(xmlHttpRequest->scriptExecutionContext(), xmlHttpRequest->url());
+
     ExceptionCode ec = 0;
     if (args.Length() < 1)
         xmlHttpRequest->send(ec);
@@ -135,6 +193,13 @@ v8::Handle<v8::Value> V8XMLHttpRequest::sendCallback(const v8::Arguments& args)
             DOMFormData* domFormData = V8DOMFormData::toNative(object);
             ASSERT(domFormData);
             xmlHttpRequest->send(domFormData, ec);
+#if ENABLE(3D_CANVAS) || ENABLE(BLOB)
+        } else if (V8ArrayBuffer::HasInstance(arg)) {
+            v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
+            ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(object);
+            ASSERT(arrayBuffer);
+            xmlHttpRequest->send(arrayBuffer, ec);
+#endif
         } else
             xmlHttpRequest->send(toWebCoreStringWithNullCheck(arg), ec);
     }