Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions lib/ui/dart_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,29 @@ namespace blink {
namespace {

static tonic::DartLibraryNatives* g_natives;
static tonic::DartLibraryNatives* g_natives_secondary;

Dart_NativeFunction GetNativeFunction(Dart_Handle name,
int argument_count,
bool* auto_setup_scope) {
return g_natives->GetNativeFunction(name, argument_count, auto_setup_scope);
}

Dart_NativeFunction GetNativeFunctionSecondary(Dart_Handle name,
int argument_count,
bool* auto_setup_scope) {
return g_natives_secondary->GetNativeFunction(name, argument_count,
auto_setup_scope);
}

const uint8_t* GetSymbol(Dart_NativeFunction native_function) {
return g_natives->GetSymbol(native_function);
}

const uint8_t* GetSymbolSecondary(Dart_NativeFunction native_function) {
return g_natives_secondary->GetSymbol(native_function);
}

} // namespace

void DartUI::InitForGlobal() {
Expand Down Expand Up @@ -73,13 +85,20 @@ void DartUI::InitForGlobal() {
SemanticsUpdateBuilder::RegisterNatives(g_natives);
Vertices::RegisterNatives(g_natives);
Window::RegisterNatives(g_natives);

// Secondary isolates do not provide UI-related APIs.
g_natives_secondary = new tonic::DartLibraryNatives();
DartRuntimeHooks::RegisterNatives(g_natives_secondary);
}
}

void DartUI::InitForIsolate() {
void DartUI::InitForIsolate(bool is_root_isolate) {
FML_DCHECK(g_natives);
auto get_native_function =
is_root_isolate ? GetNativeFunction : GetNativeFunctionSecondary;
auto get_symbol = is_root_isolate ? GetSymbol : GetSymbolSecondary;
DART_CHECK_VALID(Dart_SetNativeResolver(Dart_LookupLibrary(ToDart("dart:ui")),
GetNativeFunction, GetSymbol));
get_native_function, get_symbol));
}

} // namespace blink
2 changes: 1 addition & 1 deletion lib/ui/dart_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace blink {
class DartUI {
public:
static void InitForGlobal();
static void InitForIsolate();
static void InitForIsolate(bool is_root_isolate);

private:
FML_DISALLOW_IMPLICIT_CONSTRUCTORS(DartUI);
Expand Down
2 changes: 1 addition & 1 deletion runtime/dart_isolate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ bool DartIsolate::LoadLibraries(bool is_root_isolate) {

DartIO::InitForIsolate();

DartUI::InitForIsolate();
DartUI::InitForIsolate(is_root_isolate);

const bool is_service_isolate = Dart_IsServiceIsolate(isolate());

Expand Down