OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/callback.h" | 5 #include "base/callback.h" |
6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/sys_info.h" | 9 #include "base/sys_info.h" |
10 #include "crypto/random.h" | 10 #include "crypto/random.h" |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 return result; | 118 return result; |
119 } | 119 } |
120 bool is_dart_scheme_url = IsDartSchemeURL(url_string); | 120 bool is_dart_scheme_url = IsDartSchemeURL(url_string); |
121 // If this is a Dart Scheme URL then it is not modified as it will be | 121 // If this is a Dart Scheme URL then it is not modified as it will be |
122 // handled internally. | 122 // handled internally. |
123 if (is_dart_scheme_url) { | 123 if (is_dart_scheme_url) { |
124 return url; | 124 return url; |
125 } | 125 } |
126 // Resolve the url within the context of the library's URL. | 126 // Resolve the url within the context of the library's URL. |
127 Dart_Handle builtin_lib = | 127 Dart_Handle builtin_lib = |
128 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 128 Builtin::GetLibrary(Builtin::kBuiltinLibrary); |
129 return ResolveUri(library_url, url, builtin_lib); | 129 return ResolveUri(library_url, url, builtin_lib); |
130 } | 130 } |
131 | 131 |
132 Dart_Handle builtin_lib = | 132 Dart_Handle builtin_lib = |
133 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 133 Builtin::GetLibrary(Builtin::kBuiltinLibrary); |
134 // Handle 'import' or 'part' requests for all other URIs. Call dart code to | 134 // Handle 'import' or 'part' requests for all other URIs. Call dart code to |
135 // read the source code asynchronously. | 135 // read the source code asynchronously. |
136 return LoadDataAsync_Invoke( | 136 return LoadDataAsync_Invoke( |
137 Dart_NewInteger(tag), url, library_url, builtin_lib, Dart_Null()); | 137 Dart_NewInteger(tag), url, library_url, builtin_lib, Dart_Null()); |
138 } | 138 } |
139 | 139 |
140 static Dart_Handle SetWorkingDirectory(Dart_Handle builtin_lib) { | 140 static Dart_Handle SetWorkingDirectory(Dart_Handle builtin_lib) { |
141 base::FilePath current_dir; | 141 base::FilePath current_dir; |
142 PathService::Get(base::DIR_CURRENT, ¤t_dir); | 142 PathService::Get(base::DIR_CURRENT, ¤t_dir); |
143 | 143 |
(...skipping 14 matching lines...) Expand all Loading... |
158 // First ensure all required libraries are available. | 158 // First ensure all required libraries are available. |
159 Dart_Handle url = Dart_NewStringFromCString(kAsyncLibURL); | 159 Dart_Handle url = Dart_NewStringFromCString(kAsyncLibURL); |
160 DART_CHECK_VALID(url); | 160 DART_CHECK_VALID(url); |
161 Dart_Handle async_lib = Dart_LookupLibrary(url); | 161 Dart_Handle async_lib = Dart_LookupLibrary(url); |
162 DART_CHECK_VALID(async_lib); | 162 DART_CHECK_VALID(async_lib); |
163 url = Dart_NewStringFromCString(kIsolateLibURL); | 163 url = Dart_NewStringFromCString(kIsolateLibURL); |
164 DART_CHECK_VALID(url); | 164 DART_CHECK_VALID(url); |
165 Dart_Handle isolate_lib = Dart_LookupLibrary(url); | 165 Dart_Handle isolate_lib = Dart_LookupLibrary(url); |
166 DART_CHECK_VALID(isolate_lib); | 166 DART_CHECK_VALID(isolate_lib); |
167 Dart_Handle mojo_core_lib = | 167 Dart_Handle mojo_core_lib = |
168 Builtin::LoadAndCheckLibrary(Builtin::kMojoCoreLibrary); | 168 Builtin::GetLibrary(Builtin::kMojoCoreLibrary); |
169 DART_CHECK_VALID(mojo_core_lib); | 169 DART_CHECK_VALID(mojo_core_lib); |
170 | 170 |
171 // We need to ensure that all the scripts loaded so far are finalized | 171 // We need to ensure that all the scripts loaded so far are finalized |
172 // as we are about to invoke some Dart code below to setup closures. | 172 // as we are about to invoke some Dart code below to setup closures. |
173 Dart_Handle result = Dart_FinalizeLoading(false); | 173 Dart_Handle result = Dart_FinalizeLoading(false); |
174 DART_CHECK_VALID(result); | 174 DART_CHECK_VALID(result); |
175 | 175 |
176 // Setup the internal library's 'internalPrint' function. | 176 // Setup the internal library's 'internalPrint' function. |
177 Dart_Handle print = Dart_Invoke(builtin_lib, | 177 Dart_Handle print = Dart_Invoke(builtin_lib, |
178 Dart_NewStringFromCString("_getPrintClosure"), | 178 Dart_NewStringFromCString("_getPrintClosure"), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 218 |
219 // Set up package root. | 219 // Set up package root. |
220 result = Dart_NewStringFromUTF8( | 220 result = Dart_NewStringFromUTF8( |
221 reinterpret_cast<const uint8_t*>(package_root.c_str()), | 221 reinterpret_cast<const uint8_t*>(package_root.c_str()), |
222 package_root.length()); | 222 package_root.length()); |
223 DART_CHECK_VALID(result); | 223 DART_CHECK_VALID(result); |
224 | 224 |
225 const int kNumArgs = 1; | 225 const int kNumArgs = 1; |
226 Dart_Handle dart_args[kNumArgs]; | 226 Dart_Handle dart_args[kNumArgs]; |
227 dart_args[0] = result; | 227 dart_args[0] = result; |
228 return Dart_Invoke(builtin_lib, | 228 result = Dart_Invoke(builtin_lib, |
229 Dart_NewStringFromCString("_setPackageRoot"), | 229 Dart_NewStringFromCString("_setPackageRoot"), |
230 kNumArgs, | 230 kNumArgs, |
231 dart_args); | 231 dart_args); |
232 | 232 DART_CHECK_VALID(result); |
233 return result; | 233 return result; |
234 } | 234 } |
235 | 235 |
236 static Dart_Isolate CreateServiceIsolateHelper(const char* script_uri, | 236 static Dart_Isolate CreateServiceIsolateHelper(const char* script_uri, |
237 char** error) { | 237 char** error) { |
238 // TODO(johnmccutchan): Add support the service isolate. | 238 // TODO(johnmccutchan): Add support the service isolate. |
239 // No callbacks for service isolate. | 239 // No callbacks for service isolate. |
240 IsolateCallbacks callbacks; | 240 IsolateCallbacks callbacks; |
241 IsolateData* isolate_data = | 241 IsolateData* isolate_data = |
242 new IsolateData(NULL, false, callbacks, "", "", ""); | 242 new IsolateData(NULL, false, callbacks, "", "", ""); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 } | 274 } |
275 | 275 |
276 DPCHECK(!Dart_IsServiceIsolate(isolate)); | 276 DPCHECK(!Dart_IsServiceIsolate(isolate)); |
277 Dart_EnterScope(); | 277 Dart_EnterScope(); |
278 | 278 |
279 Dart_IsolateSetStrictCompilation(strict_compilation); | 279 Dart_IsolateSetStrictCompilation(strict_compilation); |
280 | 280 |
281 // Setup the native resolvers for the builtin libraries as they are not set | 281 // Setup the native resolvers for the builtin libraries as they are not set |
282 // up when the snapshot is read. | 282 // up when the snapshot is read. |
283 CHECK(snapshot_buffer != nullptr); | 283 CHECK(snapshot_buffer != nullptr); |
284 Builtin::SetNativeResolver(Builtin::kBuiltinLibrary); | 284 Builtin::PrepareLibrary(Builtin::kBuiltinLibrary); |
285 Builtin::SetNativeResolver(Builtin::kMojoCoreLibrary); | 285 Builtin::PrepareLibrary(Builtin::kMojoCoreLibrary); |
286 | 286 |
287 if (!callbacks.create.is_null()) { | 287 if (!callbacks.create.is_null()) { |
288 callbacks.create.Run(script_uri.c_str(), | 288 callbacks.create.Run(script_uri.c_str(), |
289 "main", | 289 "main", |
290 package_root.c_str(), | 290 package_root.c_str(), |
291 isolate_data, | 291 isolate_data, |
292 error); | 292 error); |
293 } | 293 } |
294 | 294 |
295 // Set up the library tag handler for this isolate. | 295 // Set up the library tag handler for this isolate. |
296 Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler); | 296 Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler); |
297 DART_CHECK_VALID(result); | 297 DART_CHECK_VALID(result); |
298 | 298 |
299 // Prepare builtin and its dependent libraries for use to resolve URIs. | 299 // Prepare builtin and its dependent libraries for use to resolve URIs. |
300 // The builtin library is part of the snapshot and is already available. | 300 // The builtin library is part of the snapshot and is already available. |
301 Dart_Handle builtin_lib = | 301 Dart_Handle builtin_lib = |
302 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 302 Builtin::GetLibrary(Builtin::kBuiltinLibrary); |
303 DART_CHECK_VALID(builtin_lib); | 303 DART_CHECK_VALID(builtin_lib); |
304 | 304 |
305 result = PrepareScriptForLoading(package_root, builtin_lib); | 305 result = PrepareScriptForLoading(package_root, builtin_lib); |
306 DART_CHECK_VALID(result); | 306 DART_CHECK_VALID(result); |
307 | 307 |
308 Dart_Handle uri = Dart_NewStringFromUTF8( | 308 Dart_Handle uri = Dart_NewStringFromUTF8( |
309 reinterpret_cast<const uint8_t*>(script_uri.c_str()), | 309 reinterpret_cast<const uint8_t*>(script_uri.c_str()), |
310 script_uri.length()); | 310 script_uri.length()); |
311 DART_CHECK_VALID(uri); | 311 DART_CHECK_VALID(uri); |
312 | 312 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 if (isolate == nullptr) { | 452 if (isolate == nullptr) { |
453 return false; | 453 return false; |
454 } | 454 } |
455 | 455 |
456 Dart_EnterIsolate(isolate); | 456 Dart_EnterIsolate(isolate); |
457 Dart_Handle result; | 457 Dart_Handle result; |
458 Dart_EnterScope(); | 458 Dart_EnterScope(); |
459 | 459 |
460 // Start the MojoHandleWatcher. | 460 // Start the MojoHandleWatcher. |
461 Dart_Handle mojo_core_lib = | 461 Dart_Handle mojo_core_lib = |
462 Builtin::LoadAndCheckLibrary(Builtin::kMojoCoreLibrary); | 462 Builtin::GetLibrary(Builtin::kMojoCoreLibrary); |
463 DART_CHECK_VALID(mojo_core_lib); | 463 DART_CHECK_VALID(mojo_core_lib); |
464 Dart_Handle handle_watcher_type = Dart_GetType( | 464 Dart_Handle handle_watcher_type = Dart_GetType( |
465 mojo_core_lib, | 465 mojo_core_lib, |
466 Dart_NewStringFromCString("MojoHandleWatcher"), | 466 Dart_NewStringFromCString("MojoHandleWatcher"), |
467 0, | 467 0, |
468 nullptr); | 468 nullptr); |
469 DART_CHECK_VALID(handle_watcher_type); | 469 DART_CHECK_VALID(handle_watcher_type); |
470 result = Dart_Invoke( | 470 result = Dart_Invoke( |
471 handle_watcher_type, | 471 handle_watcher_type, |
472 Dart_NewStringFromCString("_start"), | 472 Dart_NewStringFromCString("_start"), |
473 0, | 473 0, |
474 nullptr); | 474 nullptr); |
475 DART_CHECK_VALID(result); | 475 DART_CHECK_VALID(result); |
476 | 476 |
477 // RunLoop until the handle watcher isolate is spun-up. | 477 // RunLoop until the handle watcher isolate is spun-up. |
478 result = Dart_RunLoop(); | 478 result = Dart_RunLoop(); |
479 DART_CHECK_VALID(result); | 479 DART_CHECK_VALID(result); |
480 | 480 |
481 // Load the root library into the builtin library so that main can be found. | 481 // Load the root library into the builtin library so that main can be found. |
482 Dart_Handle builtin_lib = | 482 Dart_Handle builtin_lib = |
483 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 483 Builtin::GetLibrary(Builtin::kBuiltinLibrary); |
484 DART_CHECK_VALID(builtin_lib); | 484 DART_CHECK_VALID(builtin_lib); |
485 Dart_Handle root_lib = Dart_RootLibrary(); | 485 Dart_Handle root_lib = Dart_RootLibrary(); |
486 DART_CHECK_VALID(root_lib); | 486 DART_CHECK_VALID(root_lib); |
487 result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null()); | 487 result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null()); |
488 DART_CHECK_VALID(result); | 488 DART_CHECK_VALID(result); |
489 | 489 |
490 if (config.compile_all) { | 490 if (config.compile_all) { |
491 result = Dart_CompileAll(); | 491 result = Dart_CompileAll(); |
492 DART_CHECK_VALID(result); | 492 DART_CHECK_VALID(result); |
493 } | 493 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 initialized_ = false; | 563 initialized_ = false; |
564 return false; | 564 return false; |
565 } | 565 } |
566 | 566 |
567 Dart_EnterIsolate(root_isolate_); | 567 Dart_EnterIsolate(root_isolate_); |
568 Dart_Handle result; | 568 Dart_Handle result; |
569 Dart_EnterScope(); | 569 Dart_EnterScope(); |
570 | 570 |
571 // Start the MojoHandleWatcher. | 571 // Start the MojoHandleWatcher. |
572 Dart_Handle mojo_core_lib = | 572 Dart_Handle mojo_core_lib = |
573 Builtin::LoadAndCheckLibrary(Builtin::kMojoCoreLibrary); | 573 Builtin::GetLibrary(Builtin::kMojoCoreLibrary); |
574 DART_CHECK_VALID(mojo_core_lib); | 574 DART_CHECK_VALID(mojo_core_lib); |
575 Dart_Handle handle_watcher_type = Dart_GetType( | 575 Dart_Handle handle_watcher_type = Dart_GetType( |
576 mojo_core_lib, | 576 mojo_core_lib, |
577 Dart_NewStringFromCString("MojoHandleWatcher"), | 577 Dart_NewStringFromCString("MojoHandleWatcher"), |
578 0, | 578 0, |
579 nullptr); | 579 nullptr); |
580 DART_CHECK_VALID(handle_watcher_type); | 580 DART_CHECK_VALID(handle_watcher_type); |
581 result = Dart_Invoke( | 581 result = Dart_Invoke( |
582 handle_watcher_type, | 582 handle_watcher_type, |
583 Dart_NewStringFromCString("_start"), | 583 Dart_NewStringFromCString("_start"), |
(...skipping 22 matching lines...) Expand all Loading... |
606 if (isolate == nullptr) { | 606 if (isolate == nullptr) { |
607 return false; | 607 return false; |
608 } | 608 } |
609 | 609 |
610 Dart_EnterIsolate(isolate); | 610 Dart_EnterIsolate(isolate); |
611 Dart_Handle result; | 611 Dart_Handle result; |
612 Dart_EnterScope(); | 612 Dart_EnterScope(); |
613 | 613 |
614 // Load the root library into the builtin library so that main can be found. | 614 // Load the root library into the builtin library so that main can be found. |
615 Dart_Handle builtin_lib = | 615 Dart_Handle builtin_lib = |
616 Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary); | 616 Builtin::GetLibrary(Builtin::kBuiltinLibrary); |
617 DART_CHECK_VALID(builtin_lib); | 617 DART_CHECK_VALID(builtin_lib); |
618 Dart_Handle root_lib = Dart_RootLibrary(); | 618 Dart_Handle root_lib = Dart_RootLibrary(); |
619 DART_CHECK_VALID(root_lib); | 619 DART_CHECK_VALID(root_lib); |
620 result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null()); | 620 result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null()); |
621 DART_CHECK_VALID(result); | 621 DART_CHECK_VALID(result); |
622 | 622 |
623 if (config.compile_all) { | 623 if (config.compile_all) { |
624 result = Dart_CompileAll(); | 624 result = Dart_CompileAll(); |
625 DART_CHECK_VALID(result); | 625 DART_CHECK_VALID(result); |
626 } | 626 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 } | 666 } |
667 | 667 |
668 void DartController::Shutdown() { | 668 void DartController::Shutdown() { |
669 CHECK(root_isolate_ != nullptr); | 669 CHECK(root_isolate_ != nullptr); |
670 Dart_EnterIsolate(root_isolate_); | 670 Dart_EnterIsolate(root_isolate_); |
671 Dart_Handle result; | 671 Dart_Handle result; |
672 Dart_EnterScope(); | 672 Dart_EnterScope(); |
673 | 673 |
674 // Stop the MojoHandleWatcher. | 674 // Stop the MojoHandleWatcher. |
675 Dart_Handle mojo_core_lib = | 675 Dart_Handle mojo_core_lib = |
676 Builtin::LoadAndCheckLibrary(Builtin::kMojoCoreLibrary); | 676 Builtin::GetLibrary(Builtin::kMojoCoreLibrary); |
677 DART_CHECK_VALID(mojo_core_lib); | 677 DART_CHECK_VALID(mojo_core_lib); |
678 Dart_Handle handle_watcher_type = Dart_GetType( | 678 Dart_Handle handle_watcher_type = Dart_GetType( |
679 mojo_core_lib, | 679 mojo_core_lib, |
680 Dart_NewStringFromCString("MojoHandleWatcher"), | 680 Dart_NewStringFromCString("MojoHandleWatcher"), |
681 0, | 681 0, |
682 nullptr); | 682 nullptr); |
683 DART_CHECK_VALID(handle_watcher_type); | 683 DART_CHECK_VALID(handle_watcher_type); |
684 result = Dart_Invoke( | 684 result = Dart_Invoke( |
685 handle_watcher_type, | 685 handle_watcher_type, |
686 Dart_NewStringFromCString("_stop"), | 686 Dart_NewStringFromCString("_stop"), |
687 0, | 687 0, |
688 nullptr); | 688 nullptr); |
689 DART_CHECK_VALID(result); | 689 DART_CHECK_VALID(result); |
690 | 690 |
691 result = Dart_RunLoop(); | 691 result = Dart_RunLoop(); |
692 DART_CHECK_VALID(result); | 692 DART_CHECK_VALID(result); |
693 | 693 |
694 Dart_ExitScope(); | 694 Dart_ExitScope(); |
695 Dart_ShutdownIsolate(); | 695 Dart_ShutdownIsolate(); |
696 Dart_Cleanup(); | 696 Dart_Cleanup(); |
697 root_isolate_ = nullptr; | 697 root_isolate_ = nullptr; |
698 initialized_ = false; | 698 initialized_ = false; |
699 } | 699 } |
700 | 700 |
701 } // namespace apps | 701 } // namespace apps |
702 } // namespace mojo | 702 } // namespace mojo |
OLD | NEW |