// Copyright 2016 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_CONTENT_HANDLER_RUNTIME_HOLDER_H_ #define FLUTTER_CONTENT_HANDLER_RUNTIME_HOLDER_H_ #include #include #include #include "dart-pkg/fuchsia/sdk_ext/fuchsia.h" #include "flutter/assets/asset_provider.h" #include "flutter/assets/directory_asset_bundle.h" #include "flutter/assets/unzipper_provider.h" #include "flutter/assets/zip_asset_store.h" #include "flutter/content_handler/accessibility_bridge.h" #include "flutter/flow/layers/layer_tree.h" #include "flutter/lib/ui/window/viewport_metrics.h" #include "flutter/runtime/runtime_controller.h" #include "flutter/runtime/runtime_delegate.h" #include "lib/app/cpp/application_context.h" #include "lib/app/fidl/application_environment.fidl.h" #include "lib/app/fidl/service_provider.fidl.h" #include "lib/clipboard/fidl/clipboard.fidl.h" #include "lib/fidl/cpp/bindings/binding.h" #include "lib/fxl/functional/closure.h" #include "lib/fxl/macros.h" #include "lib/fxl/memory/weak_ptr.h" #include "lib/ui/flutter/sdk_ext/src/natives.h" #include "lib/ui/input/fidl/input_connection.fidl.h" #include "lib/ui/input/fidl/text_input.fidl.h" #include "lib/ui/views/fidl/view_manager.fidl.h" namespace flutter_runner { class Rasterizer; class RuntimeHolder : public blink::RuntimeDelegate, public mozart::NativesDelegate, public mozart::ViewListener, public mozart::InputListener, public mozart::InputMethodEditorClient { public: RuntimeHolder(); ~RuntimeHolder(); void Init(fdio_ns_t* namespc, std::unique_ptr context, f1dl::InterfaceRequest outgoing_services, std::vector bundle); void CreateView(const std::string& script_uri, f1dl::InterfaceRequest view_owner_request, f1dl::InterfaceRequest services); Dart_Port GetUIIsolateMainPort(); std::string GetUIIsolateName(); int32_t return_code() { return return_code_; } void SetMainIsolateShutdownCallback(std::function callback); private: // |blink::RuntimeDelegate| implementation: std::string DefaultRouteName() override; void ScheduleFrame(bool regenerate_layer_tree = true) override; void Render(std::unique_ptr layer_tree) override; void UpdateSemantics(blink::SemanticsNodeUpdates update) override; void HandlePlatformMessage( fxl::RefPtr message) override; void DidCreateMainIsolate(Dart_Isolate isolate) override; void DidShutdownMainIsolate() override; // |mozart::NativesDelegate| implementation: mozart::View* GetMozartView() override; // |mozart::InputListener| implementation: void OnEvent(mozart::InputEventPtr event, const OnEventCallback& callback) override; // |mozart::ViewListener| implementation: void OnPropertiesChanged( mozart::ViewPropertiesPtr properties, const OnPropertiesChangedCallback& callback) override; // |mozart::InputMethodEditorClient| implementation: void DidUpdateState(mozart::TextInputStatePtr state, mozart::InputEventPtr event) override; void OnAction(mozart::InputMethodAction action) override; fxl::WeakPtr GetWeakPtr(); void InitRootBundle(std::vector bundle); blink::UnzipperProvider GetUnzipperProviderForRootBundle(); bool HandleAssetPlatformMessage(blink::PlatformMessage* message); bool GetAssetAsBuffer(const std::string& name, std::vector* data); bool HandleTextInputPlatformMessage(blink::PlatformMessage* message); bool HandleFlutterPlatformMessage(blink::PlatformMessage* message); void InitDartIoInternal(); void InitFuchsia(); void InitZircon(); void InitMozartInternal(); void PostBeginFrame(); void BeginFrame(); void OnFrameComplete(); void OnRedrawFrame(); void Invalidate(); fdio_ns_t* namespc_; int dirfd_; std::unique_ptr context_; f1dl::InterfaceRequest outgoing_services_; std::vector root_bundle_data_; // TODO(zarah): Remove asset_store_ when flx is completely removed fxl::RefPtr asset_store_; fxl::RefPtr asset_provider_; void* dylib_handle_ = nullptr; std::unique_ptr rasterizer_; std::unique_ptr runtime_; blink::ViewportMetrics viewport_metrics_; mozart::ViewManagerPtr view_manager_; f1dl::Binding view_listener_binding_; f1dl::Binding input_listener_binding_; mozart::InputConnectionPtr input_connection_; mozart::ViewPtr view_; std::unordered_set down_pointers_; mozart::InputMethodEditorPtr input_method_editor_; f1dl::Binding text_input_binding_; int current_text_input_client_ = 0; fxl::TimePoint last_begin_frame_time_; bool frame_outstanding_ = false; bool frame_scheduled_ = false; bool frame_rendering_ = false; int32_t return_code_ = 0; fxl::WeakPtrFactory weak_factory_; std::unique_ptr accessibility_bridge_; std::function main_isolate_shutdown_callback_; modular::ClipboardPtr clipboard_; FXL_DISALLOW_COPY_AND_ASSIGN(RuntimeHolder); }; } // namespace flutter_runner #endif // FLUTTER_CONTENT_HANDLER_RUNTIME_HOLDER_H_