// 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. #include "include/flutter/plugin_registrar.h" #include #include "binary_messenger_impl.h" #include "texture_registrar_impl.h" namespace flutter { // ===== PluginRegistrar ===== PluginRegistrar::PluginRegistrar(FlutterDesktopPluginRegistrarRef registrar) : registrar_(registrar) { auto core_messenger = FlutterDesktopPluginRegistrarGetMessenger(registrar_); messenger_ = std::make_unique(core_messenger); auto texture_registrar = FlutterDesktopRegistrarGetTextureRegistrar(registrar_); texture_registrar_ = std::make_unique(texture_registrar); } PluginRegistrar::~PluginRegistrar() { // This must always be the first call. ClearPlugins(); // Explicitly cleared to facilitate testing of destruction order. messenger_.reset(); } void PluginRegistrar::AddPlugin(std::unique_ptr plugin) { plugins_.insert(std::move(plugin)); } void PluginRegistrar::ClearPlugins() { plugins_.clear(); } // ===== PluginRegistrarManager ===== // static PluginRegistrarManager* PluginRegistrarManager::GetInstance() { static PluginRegistrarManager* instance = new PluginRegistrarManager(); return instance; } PluginRegistrarManager::PluginRegistrarManager() = default; // static void PluginRegistrarManager::OnRegistrarDestroyed( FlutterDesktopPluginRegistrarRef registrar) { GetInstance()->registrars()->erase(registrar); } } // namespace flutter