Title: [122074] trunk
Revision
122074
Author
[email protected]
Date
2012-07-08 20:09:07 -0700 (Sun, 08 Jul 2012)

Log Message

XHR.send should support ArrayBufferView
https://bugs.webkit.org/show_bug.cgi?id=90536

Source/WebCore:

XHR.send should support ArrayBufferView according to the latest draft
and also eventually deprecate ArrayBuffer.
Spec: http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send

Reviewed by Kenneth Russell.

Test: http/tests/xmlhttprequest/send-array-buffer.html
      http/tests/xmlhttprequest/send-data-view.html

* bindings/js/JSXMLHttpRequestCustom.cpp:
(WebCore::JSXMLHttpRequest::send):
* bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
(WebCore::V8XMLHttpRequest::sendCallback):
* xml/XMLHttpRequest.cpp:
(WebCore):
(WebCore::XMLHttpRequest::send):
* xml/XMLHttpRequest.h:
(XMLHttpRequest):
* xml/XMLHttpRequest.idl:

LayoutTests:

Reviewed by Kenneth Russell.

* http/tests/xmlhttprequest/send-array-buffer-expected.txt:
* http/tests/xmlhttprequest/send-array-buffer.html:
* http/tests/xmlhttprequest/send-data-view-expected.txt: Added.
* http/tests/xmlhttprequest/send-data-view.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (122073 => 122074)


--- trunk/LayoutTests/ChangeLog	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/LayoutTests/ChangeLog	2012-07-09 03:09:07 UTC (rev 122074)
@@ -1,3 +1,15 @@
+2012-07-08  Kinuko Yasuda  <[email protected]>
+
+        XHR.send should support ArrayBufferView
+        https://bugs.webkit.org/show_bug.cgi?id=90536
+
+        Reviewed by Kenneth Russell.
+
+        * http/tests/xmlhttprequest/send-array-buffer-expected.txt:
+        * http/tests/xmlhttprequest/send-array-buffer.html:
+        * http/tests/xmlhttprequest/send-data-view-expected.txt: Added.
+        * http/tests/xmlhttprequest/send-data-view.html: Added.
+
 2012-07-08  Hayato Ito  <[email protected]>
 
         Unreviewed gardening.

Modified: trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer-expected.txt (122073 => 122074)


--- trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer-expected.txt	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer-expected.txt	2012-07-09 03:09:07 UTC (rev 122074)
@@ -1,3 +1,3 @@
-Tests sending an array buffer.
+Tests sending an array buffer view.
 0 1 2 48 49 50 128 129 130 253 254 255
 

Modified: trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer.html (122073 => 122074)


--- trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer.html	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer.html	2012-07-09 03:09:07 UTC (rev 122074)
@@ -1,6 +1,6 @@
 <html>
 <body>
-Tests sending an array buffer.
+Tests sending an array buffer view.
 <script>
 if (window.testRunner)
     testRunner.dumpAsText();
@@ -18,7 +18,7 @@
 var array = new Uint8Array([0, 1, 2, 48, 49, 50, 128, 129, 130, 253, 254, 255]);
 var xhr = new XMLHttpRequest;
 xhr.open("POST", "resources/post-echo-as-ascii.cgi", false);
-xhr.send(array.buffer);
+xhr.send(array);
 log(xhr.responseText);
 </script>
 </body>

Copied: trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view-expected.txt (from rev 122073, trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer-expected.txt) (0 => 122074)


--- trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view-expected.txt	2012-07-09 03:09:07 UTC (rev 122074)
@@ -0,0 +1,3 @@
+Tests sending a data view.
+0 1 2 48 49 50 128 129 130 253 254 255
+

Copied: trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view.html (from rev 122073, trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer.html) (0 => 122074)


--- trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view.html	2012-07-09 03:09:07 UTC (rev 122074)
@@ -0,0 +1,26 @@
+<html>
+<body>
+Tests sending a data view.
+<script>
+if (window.testRunner)
+    testRunner.dumpAsText();
+
+var console_messages = document.createElement("ul");
+document.body.appendChild(console_messages);
+
+function log(message)
+{
+    var item = document.createElement("li");
+    item.appendChild(document.createTextNode(message));
+    console_messages.appendChild(item);
+}
+
+var array = new Uint8Array([0, 1, 2, 48, 49, 50, 128, 129, 130, 253, 254, 255]);
+var xhr = new XMLHttpRequest;
+xhr.open("POST", "resources/post-echo-as-ascii.cgi", false);
+xhr.send(new DataView(array.buffer));
+log(xhr.responseText);
+</script>
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (122073 => 122074)


--- trunk/Source/WebCore/ChangeLog	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/ChangeLog	2012-07-09 03:09:07 UTC (rev 122074)
@@ -1,3 +1,28 @@
+2012-07-08  Kinuko Yasuda  <[email protected]>
+
+        XHR.send should support ArrayBufferView
+        https://bugs.webkit.org/show_bug.cgi?id=90536
+
+        XHR.send should support ArrayBufferView according to the latest draft
+        and also eventually deprecate ArrayBuffer.
+        Spec: http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send
+
+        Reviewed by Kenneth Russell.
+
+        Test: http/tests/xmlhttprequest/send-array-buffer.html
+              http/tests/xmlhttprequest/send-data-view.html
+
+        * bindings/js/JSXMLHttpRequestCustom.cpp:
+        (WebCore::JSXMLHttpRequest::send):
+        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
+        (WebCore::V8XMLHttpRequest::sendCallback):
+        * xml/XMLHttpRequest.cpp:
+        (WebCore):
+        (WebCore::XMLHttpRequest::send):
+        * xml/XMLHttpRequest.h:
+        (XMLHttpRequest):
+        * xml/XMLHttpRequest.idl:
+
 2012-07-08  Vivek Galatage  <[email protected]>
 
         Web Inspector: CodeGeneratorInspector.py should not generate statements with no effect

Modified: trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp (122073 => 122074)


--- trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp	2012-07-09 03:09:07 UTC (rev 122074)
@@ -39,6 +39,7 @@
 #include "HTMLDocument.h"
 #include "InspectorInstrumentation.h"
 #include "JSArrayBuffer.h"
+#include "JSArrayBufferView.h"
 #include "JSBlob.h"
 #include "JSDOMFormData.h"
 #include "JSDOMWindowCustom.h"
@@ -126,6 +127,8 @@
             impl()->send(toDOMFormData(val), ec);
         else if (val.inherits(&JSArrayBuffer::s_info))
             impl()->send(toArrayBuffer(val), ec);
+        else if (val.inherits(&JSArrayBufferView::s_info))
+            impl()->send(toArrayBufferView(val), ec);
         else
             impl()->send(ustringToString(val.toString(exec)->value(exec)), ec);
     }

Modified: trunk/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp (122073 => 122074)


--- trunk/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp	2012-07-09 03:09:07 UTC (rev 122074)
@@ -36,6 +36,7 @@
 #include "Frame.h"
 #include "InspectorInstrumentation.h"
 #include "V8ArrayBuffer.h"
+#include "V8ArrayBufferView.h"
 #include "V8Binding.h"
 #include "V8Blob.h"
 #include "V8DOMFormData.h"
@@ -188,6 +189,11 @@
             ArrayBuffer* arrayBuffer = V8ArrayBuffer::toNative(object);
             ASSERT(arrayBuffer);
             xmlHttpRequest->send(arrayBuffer, ec);
+        } else if (V8ArrayBufferView::HasInstance(arg)) {
+            v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
+            ArrayBufferView* arrayBufferView = V8ArrayBufferView::toNative(object);
+            ASSERT(arrayBufferView);
+            xmlHttpRequest->send(arrayBufferView, ec);
 #endif
         } else
             xmlHttpRequest->send(toWebCoreStringWithNullCheck(arg), ec);

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.cpp (122073 => 122074)


--- trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.cpp	2012-07-09 03:09:07 UTC (rev 122074)
@@ -38,6 +38,7 @@
 #include "HTMLDocument.h"
 #include "HTTPParsers.h"
 #include "HTTPValidation.h"
+#include "HistogramSupport.h"
 #include "InspectorInstrumentation.h"
 #include "MemoryCache.h"
 #include "ResourceError.h"
