blob: f6a13ef482cd23887f50d2deaae881738dd2c5f8 [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_RUNTIME_RUNTIME_CONTROLLER_H_
#define FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
#include <memory>
#include "flutter/flow/layers/layer_tree.h"
#include "flutter/lib/ui/ui_dart_state.h"
#include "flutter/lib/ui/window/window.h"
#include "flutter/services/engine/sky_engine.mojom.h"
#include "flutter/services/pointer/pointer.mojom.h"
#include "lib/ftl/macros.h"
namespace blink {
class DartController;
class DartLibraryProvider;
class Scene;
class RuntimeDelegate;
class View;
class Window;
class RuntimeController : public WindowClient, public IsolateClient {
public:
static std::unique_ptr<RuntimeController> Create(RuntimeDelegate* client);
~RuntimeController();
void CreateDartController(const std::string& script_uri);
DartController* dart_controller() const { return dart_controller_.get(); }
void SetViewportMetrics(const sky::ViewportMetricsPtr& metrics);
void SetLocale(const std::string& language_code,
const std::string& country_code);
void PushRoute(const std::string& route);
void PopRoute();
void BeginFrame(ftl::TimePoint frame_time);
void HandlePointerPacket(const pointer::PointerPacketPtr& packet);
void OnAppLifecycleStateChanged(sky::AppLifecycleState state);
Dart_Port GetMainPort();
std::string GetIsolateName();
private:
explicit RuntimeController(RuntimeDelegate* client);
Window* GetWindow();
void ScheduleFrame() override;
void Render(Scene* scene) override;
void DidCreateSecondaryIsolate(Dart_Isolate isolate) override;
RuntimeDelegate* client_;
sky::ViewportMetricsPtr viewport_metrics_;
std::string language_code_;
std::string country_code_;
std::unique_ptr<DartController> dart_controller_;
FTL_DISALLOW_COPY_AND_ASSIGN(RuntimeController);
};
} // namespace blink
#endif // FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_