Changeset 122074 in webkit


Ignore:
Timestamp:
Jul 8, 2012 8:09:07 PM (12 years ago)
Author:
kinuko@chromium.org
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.
Location:
trunk
Files:
9 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r122072 r122074  
     12012-07-08  Kinuko Yasuda  <kinuko@chromium.org>
     2
     3        XHR.send should support ArrayBufferView
     4        https://bugs.webkit.org/show_bug.cgi?id=90536
     5
     6        Reviewed by Kenneth Russell.
     7
     8        * http/tests/xmlhttprequest/send-array-buffer-expected.txt:
     9        * http/tests/xmlhttprequest/send-array-buffer.html:
     10        * http/tests/xmlhttprequest/send-data-view-expected.txt: Added.
     11        * http/tests/xmlhttprequest/send-data-view.html: Added.
     12
    1132012-07-08  Hayato Ito  <hayato@chromium.org>
    214
  • trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer-expected.txt

    r106043 r122074  
    1 Tests sending an array buffer.
     1Tests sending an array buffer view.
    220 1 2 48 49 50 128 129 130 253 254 255
    33
  • trunk/LayoutTests/http/tests/xmlhttprequest/send-array-buffer.html

    r120167 r122074  
    11<html>
    22<body>
    3 Tests sending an array buffer.
     3Tests sending an array buffer view.
    44<script>
    55if (window.testRunner)
     
    1919var xhr = new XMLHttpRequest;
    2020xhr.open("POST", "resources/post-echo-as-ascii.cgi", false);
    21 xhr.send(array.buffer);
     21xhr.send(array);
    2222log(xhr.responseText);
    2323</script>
  • trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view-expected.txt

    r122073 r122074  
    1 Tests sending an array buffer.
     1Tests sending a data view.
    220 1 2 48 49 50 128 129 130 253 254 255
    33
  • trunk/LayoutTests/http/tests/xmlhttprequest/send-data-view.html

    r122073 r122074  
    11<html>
    22<body>
    3 Tests sending an array buffer.
     3Tests sending a data view.
    44<script>
    55if (window.testRunner)
     
    1919var xhr = new XMLHttpRequest;
    2020xhr.open("POST", "resources/post-echo-as-ascii.cgi", false);
    21 xhr.send(array.buffer);
     21xhr.send(new DataView(array.buffer));
    2222log(xhr.responseText);
    2323</script>
    2424</body>
    2525</html>
     26
  • trunk/Source/WebCore/ChangeLog

    r122059 r122074  
     12012-07-08  Kinuko Yasuda  <kinuko@chromium.org>
     2
     3        XHR.send should support ArrayBufferView
     4        https://bugs.webkit.org/show_bug.cgi?id=90536
     5
     6        XHR.send should support ArrayBufferView according to the latest draft
     7        and also eventually deprecate ArrayBuffer.
     8        Spec: http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send
     9
     10        Reviewed by Kenneth Russell.
     11
     12        Test: http/tests/xmlhttprequest/send-array-buffer.html
     13              http/tests/xmlhttprequest/send-data-view.html
     14
     15        * bindings/js/JSXMLHttpRequestCustom.cpp:
     16        (WebCore::JSXMLHttpRequest::send):
     17        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
     18        (WebCore::V8XMLHttpRequest::sendCallback):
     19        * xml/XMLHttpRequest.cpp:
     20        (WebCore):
     21        (WebCore::XMLHttpRequest::send):
     22        * xml/XMLHttpRequest.h:
     23        (XMLHttpRequest):
     24        * xml/XMLHttpRequest.idl:
     25
    1262012-07-08  Vivek Galatage  <vivekgalatage@gmail.com>
    227
  • trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp

    r120574 r122074  
    4040#include "InspectorInstrumentation.h"
    4141#include "JSArrayBuffer.h"
     42#include "JSArrayBufferView.h"
    4243#include "JSBlob.h"
    4344#include "JSDOMFormData.h"
     
    127128        else if (val.inherits(&JSArrayBuffer::s_info))
    128129            impl()->send(toArrayBuffer(val), ec);
     130        else if (val.inherits(&JSArrayBufferView::s_info))
     131            impl()->send(toArrayBufferView(val), ec);
    129132        else
    130133            impl()->send(ustringToString(val.toString(exec)->value(exec)), ec);
  • trunk/Source/WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp

    r120574 r122074  
    3737#include "InspectorInstrumentation.h"
    3838#include "V8ArrayBuffer.h"
     39#include "V8ArrayBufferView.h"
    3940#include "V8Binding.h"
    4041#include "V8Blob.h"
     
    189190            ASSERT(arrayBuffer);
    190191            xmlHttpRequest->send(arrayBuffer, ec);
     192        } else if (V8ArrayBufferView::HasInstance(arg)) {
     193            v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(arg);
     194            ArrayBufferView* arrayBufferView = V8ArrayBufferView::toNative(object);
     195            ASSERT(arrayBufferView);
     196            xmlHttpRequest->send(arrayBufferView, ec);
    191197#endif
    192198        } else
  • trunk/Source/WebCore/xml/XMLHttpRequest.cpp

    r121381 r122074  
    3939#include "HTTPParsers.h"
    4040#include "HTTPValidation.h"
     41#include "HistogramSupport.h"
    4142#include "InspectorInstrumentation.h"
    4243#include "MemoryCache.h"
     
    5556#include "markup.h"
    5657#include <wtf/ArrayBuffer.h>
     58#include <wtf/ArrayBufferView.h>
    5759#include <wtf/RefCountedLeakCounter.h>
    5860#include <wtf/StdLibExtras.h>
     
    7072
    7173DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XMLHttpRequest"));
     74
     75// Histogram enum to see when we can deprecate xhr.send(ArrayBuffer).
     76enum XMLHttpRequestSendArrayBufferOrView {
     77    XMLHttpRequestSendArrayBuffer,
     78    XMLHttpRequestSendArrayBufferView,
     79    XMLHttpRequestSendArrayBufferOrViewMax,
     80};
    7281
    7382struct XMLHttpRequestStaticData {
     
    647656void XMLHttpRequest::send(ArrayBuffer* body, ExceptionCode& ec)
    648657{
     658    String consoleMessage("ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead.");
     659    scriptExecutionContext()->addConsoleMessage(JSMessageSource, LogMessageType, WarningMessageLevel, consoleMessage);
     660
     661    HistogramSupport::histogramEnumeration("WebCore.XHR.send.ArrayBufferOrView", XMLHttpRequestSendArrayBuffer, XMLHttpRequestSendArrayBufferOrViewMax);
     662
     663    sendBytesData(body->data(), body->byteLength(), ec);
     664}
     665
     666void XMLHttpRequest::send(ArrayBufferView* body, ExceptionCode& ec)
     667{
     668    HistogramSupport::histogramEnumeration("WebCore.XHR.send.ArrayBufferOrView", XMLHttpRequestSendArrayBufferView, XMLHttpRequestSendArrayBufferOrViewMax);
     669
     670    sendBytesData(body->baseAddress(), body->byteLength(), ec);
     671}
     672
     673void XMLHttpRequest::sendBytesData(const void* data, size_t length, ExceptionCode& ec)
     674{
    649675    if (!initSend(ec))
    650676        return;
    651677
    652678    if (m_method != "GET" && m_method != "HEAD" && m_url.protocolIsInHTTPFamily()) {
    653         m_requestEntityBody = FormData::create(body->data(), body->byteLength());
     679        m_requestEntityBody = FormData::create(data, length);
    654680        if (m_upload)
    655681            m_requestEntityBody->setAlwaysStream(true);
  • trunk/Source/WebCore/xml/XMLHttpRequest.h

    r120574 r122074  
    9494    void send(DOMFormData*, ExceptionCode&);
    9595    void send(ArrayBuffer*, ExceptionCode&);
     96    void send(ArrayBufferView*, ExceptionCode&);
    9697    void abort();
    9798    void setRequestHeader(const AtomicString& name, const String& value, ExceptionCode&);
     
    161162
    162163    bool initSend(ExceptionCode&);
     164    void sendBytesData(const void*, size_t, ExceptionCode&);
    163165
    164166    String getRequestHeader(const AtomicString& name) const;
  • trunk/Source/WebCore/xml/XMLHttpRequest.idl

    r121161 r122074  
    7070        [Custom] void send()
    7171            raises(DOMException);
    72         [Custom] void send(in ArrayBuffer data)
     72        [Custom] void send(in ArrayBuffer data) // FIXME: this should be eventually deprecated.
     73            raises(DOMException);
     74        [Custom] void send(in ArrayBufferView data)
    7375            raises(DOMException);
    7476        [Conditional=BLOB, Custom] void send(in Blob data)
Note: See TracChangeset for help on using the changeset viewer.