| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "sky/engine/bindings/builtin.h" |
| |
| #include "base/logging.h" |
| #include "bin/io_natives.h" |
| #include "dart/runtime/include/dart_api.h" |
| #include "gen/sky/bindings/DartGlobal.h" |
| #include "sky/engine/bindings/builtin_natives.h" |
| #include "sky/engine/bindings/builtin_sky.h" |
| #include "sky/engine/bindings/mojo_natives.h" |
| #include "sky/engine/tonic/dart_builtin.h" |
| |
| namespace blink { |
| namespace { |
| |
| struct LibraryDescriptor { |
| const char* url; |
| bool has_natives; |
| Dart_NativeEntrySymbol native_symbol; |
| Dart_NativeEntryResolver native_resolver; |
| }; |
| |
| const LibraryDescriptor kBuiltinLibraries[] = { |
| /* { url_, has_natives_, native_symbol_, native_resolver_ } */ |
| {"dart:sky_builtin_natives", |
| true, |
| BuiltinNatives::NativeSymbol, |
| BuiltinNatives::NativeLookup}, |
| {"dart:sky", true, skySnapshotSymbolizer, skySnapshotResolver}, |
| {"dart:mojo.internal", true, MojoNativeSymbol, MojoNativeLookup}, |
| {"dart:io", true, dart::bin::IONativeSymbol, dart::bin::IONativeLookup }, |
| }; |
| |
| } // namespace |
| |
| void Builtin::SetNativeResolver(BuiltinLibraryId id) { |
| static_assert(arraysize(kBuiltinLibraries) == kInvalidLibrary, |
| "Unexpected number of builtin libraries"); |
| DCHECK_GE(id, kBuiltinLibrary); |
| DCHECK_LT(id, kInvalidLibrary); |
| if (kBuiltinLibraries[id].has_natives) { |
| Dart_Handle library = DartBuiltin::LookupLibrary(kBuiltinLibraries[id].url); |
| // Setup the native resolver for built in library functions. |
| DART_CHECK_VALID( |
| Dart_SetNativeResolver(library, |
| kBuiltinLibraries[id].native_resolver, |
| kBuiltinLibraries[id].native_symbol)); |
| } |
| } |
| |
| Dart_Handle Builtin::LoadAndCheckLibrary(BuiltinLibraryId id) { |
| static_assert(arraysize(kBuiltinLibraries) == kInvalidLibrary, |
| "Unexpected number of builtin libraries"); |
| DCHECK_GE(id, kBuiltinLibrary); |
| DCHECK_LT(id, kInvalidLibrary); |
| Dart_Handle library = DartBuiltin::LookupLibrary(kBuiltinLibraries[id].url); |
| DART_CHECK_VALID(library); |
| return library; |
| } |
| |
| } // namespace blink |