// 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_APPLICATION_IMPL_H_ #define FLUTTER_CONTENT_HANDLER_APPLICATION_IMPL_H_ #include #include #include "lib/app/fidl/application_controller.fidl.h" #include "lib/app/fidl/application_runner.fidl.h" #include "lib/app/fidl/service_provider.fidl.h" #include "lib/fidl/cpp/bindings/binding.h" #include "lib/fidl/cpp/bindings/binding_set.h" #include "lib/fxl/macros.h" #include "lib/fxl/synchronization/waitable_event.h" #include "lib/svc/cpp/service_provider_bridge.h" #include "lib/ui/views/fidl/view_provider.fidl.h" #include "third_party/dart/runtime/include/dart_api.h" namespace flutter_runner { class App; class RuntimeHolder; class ApplicationControllerImpl : public component::ApplicationController, public mozart::ViewProvider { public: ApplicationControllerImpl( App* app, component::ApplicationPackagePtr application, component::ApplicationStartupInfoPtr startup_info, f1dl::InterfaceRequest controller); ~ApplicationControllerImpl() override; // |component::ApplicationController| implementation void Kill() override; void Detach() override; void Wait(const WaitCallback& callback) override; // |mozart::ViewProvider| implementation void CreateView( f1dl::InterfaceRequest view_owner_request, f1dl::InterfaceRequest services) override; Dart_Port GetUIIsolateMainPort(); std::string GetUIIsolateName(); private: void StartRuntimeIfReady(); void SendReturnCode(int32_t return_code); fdio_ns_t* SetupNamespace(const component::FlatNamespacePtr& flat); App* app_; f1dl::Binding binding_; component::ServiceProviderBridge service_provider_bridge_; f1dl::BindingSet view_provider_bindings_; std::string url_; std::unique_ptr runtime_holder_; std::vector wait_callbacks_; FXL_DISALLOW_COPY_AND_ASSIGN(ApplicationControllerImpl); }; } // namespace flutter_runner #endif // FLUTTER_CONTENT_HANDLER_APPLICATION_IMPL_H_