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