| Index: mojo/dart/embedder/dart_controller.cc
|
| diff --git a/mojo/dart/embedder/dart_controller.cc b/mojo/dart/embedder/dart_controller.cc
|
| index 37d1c32d554afd3d680afaf6daf1798d0e1b1d3f..ac4bf87a3363871df15c64554fa215c69239458b 100644
|
| --- a/mojo/dart/embedder/dart_controller.cc
|
| +++ b/mojo/dart/embedder/dart_controller.cc
|
| @@ -26,6 +26,7 @@
|
| #include "tonic/dart_library_loader.h"
|
| #include "tonic/dart_library_provider.h"
|
| #include "tonic/dart_library_provider_files.h"
|
| +#include "tonic/dart_library_provider_network.h"
|
|
|
| namespace mojo {
|
| namespace dart {
|
| @@ -263,7 +264,8 @@ Dart_Isolate DartController::CreateIsolateHelper(
|
| IsolateCallbacks callbacks,
|
| const std::string& script_uri,
|
| const std::string& package_root,
|
| - char** error) {
|
| + char** error,
|
| + bool use_network_loader) {
|
| auto isolate_data = new MojoDartState(dart_app,
|
| strict_compilation,
|
| callbacks,
|
| @@ -276,14 +278,20 @@ Dart_Isolate DartController::CreateIsolateHelper(
|
| delete isolate_data;
|
| return nullptr;
|
| }
|
| - isolate_data->SetIsolate(isolate);
|
| Dart_ExitIsolate();
|
|
|
| + isolate_data->SetIsolate(isolate);
|
| + if (service_connector_ != nullptr) {
|
| + // This is not supported in the unit test harness.
|
| + isolate_data->BindNetworkService(
|
| + service_connector_->ConnectToService(
|
| + DartControllerServiceConnector::kNetworkServiceId));
|
| + }
|
| +
|
| // Setup isolate and load script.
|
| {
|
| tonic::DartIsolateScope isolate_scope(isolate);
|
| tonic::DartApiScope api_scope;
|
| -
|
| // Setup loader.
|
| const char* package_root_str = nullptr;
|
| if (package_root.empty()) {
|
| @@ -291,8 +299,15 @@ Dart_Isolate DartController::CreateIsolateHelper(
|
| } else {
|
| package_root_str = package_root.c_str();
|
| }
|
| - isolate_data->set_library_provider(
|
| - new tonic::DartLibraryProviderFiles(base::FilePath(package_root_str)));
|
| + if (use_network_loader) {
|
| + mojo::NetworkService* network_service = isolate_data->network_service();
|
| + isolate_data->set_library_provider(
|
| + new tonic::DartLibraryProviderNetwork(network_service));
|
| + } else {
|
| + isolate_data->set_library_provider(
|
| + new tonic::DartLibraryProviderFiles(
|
| + base::FilePath(package_root_str)));
|
| + }
|
| Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler);
|
| DART_CHECK_VALID(result);
|
| // Toggle checked mode.
|
| @@ -383,6 +398,8 @@ Dart_Isolate DartController::IsolateCreateCallback(const char* script_uri,
|
| // Inherit parameters from parent isolate (if any).
|
| void* dart_app = nullptr;
|
| bool strict_compilation = true;
|
| + // TODO(johnmccutchan): Use parent's setting?
|
| + bool use_network_loader = false;
|
| IsolateCallbacks callbacks;
|
| if (parent_isolate_data != nullptr) {
|
| dart_app = parent_isolate_data->application_data();
|
| @@ -394,7 +411,8 @@ Dart_Isolate DartController::IsolateCreateCallback(const char* script_uri,
|
| callbacks,
|
| script_uri_string,
|
| package_root_string,
|
| - error);
|
| + error,
|
| + use_network_loader);
|
| }
|
|
|
| void DartController::IsolateShutdownCallback(void* callback_data) {
|
| @@ -516,7 +534,7 @@ void DartController::StopHandleWatcherIsolate() {
|
| IsolateCallbacks callbacks;
|
| char* error;
|
| Dart_Isolate shutdown_isolate = CreateIsolateHelper(
|
| - nullptr, false, callbacks, "stop-handle-watcher", "", &error);
|
| + nullptr, false, callbacks, "stop-handle-watcher", "", &error, false);
|
| CHECK(shutdown_isolate);
|
|
|
| Dart_EnterIsolate(shutdown_isolate);
|
| @@ -687,7 +705,8 @@ bool DartController::RunSingleDartScript(const DartControllerConfig& config) {
|
| config.callbacks,
|
| config.script_uri,
|
| config.package_root,
|
| - config.error);
|
| + config.error,
|
| + config.use_network_loader);
|
| if (isolate == nullptr) {
|
| return false;
|
| }
|
| @@ -718,9 +737,13 @@ bool DartController::Initialize(
|
| bool DartController::RunDartScript(const DartControllerConfig& config) {
|
| CHECK(service_isolate_running_);
|
| const bool strict = strict_compilation_ || config.strict_compilation;
|
| - Dart_Isolate isolate = CreateIsolateHelper(
|
| - config.application_data, strict, config.callbacks,
|
| - config.script_uri, config.package_root, config.error);
|
| + Dart_Isolate isolate = CreateIsolateHelper(config.application_data,
|
| + strict,
|
| + config.callbacks,
|
| + config.script_uri,
|
| + config.package_root,
|
| + config.error,
|
| + config.use_network_loader);
|
| if (isolate == nullptr) {
|
| return false;
|
| }
|
|
|