blob: 021d216e00df6d5c4b75e1905a8ae97f0bae5611 [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.
#ifndef FLUTTER_LIB_UI_UI_DART_STATE_H_
#define FLUTTER_LIB_UI_UI_DART_STATE_H_
#include <utility>
#include "dart/runtime/include/dart_api.h"
#include "flutter/sky/engine/wtf/RefPtr.h"
#include "lib/ftl/build_config.h"
#include "lib/tonic/dart_persistent_value.h"
#include "lib/tonic/dart_state.h"
namespace blink {
struct DartJniIsolateData;
class FontSelector;
class Window;
class IsolateClient {
public:
virtual void DidCreateSecondaryIsolate(Dart_Isolate isolate) = 0;
protected:
virtual ~IsolateClient();
};
class UIDartState : public tonic::DartState {
public:
UIDartState(IsolateClient* isolate_client, std::unique_ptr<Window> window);
~UIDartState() override;
static UIDartState* Current();
UIDartState* CreateForChildIsolate();
IsolateClient* isolate_client() { return isolate_client_; }
Dart_Port main_port() const { return main_port_; }
const std::string& debug_name() const { return debug_name_; }
Window* window() const { return window_.get(); }
#if defined(OS_ANDROID)
DartJniIsolateData* jni_data();
#endif
void set_font_selector(PassRefPtr<FontSelector> selector);
PassRefPtr<FontSelector> font_selector();
private:
void DidSetIsolate() override;
IsolateClient* isolate_client_;
Dart_Port main_port_;
std::string debug_name_;
std::unique_ptr<Window> window_;
RefPtr<FontSelector> font_selector_;
#if defined(OS_ANDROID)
std::unique_ptr<DartJniIsolateData> jni_data_;
#endif
};
} // namespace blink
#endif // FLUTTER_LIB_UI_UI_DART_STATE_H_