// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "shell/browser/electron_plugin_info_host_impl.h" #include #include #include #include "base/functional/bind.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/plugin_service.h" #include "content/public/common/content_constants.h" #include "url/gurl.h" #include "url/origin.h" using content::PluginService; using content::WebPluginInfo; namespace electron { ElectronPluginInfoHostImpl::ElectronPluginInfoHostImpl() = default; ElectronPluginInfoHostImpl::~ElectronPluginInfoHostImpl() = default; struct ElectronPluginInfoHostImpl::GetPluginInfo_Params { GURL url; url::Origin main_frame_origin; std::string mime_type; }; void ElectronPluginInfoHostImpl::GetPluginInfo(const GURL& url, const url::Origin& origin, const std::string& mime_type, GetPluginInfoCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); GetPluginInfo_Params params = {url, origin, mime_type}; PluginService::GetInstance()->GetPlugins( base::BindOnce(&ElectronPluginInfoHostImpl::PluginsLoaded, weak_factory_.GetWeakPtr(), params, std::move(callback))); } void ElectronPluginInfoHostImpl::PluginsLoaded( const GetPluginInfo_Params& params, GetPluginInfoCallback callback, const std::vector& plugins) { mojom::PluginInfoPtr output = mojom::PluginInfo::New(); std::vector matching_plugins; std::vector mime_types; PluginService::GetInstance()->GetPluginInfoArray( params.url, params.mime_type, true, &matching_plugins, &mime_types); if (!matching_plugins.empty()) { output->plugin = matching_plugins[0]; output->actual_mime_type = mime_types[0]; } std::move(callback).Run(std::move(output)); } } // namespace electron