Chromium Code Reviews| Index: runtime/bin/dartutils.cc |
| diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc |
| index 4bd4c98d0b401c7d9a9199593d0c8c1ae8207537..b4d2bf1547e8c3b61bff1908f90dbda702629d78 100644 |
| --- a/runtime/bin/dartutils.cc |
| +++ b/runtime/bin/dartutils.cc |
| @@ -287,26 +287,43 @@ Dart_Handle MakeHttpRequest(Dart_Handle uri, Dart_Handle builtin_lib, |
| } |
| return Dart_Error(DartUtils::GetStringValue(responseStatus)); |
| } |
| - Dart_Handle responseList = |
| + Dart_Handle response = |
| Dart_GetField(builtin_lib, DartUtils::NewString("_httpRequestResponse")); |
| - if (Dart_IsError(responseList)) { |
| - return responseList; |
| - } |
| - // Query list length. |
| - result = Dart_ListLength(responseList, buffer_len); |
| - if (Dart_IsError(result)) { |
| - *buffer_len = 0; |
| - *buffer = NULL; |
| - return result; |
| - } |
| - // Get payload as bytes. |
| - *buffer = reinterpret_cast<uint8_t*>(malloc(*buffer_len)); |
| - result = Dart_ListGetAsBytes(responseList, 0, *buffer, *buffer_len); |
| - if (Dart_IsError(result)) { |
| - free(*buffer); |
| - *buffer_len = 0; |
| - *buffer = NULL; |
| - return result; |
| + if (Dart_IsError(response)) { |
| + return response; |
| + } |
| + if (Dart_IsString(response)) { |
| + // Received response as string. |
| + const char* responseString = NULL; |
| + Dart_Handle r = Dart_StringToCString(response, &responseString); |
|
Søren Gjesse
2013/06/03 19:06:06
Shouldn't this be Dart_StringToUTF8? E.g. what hap
Cutch
2013/06/03 20:03:20
Done.
|
| + if (Dart_IsError(r)) { |
| + *buffer = NULL; |
| + *buffer_len = 0; |
| + return r; |
| + } |
| + // Get payload as bytes. |
| + *buffer_len = strlen(responseString)+1; |
| + *buffer = reinterpret_cast<uint8_t*>(malloc(*buffer_len)); |
| + memmove(*buffer, responseString, *buffer_len); |
| + } else { |
| + // Received response as list of bytes. |
| + ASSERT(Dart_IsList(response)); |
| + // Query list length. |
| + result = Dart_ListLength(response, buffer_len); |
| + if (Dart_IsError(result)) { |
| + *buffer_len = 0; |
| + *buffer = NULL; |
| + return result; |
| + } |
| + // Get payload as bytes. |
| + *buffer = reinterpret_cast<uint8_t*>(malloc(*buffer_len)); |
| + result = Dart_ListGetAsBytes(response, 0, *buffer, *buffer_len); |
|
Søren Gjesse
2013/06/03 19:06:06
Does it make sense to handle the HTTP response wit
Cutch
2013/06/03 20:03:20
Yes for a couple of reasons:
1) Loading snapshots
|
| + if (Dart_IsError(result)) { |
| + free(*buffer); |
| + *buffer_len = 0; |
| + *buffer = NULL; |
| + return result; |
| + } |
| } |
| return result; |
| } |