| // 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 <iostream> | |
| #include <map> | |
| #include "binary_messenger_impl.h" | |
| #include "include/flutter/engine_method_result.h" | |
| #include "include/flutter/method_channel.h" | |
| #include "texture_registrar_impl.h" | |
| namespace flutter { | |
| // ===== PluginRegistrar ===== | |
| PluginRegistrar::PluginRegistrar(FlutterDesktopPluginRegistrarRef registrar) | |
| : registrar_(registrar) { | |
| auto core_messenger = FlutterDesktopPluginRegistrarGetMessenger(registrar_); | |
| messenger_ = std::make_unique<BinaryMessengerImpl>(core_messenger); | |
| auto texture_registrar = | |
| FlutterDesktopRegistrarGetTextureRegistrar(registrar_); | |
| texture_registrar_ = | |
| std::make_unique<TextureRegistrarImpl>(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> 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 |