|  | // Copyright 2017 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "chrome/browser/net/net_export_helper.h" | 
|  |  | 
|  | #include <memory> | 
|  | #include <utility> | 
|  |  | 
|  | #include "base/values.h" | 
|  | #include "build/build_config.h" | 
|  | #include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h" | 
|  | #include "chrome/browser/profiles/profile.h" | 
|  | #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" | 
|  | #include "extensions/buildflags/buildflags.h" | 
|  |  | 
|  | #if BUILDFLAG(ENABLE_EXTENSIONS) | 
|  | #include "chrome/browser/ui/webui/extensions/extension_basic_info.h" | 
|  | #include "extensions/browser/extension_registrar.h" | 
|  | #include "extensions/browser/extension_registry.h" | 
|  | #include "extensions/common/extension_set.h" | 
|  | #endif | 
|  |  | 
|  | #if BUILDFLAG(IS_WIN) | 
|  | #include "base/strings/string_util.h" | 
|  | #include "base/strings/utf_string_conversions.h" | 
|  | #include "chrome/browser/net/service_providers_win.h" | 
|  | #endif | 
|  |  | 
|  | namespace chrome_browser_net { | 
|  |  | 
|  | base::Value::Dict GetPrerenderInfo(Profile* profile) { | 
|  | prerender::NoStatePrefetchManager* no_state_prefetch_manager = | 
|  | prerender::NoStatePrefetchManagerFactory::GetForBrowserContext(profile); | 
|  | if (no_state_prefetch_manager) { | 
|  | return no_state_prefetch_manager->CopyAsDict(); | 
|  | } else { | 
|  | base::Value::Dict dict; | 
|  | dict.Set("enabled", false); | 
|  | dict.Set("omnibox_enabled", false); | 
|  | return dict; | 
|  | } | 
|  | } | 
|  |  | 
|  | base::Value::List GetExtensionInfo(Profile* profile) { | 
|  | base::Value::List extension_list; | 
|  | #if BUILDFLAG(ENABLE_EXTENSIONS) | 
|  | auto* extension_registrar = extensions::ExtensionRegistrar::Get(profile); | 
|  | if (extension_registrar) { | 
|  | const extensions::ExtensionSet extensions = | 
|  | extensions::ExtensionRegistry::Get(profile) | 
|  | ->GenerateInstalledExtensionsSet(); | 
|  | for (const auto& extension : extensions) { | 
|  | base::Value::Dict extension_info; | 
|  | bool enabled = extension_registrar->IsExtensionEnabled(extension->id()); | 
|  | extensions::GetExtensionBasicInfo(extension.get(), enabled, | 
|  | &extension_info); | 
|  | extension_list.Append(std::move(extension_info)); | 
|  | } | 
|  | } | 
|  | #endif | 
|  | return extension_list; | 
|  | } | 
|  |  | 
|  | #if BUILDFLAG(IS_WIN) | 
|  | base::Value::Dict GetWindowsServiceProviders() { | 
|  | base::Value::Dict service_providers; | 
|  |  | 
|  | WinsockLayeredServiceProviderList layered_providers; | 
|  | GetWinsockLayeredServiceProviders(&layered_providers); | 
|  | base::Value::List layered_provider_list; | 
|  | for (const auto& provider : layered_providers) { | 
|  | base::Value::Dict service_dict; | 
|  | service_dict.Set("name", base::AsString16(provider.name)); | 
|  | service_dict.Set("version", provider.version); | 
|  | service_dict.Set("chain_length", provider.chain_length); | 
|  | service_dict.Set("socket_type", provider.socket_type); | 
|  | service_dict.Set("socket_protocol", provider.socket_protocol); | 
|  | service_dict.Set("path", base::WideToUTF8(provider.path)); | 
|  |  | 
|  | layered_provider_list.Append(std::move(service_dict)); | 
|  | } | 
|  | service_providers.Set("service_providers", std::move(layered_provider_list)); | 
|  |  | 
|  | WinsockNamespaceProviderList namespace_providers; | 
|  | GetWinsockNamespaceProviders(&namespace_providers); | 
|  | base::Value::List namespace_list; | 
|  | for (const auto& provider : namespace_providers) { | 
|  | base::Value::Dict namespace_dict; | 
|  | namespace_dict.Set("name", base::AsString16(provider.name)); | 
|  | namespace_dict.Set("active", provider.active); | 
|  | namespace_dict.Set("version", provider.version); | 
|  | namespace_dict.Set("type", provider.type); | 
|  |  | 
|  | namespace_list.Append(std::move(namespace_dict)); | 
|  | } | 
|  | service_providers.Set("namespace_providers", std::move(namespace_list)); | 
|  |  | 
|  | return service_providers; | 
|  | } | 
|  | #endif | 
|  |  | 
|  | }  // namespace chrome_browser_net |