Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1238)

Unified Diff: mojo/dart/embedder/dart_controller.cc

Issue 951783004: Dart: Renames dart:mojo_blah -> mojo:blah (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/dart/embedder/builtin.dart ('k') | mojo/dart/embedder/mojo_natives.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/dart/embedder/dart_controller.cc
diff --git a/mojo/dart/embedder/dart_controller.cc b/mojo/dart/embedder/dart_controller.cc
index 6c8f0c7c490db1cf008406a2aae211ca43be5b67..1a2274290891ff2e800a20416d9883db8aecfef4 100644
--- a/mojo/dart/embedder/dart_controller.cc
+++ b/mojo/dart/embedder/dart_controller.cc
@@ -20,6 +20,7 @@ namespace dart {
extern const uint8_t* snapshot_buffer;
const char* kDartScheme = "dart:";
+const char* kMojoScheme = "mojo:";
const char* kAsyncLibURL = "dart:async";
const char* kInternalLibURL = "dart:_internal";
const char* kIsolateLibURL = "dart:isolate";
@@ -32,6 +33,13 @@ static bool IsDartSchemeURL(const char* url_name) {
return (strncmp(url_name, kDartScheme, kDartSchemeLen) == 0);
}
+static bool IsMojoSchemeURL(const char* url_name) {
+ static const intptr_t kMojoSchemeLen = strlen(kMojoScheme);
+ // If the URL starts with "mojo:" then it is considered as a special
+ // library URL which is handled differently from other URLs.
+ return (strncmp(url_name, kMojoScheme, kMojoSchemeLen) == 0);
+}
+
static bool IsServiceIsolateURL(const char* url_name) {
if (url_name == nullptr) {
return false;
@@ -111,16 +119,17 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
}
// Handle URI canonicalization requests.
+ const char* url_string = nullptr;
+ result = Dart_StringToCString(url, &url_string);
if (tag == Dart_kCanonicalizeUrl) {
- const char* url_string = nullptr;
- result = Dart_StringToCString(url, &url_string);
if (Dart_IsError(result)) {
return result;
}
- bool is_dart_scheme_url = IsDartSchemeURL(url_string);
- // If this is a Dart Scheme URL then it is not modified as it will be
- // handled internally.
- if (is_dart_scheme_url) {
+ const bool is_internal_scheme_url =
+ IsDartSchemeURL(url_string) || IsMojoSchemeURL(url_string);
+ // If this is a Dart Scheme URL, or a Mojo Scheme URL, then it is not
+ // modified as it will be handled internally.
+ if (is_internal_scheme_url) {
return url;
}
// Resolve the url within the context of the library's URL.
@@ -129,6 +138,14 @@ static Dart_Handle LibraryTagHandler(Dart_LibraryTag tag,
return ResolveUri(library_url, url, builtin_lib);
}
+ if (tag == Dart_kImportTag) {
+ if (IsMojoSchemeURL(url_string)) {
+ Dart_Handle library = Dart_LookupLibrary(url);
+ DART_CHECK_VALID(library);
+ return library;
+ }
+ }
+
Dart_Handle builtin_lib =
Builtin::GetLibrary(Builtin::kBuiltinLibrary);
// Handle 'import' or 'part' requests for all other URIs. Call dart code to
@@ -156,7 +173,11 @@ static Dart_Handle SetWorkingDirectory(Dart_Handle builtin_lib) {
static Dart_Handle PrepareScriptForLoading(const std::string& package_root,
Dart_Handle builtin_lib) {
// First ensure all required libraries are available.
- Dart_Handle url = Dart_NewStringFromCString(kAsyncLibURL);
+ Dart_Handle url = Dart_NewStringFromCString(kInternalLibURL);
+ DART_CHECK_VALID(url);
+ Dart_Handle internal_lib = Dart_LookupLibrary(url);
+ DART_CHECK_VALID(internal_lib);
+ url = Dart_NewStringFromCString(kAsyncLibURL);
DART_CHECK_VALID(url);
Dart_Handle async_lib = Dart_LookupLibrary(url);
DART_CHECK_VALID(async_lib);
@@ -173,16 +194,16 @@ static Dart_Handle PrepareScriptForLoading(const std::string& package_root,
Dart_Handle result = Dart_FinalizeLoading(false);
DART_CHECK_VALID(result);
+ // Import dart:_internal into mojo:builtin for setting up hooks.
+ result = Dart_LibraryImportLibrary(builtin_lib, internal_lib, Dart_Null());
+ DART_CHECK_VALID(result);
+
// Setup the internal library's 'internalPrint' function.
Dart_Handle print = Dart_Invoke(builtin_lib,
Dart_NewStringFromCString("_getPrintClosure"),
0,
nullptr);
DART_CHECK_VALID(print);
- url = Dart_NewStringFromCString(kInternalLibURL);
- DART_CHECK_VALID(url);
- Dart_Handle internal_lib = Dart_LookupLibrary(url);
- DART_CHECK_VALID(internal_lib);
result = Dart_SetField(internal_lib,
Dart_NewStringFromCString("_printClosure"),
print);
« no previous file with comments | « mojo/dart/embedder/builtin.dart ('k') | mojo/dart/embedder/mojo_natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698