blob: df6c694e735c4bb0e07a3e78249ceb1c88b92ca8 [file] [log] [blame]
// 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