// 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/dart_callback.h" #include "sky/engine/tonic/dart_converter.h" #include "sky/engine/tonic/dart_error.h" #include "sky/engine/tonic/dart_invoke.h" #include "sky/engine/tonic/dart_state.h" namespace blink { DartCallback::DartCallback(DartState* dart_state, Dart_Handle callback, Dart_Handle& exception) : callback_(dart_state, callback) { if (!Dart_IsClosure(callback)) { exception = ToDart("Callback must be a function"); callback_.Clear(); } } DartCallback::~DartCallback() { } bool DartCallback::IsIsolateAlive() const { return !!callback_.dart_state(); } Dart_Isolate DartCallback::GetIsolate() const { return callback_.dart_state()->isolate(); } bool DartCallback::handleEvent(int argc, Dart_Handle* argv) { DartInvokeAppClosure(callback_.value(), argc, argv); return true; } } // namespace blink