blob: 3d562b1283dc9ef0813111c71bdbddf4ce08d0f9 [file] [log] [blame]
// Copyright 2013 The Flutter 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_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_ENGINE_H_
#define FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_ENGINE_H_
#include <memory>
#include <vector>
#include "flutter/shell/platform/common/cpp/incoming_message_dispatcher.h"
#include "flutter/shell/platform/windows/flutter_project_bundle.h"
#include "flutter/shell/platform/windows/public/flutter_windows.h"
#include "flutter/shell/platform/windows/win32_task_runner.h"
#include "flutter/shell/platform/windows/window_state.h"
namespace flutter {
class FlutterWindowsView;
// Manages state associated with the underlying FlutterEngine that isn't
// related to its display.
//
// In most cases this will be associated with a FlutterView, but if not will
// run in headless mode.
class FlutterWindowsEngine {
public:
// Creates a new Flutter engine object configured to run |project|.
explicit FlutterWindowsEngine(const FlutterProjectBundle& project);
virtual ~FlutterWindowsEngine();
// Prevent copying.
FlutterWindowsEngine(FlutterWindowsEngine const&) = delete;
FlutterWindowsEngine& operator=(FlutterWindowsEngine const&) = delete;
// Starts running the engine with the given entrypoint. If null, defaults to
// main().
//
// Returns false if the engine couldn't be started.
bool RunWithEntrypoint(const char* entrypoint);
// Stops the engine. This invalidates the pointer returned by engine().
//
// Returns false if stopping the engine fails, or if it was not running.
bool Stop();
// Sets the view that is displaying this engine's content.
void SetView(FlutterWindowsView* view);
// The view displaying this engine's content, if any. This will be null for
// headless engines.
FlutterWindowsView* view() { return view_; }
// Returns the currently configured Plugin Registrar.
FlutterDesktopPluginRegistrarRef GetRegistrar();
FLUTTER_API_SYMBOL(FlutterEngine) engine() { return engine_; }
Win32TaskRunner* task_runner() { return task_runner_.get(); }
// Callback passed to Flutter engine for notifying window of platform
// messages.
void HandlePlatformMessage(const FlutterPlatformMessage*);
private:
// The handle to the embedder.h engine instance.
FLUTTER_API_SYMBOL(FlutterEngine) engine_ = nullptr;
std::unique_ptr<FlutterProjectBundle> project_;
// AOT data, if any.
UniqueAotDataPtr aot_data_;
// The view displaying the content running in this engine, if any.
FlutterWindowsView* view_ = nullptr;
// Task runner for tasks posted from the engine.
std::unique_ptr<Win32TaskRunner> task_runner_;
// Message dispatch manager for messages from engine_.
std::unique_ptr<IncomingMessageDispatcher> message_dispatcher_;
// The plugin registrar handle given to API clients.
std::unique_ptr<FlutterDesktopPluginRegistrar> plugin_registrar_;
};
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_FLUTTER_WINDOWS_ENGINE_H_