@@ -54,6 +55,7 @@
 #include "XMLHttpRequestUpload.h"
 #include "markup.h"
 #include <wtf/ArrayBuffer.h>
+#include <wtf/ArrayBufferView.h>
 #include <wtf/RefCountedLeakCounter.h>
 #include <wtf/StdLibExtras.h>
 #include <wtf/UnusedParam.h>
@@ -70,6 +72,13 @@
 
 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XMLHttpRequest"));
 
+// Histogram enum to see when we can deprecate xhr.send(ArrayBuffer).
+enum XMLHttpRequestSendArrayBufferOrView {
+    XMLHttpRequestSendArrayBuffer,
+    XMLHttpRequestSendArrayBufferView,
+    XMLHttpRequestSendArrayBufferOrViewMax,
+};
+
 struct XMLHttpRequestStaticData {
     WTF_MAKE_NONCOPYABLE(XMLHttpRequestStaticData); WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -646,11 +655,28 @@
 
 void XMLHttpRequest::send(ArrayBuffer* body, ExceptionCode& ec)
 {
+    String consoleMessage("ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead.");
+    scriptExecutionContext()->addConsoleMessage(JSMessageSource, LogMessageType, WarningMessageLevel, consoleMessage);
+
+    HistogramSupport::histogramEnumeration("WebCore.XHR.send.ArrayBufferOrView", XMLHttpRequestSendArrayBuffer, XMLHttpRequestSendArrayBufferOrViewMax);
+
+    sendBytesData(body->data(), body->byteLength(), ec);
+}
+
+void XMLHttpRequest::send(ArrayBufferView* body, ExceptionCode& ec)
+{
+    HistogramSupport::histogramEnumeration("WebCore.XHR.send.ArrayBufferOrView", XMLHttpRequestSendArrayBufferView, XMLHttpRequestSendArrayBufferOrViewMax);
+
+    sendBytesData(body->baseAddress(), body->byteLength(), ec);
+}
+
+void XMLHttpRequest::sendBytesData(const void* data, size_t length, ExceptionCode& ec)
+{
     if (!initSend(ec))
         return;
 
     if (m_method != "GET" && m_method != "HEAD" && m_url.protocolIsInHTTPFamily()) {
-        m_requestEntityBody = FormData::create(body->data(), body->byteLength());
+        m_requestEntityBody = FormData::create(data, length);
         if (m_upload)
             m_requestEntityBody->setAlwaysStream(true);
     }

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.h (122073 => 122074)


--- trunk/Source/WebCore/xml/XMLHttpRequest.h	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.h	2012-07-09 03:09:07 UTC (rev 122074)
@@ -93,6 +93,7 @@
     void send(Blob*, ExceptionCode&);
     void send(DOMFormData*, ExceptionCode&);
     void send(ArrayBuffer*, ExceptionCode&);
+    void send(ArrayBufferView*, ExceptionCode&);
     void abort();
     void setRequestHeader(const AtomicString& name, const String& value, ExceptionCode&);
     void overrideMimeType(const String& override);
@@ -160,6 +161,7 @@
     bool responseIsXML() const;
 
     bool initSend(ExceptionCode&);
+    void sendBytesData(const void*, size_t, ExceptionCode&);
 
     String getRequestHeader(const AtomicString& name) const;
     void setRequestHeaderInternal(const AtomicString& name, const String& value);

Modified: trunk/Source/WebCore/xml/XMLHttpRequest.idl (122073 => 122074)


--- trunk/Source/WebCore/xml/XMLHttpRequest.idl	2012-07-09 02:42:30 UTC (rev 122073)
+++ trunk/Source/WebCore/xml/XMLHttpRequest.idl	2012-07-09 03:09:07 UTC (rev 122074)
@@ -69,8 +69,10 @@
 
         [Custom] void send()
             raises(DOMException);
-        [Custom] void send(in ArrayBuffer data)
+        [Custom] void send(in ArrayBuffer data) // FIXME: this should be eventually deprecated.
             raises(DOMException);
+        [Custom] void send(in ArrayBufferView data)
+            raises(DOMException);
         [Conditional=BLOB, Custom] void send(in Blob data)
             raises(DOMException);
         [Custom] void send(in Document data)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to