Skip to content

Commit

Permalink
Do not register UI-related native functions in secondary isolates (fl…
Browse files Browse the repository at this point in the history
  • Loading branch information
jason-simmons committed Oct 3, 2018
1 parent 19c135c commit 69ae569
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
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

0 comments on commit 69ae569

Please sign in to comment.