18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     its contributors may be used to endorse or promote products derived
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     from this software without specific prior written permission.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSXMLHttpRequest.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "ArrayBuffer.h"
33d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "Blob.h"
34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "DOMFormData.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DOMWindow.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Event.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h"
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h"
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLDocument.h"
41a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "InspectorInstrumentation.h"
424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "JSArrayBuffer.h"
43d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "JSBlob.h"
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "JSDOMFormData.h"
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSDOMWindowCustom.h"
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSDocument.h"
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSEvent.h"
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSEventListener.h"
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XMLHttpRequest.h"
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <runtime/Error.h>
51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <interpreter/Interpreter.h>
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid JSXMLHttpRequest::markChildren(MarkStack& markStack)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Base::markChildren(markStack);
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
61cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    if (XMLHttpRequestUpload* upload = m_impl->optionalUpload())
62cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), upload);
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (Document* responseDocument = m_impl->optionalResponseXML())
654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), responseDocument);
664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (ArrayBuffer* responseArrayBuffer = m_impl->optionalResponseArrayBuffer())
684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), responseArrayBuffer);
694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if ENABLE(XHR_RESPONSE_BLOB)
714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (Blob* responseBlob = m_impl->optionalResponseBlob())
724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        markDOMObjectWrapper(markStack, *Heap::heap(this)->globalData(), responseBlob);
734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif
744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    m_impl->markJSEventListeners(markStack);
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Custom functions
795af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSValue JSXMLHttpRequest::open(ExecState* exec)
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    if (exec->argumentCount() < 2)
82545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    const KURL& url = impl()->scriptExecutionContext()->completeURL(ustringToString(exec->argument(1).toString(exec)));
855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    String method = ustringToString(exec->argument(0).toString(exec));
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    ExceptionCode ec = 0;
885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    if (exec->argumentCount() >= 3) {
895af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        bool async = exec->argument(2).toBoolean(exec);
90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        if (exec->argumentCount() >= 4 && !exec->argument(3).isUndefined()) {
925af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke            String user = valueToStringWithNullCheck(exec, exec->argument(3));
934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
945af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke            if (exec->argumentCount() >= 5 && !exec->argument(4).isUndefined()) {
955af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke                String password = valueToStringWithNullCheck(exec, exec->argument(4));
96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                impl()->open(method, url, async, user, password, ec);
97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            } else
98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                impl()->open(method, url, async, user, ec);
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else
100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            impl()->open(method, url, async, ec);
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else
102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        impl()->open(method, url, ec);
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    setDOMException(exec, ec);
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return jsUndefined();
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1085af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkeJSValue JSXMLHttpRequest::send(ExecState* exec)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
110a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    InspectorInstrumentation::willSendXMLHttpRequest(impl()->scriptExecutionContext(), impl()->url());
111a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ExceptionCode ec = 0;
1135af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    if (!exec->argumentCount())
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        impl()->send(ec);
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else {
1165af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke        JSValue val = exec->argument(0);
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        if (val.isUndefinedOrNull())
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            impl()->send(ec);
119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        else if (val.inherits(&JSDocument::s_info))
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            impl()->send(toDocument(val), ec);
121d0825bca7fe65beaee391d30da42e937db621564Steve Block        else if (val.inherits(&JSBlob::s_info))
122d0825bca7fe65beaee391d30da42e937db621564Steve Block            impl()->send(toBlob(val), ec);
123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        else if (val.inherits(&JSDOMFormData::s_info))
124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            impl()->send(toDOMFormData(val), ec);
1254a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch        else if (val.inherits(&JSArrayBuffer::s_info))
1264a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch            impl()->send(toArrayBuffer(val), ec);
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else
128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            impl()->send(ustringToString(val.toString(exec)), ec);
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int signedLineNumber;
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    intptr_t sourceID;
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UString sourceURL;
1345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    JSValue function;
135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    exec->interpreter()->retrieveLastCaller(exec, signedLineNumber, sourceID, sourceURL, function);
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    impl()->setLastSendLineNumber(signedLineNumber >= 0 ? signedLineNumber : 0);
137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    impl()->setLastSendURL(ustringToString(sourceURL));
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    setDOMException(exec, ec);
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return jsUndefined();
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1435f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue JSXMLHttpRequest::responseText(ExecState* exec) const
144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
1455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    ExceptionCode ec = 0;
146a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    String text = impl()->responseText(ec);
1475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    if (ec) {
1485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        setDOMException(exec, ec);
1495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        return jsUndefined();
1505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
1515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    return jsOwnedStringOrNull(exec, text);
152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
1544576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangJSValue JSXMLHttpRequest::response(ExecState* exec) const
1554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
1564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    switch (impl()->responseTypeCode()) {
1574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case XMLHttpRequest::ResponseTypeDefault:
1584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case XMLHttpRequest::ResponseTypeText:
1594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return responseText(exec);
1604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case XMLHttpRequest::ResponseTypeDocument:
1624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        {
1634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            ExceptionCode ec = 0;
1644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            Document* document = impl()->responseXML(ec);
1654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            if (ec) {
1664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                setDOMException(exec, ec);
1674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                return jsUndefined();
1684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            }
1694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            return toJS(exec, globalObject(), document);
1704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        }
1714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case XMLHttpRequest::ResponseTypeBlob:
1734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if ENABLE(XHR_RESPONSE_BLOB)
1744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        {
1754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            ExceptionCode ec = 0;
1764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            Blob* blob = impl()->responseBlob(ec);
1774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            if (ec) {
1784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                setDOMException(exec, ec);
1794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                return jsUndefined();
1804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            }
1814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            return toJS(exec, globalObject(), blob);
1824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        }
1834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#else
1844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return jsUndefined();
1854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif
1864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    case XMLHttpRequest::ResponseTypeArrayBuffer:
1884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        {
1894576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            ExceptionCode ec = 0;
1904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            ArrayBuffer* arrayBuffer = impl()->responseArrayBuffer(ec);
1914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            if (ec) {
1924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                setDOMException(exec, ec);
1934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang                return jsUndefined();
1944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            }
1954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang            return toJS(exec, globalObject(), arrayBuffer);
1964576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        }
1974576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    }
1984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
1994576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return jsUndefined();
2004576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
2014576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
202545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochEncodedJSValue JSC_HOST_CALL JSXMLHttpRequestConstructor::constructJSXMLHttpRequest(ExecState* exec)
203545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{
204545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    JSXMLHttpRequestConstructor* jsConstructor = static_cast<JSXMLHttpRequestConstructor*>(exec->callee());
205545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    ScriptExecutionContext* context = jsConstructor->scriptExecutionContext();
206545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    if (!context)
207545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch        return throwVMError(exec, createReferenceError(exec, "XMLHttpRequest constructor associated document is unavailable"));
208545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
209545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    RefPtr<XMLHttpRequest> xmlHttpRequest = XMLHttpRequest::create(context);
210545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    return JSValue::encode(CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor->globalObject(), XMLHttpRequest, xmlHttpRequest.get()));
211545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch}
212545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
214