Index: Source/WebCore/bindings/dart/custom/DartXMLHttpRequestCustom.cpp |
diff --git a/Source/WebCore/bindings/dart/custom/DartXMLHttpRequestCustom.cpp b/Source/WebCore/bindings/dart/custom/DartXMLHttpRequestCustom.cpp |
index 00147646b1f2c59f8f624910ac2575d46b41d50b..0d1e8a4f90ecd804ad800f4f38377c413ae1c479 100644 |
--- a/Source/WebCore/bindings/dart/custom/DartXMLHttpRequestCustom.cpp |
+++ b/Source/WebCore/bindings/dart/custom/DartXMLHttpRequestCustom.cpp |
@@ -219,8 +219,70 @@ fail: |
void responseGetter(Dart_NativeArguments args) |
{ |
- // FIXME: implement. |
- DART_UNIMPLEMENTED(); |
+ DartApiScope dartApiScope; |
+ Dart_Handle exception; |
+ { |
+ XMLHttpRequest* receiver = DartDOMWrapper::receiver<XMLHttpRequest>(args); |
+ |
+ switch (receiver->responseTypeCode()) { |
+ case XMLHttpRequest::ResponseTypeDefault: |
+ case XMLHttpRequest::ResponseTypeText: |
+ { |
+ ExceptionCode ec = 0; |
+ String result = receiver->responseText(ec); |
+ if (UNLIKELY(ec)) { |
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec); |
+ goto fail; |
+ } |
+ Dart_SetReturnValue(args, DartUtilities::stringToDart(result)); |
+ return; |
+ } |
+ |
+ case XMLHttpRequest::ResponseTypeDocument: |
+ { |
+ ExceptionCode ec = 0; |
+ Document* document = receiver->responseXML(ec); |
+ if (UNLIKELY(ec)) { |
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec); |
+ goto fail; |
+ } |
+ DartDOMWrapper::returnValue<DartDocument>(args, document); |
+ return; |
+ } |
+ |
+ case XMLHttpRequest::ResponseTypeBlob: |
+#if ENABLE(XHR_RESPONSE_BLOB) |
+ { |
+ ExceptionCode ec = 0; |
+ Blob* blob = receiver->responseBlob(ec); |
+ if (UNLIKELY(ec)) { |
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec); |
+ goto fail; |
+ } |
+ DartDOMWrapper::returnValue<DartBlob>(args, blob); |
+ } |
+#endif |
+ return; |
+ |
+ case XMLHttpRequest::ResponseTypeArrayBuffer: |
+ { |
+ ExceptionCode ec = 0; |
+ ArrayBuffer* arrayBuffer = receiver->responseArrayBuffer(ec); |
+ if (UNLIKELY(ec)) { |
+ exception = DartDOMWrapper::exceptionCodeToDartException(ec); |
+ goto fail; |
+ } |
+ DartDOMWrapper::returnValue<DartArrayBuffer>(args, arrayBuffer); |
+ return; |
+ } |
+ } |
+ |
+ return; |
+ } |
+ |
+fail: |
+ Dart_ThrowException(exception); |
+ ASSERT_NOT_REACHED(); |
} |
} // DartXMLHttpRequestInternal |