@@ -35,17 +35,29 @@ namespace blink {
3535namespace {
3636
3737static tonic::DartLibraryNatives* g_natives;
38+ static tonic::DartLibraryNatives* g_natives_secondary;
3839
3940Dart_NativeFunction GetNativeFunction (Dart_Handle name,
4041 int argument_count,
4142 bool * auto_setup_scope) {
4243 return g_natives->GetNativeFunction (name, argument_count, auto_setup_scope);
4344}
4445
46+ Dart_NativeFunction GetNativeFunctionSecondary (Dart_Handle name,
47+ int argument_count,
48+ bool * auto_setup_scope) {
49+ return g_natives_secondary->GetNativeFunction (name, argument_count,
50+ auto_setup_scope);
51+ }
52+
4553const uint8_t * GetSymbol (Dart_NativeFunction native_function) {
4654 return g_natives->GetSymbol (native_function);
4755}
4856
57+ const uint8_t * GetSymbolSecondary (Dart_NativeFunction native_function) {
58+ return g_natives_secondary->GetSymbol (native_function);
59+ }
60+
4961} // namespace
5062
5163void DartUI::InitForGlobal () {
@@ -73,13 +85,20 @@ void DartUI::InitForGlobal() {
7385 SemanticsUpdateBuilder::RegisterNatives (g_natives);
7486 Vertices::RegisterNatives (g_natives);
7587 Window::RegisterNatives (g_natives);
88+
89+ // Secondary isolates do not provide UI-related APIs.
90+ g_natives_secondary = new tonic::DartLibraryNatives ();
91+ DartRuntimeHooks::RegisterNatives (g_natives_secondary);
7692 }
7793}
7894
79- void DartUI::InitForIsolate () {
95+ void DartUI::InitForIsolate (bool is_root_isolate ) {
8096 FML_DCHECK (g_natives);
97+ auto get_native_function =
98+ is_root_isolate ? GetNativeFunction : GetNativeFunctionSecondary;
99+ auto get_symbol = is_root_isolate ? GetSymbol : GetSymbolSecondary;
81100 DART_CHECK_VALID (Dart_SetNativeResolver (Dart_LookupLibrary (ToDart (" dart:ui" )),
82- GetNativeFunction, GetSymbol ));
101+ get_native_function, get_symbol ));
83102}
84103
85104} // namespace blink
0 commit comments