Chromium Code Reviews| Index: runtime/vm/dart_api_impl.cc |
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc |
| index 254d829e5bfcc3b60beeaed579d4231348b05583..b3ff7b749a7805b26a3d1fe4b1576ad0391fc160 100644 |
| --- a/runtime/vm/dart_api_impl.cc |
| +++ b/runtime/vm/dart_api_impl.cc |
| @@ -16,6 +16,7 @@ |
| #include "vm/dart_api_state.h" |
| #include "vm/dart_entry.h" |
| #include "vm/debugger.h" |
| +#include "vm/dev_fs.h" |
| #include "vm/exceptions.h" |
| #include "vm/flags.h" |
| #include "vm/growable_array.h" |
| @@ -5895,6 +5896,80 @@ DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id, |
| } |
| +DART_EXPORT bool Dart_IsDevFSUri(Dart_Handle uri) { |
| + DARTSCOPE(Thread::Current()); |
| + const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
| + if (uri_string.IsNull()) { |
| + return false; |
| + } |
| + ParsedUri parsed_uri; |
| + if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
| + return false; |
| + } |
| + if ((parsed_uri.scheme == NULL) || |
| + (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
| + return false; |
| + } |
| + return true; |
| +} |
| + |
| + |
| +DART_EXPORT Dart_Handle Dart_DevFSReadFile(Dart_Handle uri) { |
| + DARTSCOPE(Thread::Current()); |
| + const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
| + if (uri_string.IsNull()) { |
| + RETURN_TYPE_ERROR(Z, uri, String); |
| + } |
| + ParsedUri parsed_uri; |
| + if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
| + return Api::NewError("%s: Unable to parse uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if ((parsed_uri.scheme == NULL) || |
| + (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
| + return Api::NewError("%s: Not a dart-devfs uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if (parsed_uri.host == NULL) { |
| + return Api::NewError("%s: Invalid dart-devfs uri '%s'.", |
|
turnidge
2016/06/10 18:45:34
Make error message better. "No authority specified
|
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if (parsed_uri.path == NULL) { |
| + return Api::NewError("%s: No path specified in dart-devfs uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + return DevFS::ReadFile(parsed_uri.host, parsed_uri.path); |
| +} |
| + |
| + |
| +DART_EXPORT Dart_Handle Dart_DevFSReadFileAsUTF8String(Dart_Handle uri) { |
| + DARTSCOPE(Thread::Current()); |
| + const String& uri_string = Api::UnwrapStringHandle(Z, uri); |
| + if (uri_string.IsNull()) { |
| + RETURN_TYPE_ERROR(Z, uri, String); |
| + } |
| + ParsedUri parsed_uri; |
| + if (!ParseUri(uri_string.ToCString(), &parsed_uri)) { |
| + return Api::NewError("%s: Unable to parse uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if ((parsed_uri.scheme == NULL) || |
| + (strcmp(parsed_uri.scheme, "dart-devfs") != 0)) { |
| + return Api::NewError("%s: Not a dart-devfs uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if (parsed_uri.host == NULL) { |
| + return Api::NewError("%s: Invalid dart-devfs uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + if (parsed_uri.path == NULL) { |
| + return Api::NewError("%s: No path specified in dart-devfs uri '%s'.", |
| + CURRENT_FUNC, uri_string.ToCString()); |
| + } |
| + return DevFS::ReadFileAsString(parsed_uri.host, parsed_uri.path); |
| +} |
| + |
| + |
| DART_EXPORT int64_t Dart_TimelineGetMicros() { |
| return OS::GetCurrentMonotonicMicros(); |
| } |