diff --git a/shell/platform/fuchsia/dart-pkg/zircon/sdk_ext/system.cc b/shell/platform/fuchsia/dart-pkg/zircon/sdk_ext/system.cc index 9e8475dac55c1..29a5d75a8e071 100644 --- a/shell/platform/fuchsia/dart-pkg/zircon/sdk_ext/system.cc +++ b/shell/platform/fuchsia/dart-pkg/zircon/sdk_ext/system.cc @@ -160,7 +160,7 @@ fdio_ns_t* GetNamespace() { Dart_Handle zircon_lib = Dart_LookupLibrary(ToDart("dart:zircon")); FML_DCHECK(!tonic::LogIfError(zircon_lib)); Dart_Handle namespace_type = - Dart_GetType(zircon_lib, ToDart("_Namespace"), 0, nullptr); + Dart_GetNonNullableType(zircon_lib, ToDart("_Namespace"), 0, nullptr); FML_DCHECK(!tonic::LogIfError(namespace_type)); Dart_Handle namespace_field = Dart_GetField(namespace_type, ToDart("_namespace")); diff --git a/shell/platform/fuchsia/dart_runner/builtin_libraries.cc b/shell/platform/fuchsia/dart_runner/builtin_libraries.cc index af40603c0f148..59cbd8bc1a08e 100644 --- a/shell/platform/fuchsia/dart_runner/builtin_libraries.cc +++ b/shell/platform/fuchsia/dart_runner/builtin_libraries.cc @@ -185,7 +185,7 @@ void InitBuiltinLibrariesForIsolate( // Set up the namespace in dart:io. Dart_Handle namespace_type = - Dart_GetType(io_lib, ToDart("_Namespace"), 0, nullptr); + Dart_GetNonNullableType(io_lib, ToDart("_Namespace"), 0, nullptr); FML_CHECK(!tonic::LogIfError(namespace_type)); Dart_Handle namespace_args[1]; @@ -195,7 +195,8 @@ void InitBuiltinLibrariesForIsolate( FML_CHECK(!tonic::LogIfError(result)); // Set up the namespace in dart:zircon. - namespace_type = Dart_GetType(zircon_lib, ToDart("_Namespace"), 0, nullptr); + namespace_type = + Dart_GetNonNullableType(zircon_lib, ToDart("_Namespace"), 0, nullptr); FML_CHECK(!tonic::LogIfError(namespace_type)); result = Dart_SetField(namespace_type, ToDart("_namespace"), @@ -212,7 +213,7 @@ void InitBuiltinLibrariesForIsolate( // Disable some dart:io operations. Dart_Handle embedder_config_type = - Dart_GetType(io_lib, ToDart("_EmbedderConfig"), 0, nullptr); + Dart_GetNonNullableType(io_lib, ToDart("_EmbedderConfig"), 0, nullptr); FML_CHECK(!tonic::LogIfError(embedder_config_type)); result = diff --git a/shell/platform/fuchsia/dart_runner/dart_component_controller.cc b/shell/platform/fuchsia/dart_runner/dart_component_controller.cc index b03ab6a64eea7..6d60e29779096 100644 --- a/shell/platform/fuchsia/dart_runner/dart_component_controller.cc +++ b/shell/platform/fuchsia/dart_runner/dart_component_controller.cc @@ -400,8 +400,13 @@ bool DartComponentController::Main() { Dart_EnterIsolate(isolate_); Dart_EnterScope(); - Dart_Handle dart_arguments = - Dart_NewListOf(Dart_CoreType_String, arguments.size()); + Dart_Handle corelib = Dart_LookupLibrary(ToDart("dart:core")); + Dart_Handle string_type = + Dart_GetNonNullableType(corelib, ToDart("String"), 0, NULL); + + Dart_Handle dart_arguments = Dart_NewListOfTypeFilled( + string_type, Dart_EmptyString(), arguments.size()); + if (Dart_IsError(dart_arguments)) { FX_LOGF(ERROR, LOG_TAG, "Failed to allocate Dart arguments list: %s", Dart_GetError(dart_arguments)); diff --git a/shell/platform/fuchsia/dart_runner/dart_component_controller_v2.cc b/shell/platform/fuchsia/dart_runner/dart_component_controller_v2.cc index 90d0b9af8e79a..5f9bf9101a77e 100644 --- a/shell/platform/fuchsia/dart_runner/dart_component_controller_v2.cc +++ b/shell/platform/fuchsia/dart_runner/dart_component_controller_v2.cc @@ -412,7 +412,11 @@ bool DartComponentControllerV2::RunDartMain() { // that run in the dart runner are written with main functions that have the // signature `void main(List args)`. In order to ensure that these // components do not break we need to have this stub argument list. - Dart_Handle dart_arguments = Dart_NewListOf(Dart_CoreType_String, 0); + Dart_Handle corelib = Dart_LookupLibrary(ToDart("dart:core")); + Dart_Handle string_type = + Dart_GetNonNullableType(corelib, ToDart("String"), 0, NULL); + Dart_Handle dart_arguments = + Dart_NewListOfTypeFilled(string_type, Dart_EmptyString(), 0); if (Dart_IsError(dart_arguments)) { FX_LOGF(ERROR, LOG_TAG, "Failed to allocate Dart arguments list: %s", diff --git a/shell/platform/fuchsia/dart_runner/service_isolate.cc b/shell/platform/fuchsia/dart_runner/service_isolate.cc index 4906a323bbd2d..6c7ca066c673b 100644 --- a/shell/platform/fuchsia/dart_runner/service_isolate.cc +++ b/shell/platform/fuchsia/dart_runner/service_isolate.cc @@ -73,9 +73,10 @@ void EmbedderInformationCallback(Dart_EmbedderInformation* info) { } // namespace -Dart_Isolate CreateServiceIsolate(const char* uri, - Dart_IsolateFlags* flags, - char** error) { +Dart_Isolate CreateServiceIsolate( + const char* uri, + Dart_IsolateFlags* flags_unused, // These flags are currently unused + char** error) { Dart_SetEmbedderInformationCallback(EmbedderInformationCallback); const uint8_t *vmservice_data = nullptr, *vmservice_instructions = nullptr; @@ -122,10 +123,24 @@ Dart_Isolate CreateServiceIsolate(const char* uri, } #endif + bool is_null_safe = + Dart_DetectNullSafety(nullptr, // script_uri + nullptr, // package_config + nullptr, // original_working_directory + vmservice_data, // snapshot_data + vmservice_instructions, // snapshot_instructions + nullptr, // kernel_buffer + 0u // kernel_buffer_size + ); + + Dart_IsolateFlags flags; + Dart_IsolateFlagsInitialize(&flags); + flags.null_safety = is_null_safe; + auto state = new std::shared_ptr(new tonic::DartState()); Dart_Isolate isolate = Dart_CreateIsolateGroup( uri, DART_VM_SERVICE_ISOLATE_NAME, vmservice_data, vmservice_instructions, - nullptr /* flags */, state, state, error); + &flags, state, state, error); if (!isolate) { FX_LOGF(ERROR, LOG_TAG, "Dart_CreateIsolateGroup failed: %s", *error); return nullptr; diff --git a/shell/platform/fuchsia/flutter/isolate_configurator.cc b/shell/platform/fuchsia/flutter/isolate_configurator.cc index 8b8b8201e98b0..d5bf4dc60abb2 100644 --- a/shell/platform/fuchsia/flutter/isolate_configurator.cc +++ b/shell/platform/fuchsia/flutter/isolate_configurator.cc @@ -53,8 +53,8 @@ void IsolateConfigurator::BindZircon() { Dart_Handle zircon_lib = Dart_LookupLibrary(tonic::ToDart("dart:zircon")); FML_CHECK(!tonic::LogIfError(zircon_lib)); - Dart_Handle namespace_type = - Dart_GetType(zircon_lib, tonic::ToDart("_Namespace"), 0, nullptr); + Dart_Handle namespace_type = Dart_GetNonNullableType( + zircon_lib, tonic::ToDart("_Namespace"), 0, nullptr); FML_CHECK(!tonic::LogIfError(namespace_type)); Dart_Handle result = @@ -70,8 +70,8 @@ void IsolateConfigurator::BindDartIO() { FML_CHECK(!tonic::LogIfError(io_lib)); // Disable dart:io exit() - Dart_Handle embedder_config_type = - Dart_GetType(io_lib, tonic::ToDart("_EmbedderConfig"), 0, nullptr); + Dart_Handle embedder_config_type = Dart_GetNonNullableType( + io_lib, tonic::ToDart("_EmbedderConfig"), 0, nullptr); FML_CHECK(!tonic::LogIfError(embedder_config_type)); Dart_Handle result = Dart_SetField(embedder_config_type, @@ -80,7 +80,7 @@ void IsolateConfigurator::BindDartIO() { // Tell dart:io about the FDIO namespace configured for this instance. Dart_Handle namespace_type = - Dart_GetType(io_lib, tonic::ToDart("_Namespace"), 0, nullptr); + Dart_GetNonNullableType(io_lib, tonic::ToDart("_Namespace"), 0, nullptr); FML_CHECK(!tonic::LogIfError(namespace_type)); Dart_Handle namespace_args[] = {