| // 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 |