// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBLAYER_BROWSER_SYSTEM_NETWORK_CONTEXT_MANAGER_H_ #define WEBLAYER_BROWSER_SYSTEM_NETWORK_CONTEXT_MANAGER_H_ #include "base/memory/scoped_refptr.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/public/mojom/network_context.mojom.h" #include "services/network/public/mojom/network_service.mojom.h" namespace network { class SharedURLLoaderFactory; } // namespace network namespace net_log { class NetExportFileWriter; } namespace weblayer { // Manages a system-wide network context that's not tied to a profile. class SystemNetworkContextManager { public: // Creates the global instance of SystemNetworkContextManager. static SystemNetworkContextManager* CreateInstance( const std::string& user_agent); // Checks if the global SystemNetworkContextManager has been created. static bool HasInstance(); // Gets the global SystemNetworkContextManager instance or DCHECKs if there // isn't one.. static SystemNetworkContextManager* GetInstance(); // Destroys the global SystemNetworkContextManager instance. static void DeleteInstance(); static network::mojom::NetworkContextParamsPtr CreateDefaultNetworkContextParams(const std::string& user_agent); static void ConfigureDefaultNetworkContextParams( network::mojom::NetworkContextParams* network_context_params, const std::string& user_agent); SystemNetworkContextManager(const SystemNetworkContextManager&) = delete; SystemNetworkContextManager& operator=(const SystemNetworkContextManager&) = delete; ~SystemNetworkContextManager(); // Returns the System NetworkContext. Does any initialization of the // NetworkService that may be needed when first called. network::mojom::NetworkContext* GetSystemNetworkContext(); // Called when content creates a NetworkService. Creates the // system NetworkContext, if the network service is enabled. void OnNetworkServiceCreated(network::mojom::NetworkService* network_service); // Returns a SharedURLLoaderFactory owned by the SystemNetworkContextManager // that is backed by the SystemNetworkContext. // NOTE: This factory assumes that the network service is running in the // browser process, which is a valid assumption for Android. If WebLayer is // productionized beyond Android, it will need to be extended to handle // network service crashes. scoped_refptr GetSharedURLLoaderFactory(); // Returns a shared global NetExportFileWriter instance, used by net-export. // It lives here so it can outlive chrome://net-export/ if the tab is closed // or destroyed, and so that it's destroyed before Mojo is shut down. net_log::NetExportFileWriter* GetNetExportFileWriter(); private: explicit SystemNetworkContextManager(const std::string& user_agent); network::mojom::NetworkContextParamsPtr CreateSystemNetworkContextManagerParams(); std::string user_agent_; mojo::Remote url_loader_factory_; scoped_refptr shared_url_loader_factory_; mojo::Remote system_network_context_; // Initialized on first access. std::unique_ptr net_export_file_writer_; }; } // namespace weblayer #endif // WEBLAYER_BROWSER_SYSTEM_NETWORK_CONTEXT_MANAGER_H_