Ian McKellar ce4849d743 Allow Flutter apps on Fuchsia to shut down cleanly (flutter/engine#4366)
The UIDartState is now always owned by the isolate and always freed in
the isolate cleanup callback.

In the isolate shutdown callback, if the isolate being shut down is the
main isolate, the RuntimeController is informed which in turn notifies
the RuntimeHolder and thus the ApplicationControllerImpl. The
ApplicationControllerImpl tears down the whole Flutter application.

This fixes Fuchsia bug: MI4-328
2017-11-15 13:28:21 -08:00

56 lines
1.7 KiB
C++

// 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.
#ifndef FLUTTER_RUNTIME_DART_CONTROLLER_H_
#define FLUTTER_RUNTIME_DART_CONTROLLER_H_
#include <memory>
#include <vector>
#include "lib/fxl/macros.h"
#include "lib/tonic/logging/dart_error.h"
#include "third_party/dart/runtime/include/dart_api.h"
namespace blink {
class UIDartState;
class DartController {
public:
DartController();
~DartController();
tonic::DartErrorHandleType RunFromKernel(
const std::vector<uint8_t>& kernel,
const std::string& entrypoint = main_entrypoint_);
tonic::DartErrorHandleType RunFromPrecompiledSnapshot(
const std::string& entrypoint = main_entrypoint_);
tonic::DartErrorHandleType RunFromScriptSnapshot(
const uint8_t* buffer,
size_t size,
const std::string& entrypoint = main_entrypoint_);
tonic::DartErrorHandleType RunFromSource(const std::string& main,
const std::string& packages);
void CreateIsolateFor(const std::string& script_uri,
const uint8_t* isolate_snapshot_data,
const uint8_t* isolate_snapshot_instr,
std::unique_ptr<UIDartState> ui_dart_state);
UIDartState* dart_state() const { return ui_dart_state_; }
private:
bool SendStartMessage(Dart_Handle root_library,
const std::string& entrypoint = main_entrypoint_);
static const std::string main_entrypoint_;
// The DartState associated with the main isolate.
UIDartState* ui_dart_state_;
FXL_DISALLOW_COPY_AND_ASSIGN(DartController);
};
} // namespace blink
#endif // FLUTTER_RUNTIME_DART_CONTROLLER_H_