refactor: Enable network service (Part 1) (#17431)
* Convert InspectableWebContentsImpl::LoadNetworkResource to SimpleURLLoader https://bugs.chromium.org/p/chromium/issues/detail?id=721408 * Plumb creation of network context with the service
This commit is contained in:
parent
4ec2f8b67b
commit
6c20c6e668
18 changed files with 469 additions and 172 deletions
|
@ -26,6 +26,8 @@
|
|||
#include "atom/browser/io_thread.h"
|
||||
#include "atom/browser/media/media_capture_devices_dispatcher.h"
|
||||
#include "atom/browser/native_window.h"
|
||||
#include "atom/browser/net/network_context_service.h"
|
||||
#include "atom/browser/net/network_context_service_factory.h"
|
||||
#include "atom/browser/notifications/notification_presenter.h"
|
||||
#include "atom/browser/notifications/platform_notification_service.h"
|
||||
#include "atom/browser/session_preferences.h"
|
||||
|
@ -72,6 +74,7 @@
|
|||
#include "ppapi/host/ppapi_host.h"
|
||||
#include "printing/buildflags/buildflags.h"
|
||||
#include "services/device/public/cpp/geolocation/location_provider.h"
|
||||
#include "services/network/public/cpp/features.h"
|
||||
#include "services/network/public/cpp/resource_request_body.h"
|
||||
#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
|
@ -686,7 +689,20 @@ network::mojom::NetworkContextPtr AtomBrowserClient::CreateNetworkContext(
|
|||
const base::FilePath& /*relative_partition_path*/) {
|
||||
if (!browser_context)
|
||||
return nullptr;
|
||||
return static_cast<AtomBrowserContext*>(browser_context)->GetNetworkContext();
|
||||
|
||||
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return NetworkContextServiceFactory::GetForContext(browser_context)
|
||||
->CreateNetworkContext();
|
||||
} else {
|
||||
return static_cast<AtomBrowserContext*>(browser_context)
|
||||
->GetNetworkContext();
|
||||
}
|
||||
}
|
||||
|
||||
network::mojom::NetworkContext* AtomBrowserClient::GetSystemNetworkContext() {
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
DCHECK(g_browser_process->system_network_context_manager());
|
||||
return g_browser_process->system_network_context_manager()->GetContext();
|
||||
}
|
||||
|
||||
void AtomBrowserClient::RegisterOutOfProcessServices(
|
||||
|
@ -872,8 +888,10 @@ AtomBrowserClient::GetSystemSharedURLLoaderFactory() {
|
|||
|
||||
void AtomBrowserClient::OnNetworkServiceCreated(
|
||||
network::mojom::NetworkService* network_service) {
|
||||
if (!g_browser_process)
|
||||
if (!g_browser_process ||
|
||||
!base::FeatureList::IsEnabled(network::features::kNetworkService))
|
||||
return;
|
||||
|
||||
g_browser_process->system_network_context_manager()->OnNetworkServiceCreated(
|
||||
network_service);
|
||||
}
|
||||
|
|
|
@ -137,6 +137,7 @@ class AtomBrowserClient : public content::ContentBrowserClient,
|
|||
content::BrowserContext* browser_context,
|
||||
bool in_memory,
|
||||
const base::FilePath& relative_partition_path) override;
|
||||
network::mojom::NetworkContext* GetSystemNetworkContext() override;
|
||||
void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override;
|
||||
base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
|
||||
base::StringPiece name) override;
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "content/public/browser/browser_thread.h"
|
||||
#include "content/public/browser/storage_partition.h"
|
||||
#include "net/base/escape.h"
|
||||
#include "services/network/public/cpp/features.h"
|
||||
|
||||
using content::BrowserThread;
|
||||
|
||||
|
@ -92,8 +93,12 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
|
|||
// Initialize Pref Registry.
|
||||
InitPrefs();
|
||||
|
||||
proxy_config_monitor_ = std::make_unique<ProxyConfigMonitor>(prefs_.get());
|
||||
io_handle_ = new URLRequestContextGetter::Handle(weak_factory_.GetWeakPtr());
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
proxy_config_monitor_ = std::make_unique<ProxyConfigMonitor>(prefs_.get());
|
||||
io_handle_ =
|
||||
new URLRequestContextGetter::Handle(weak_factory_.GetWeakPtr());
|
||||
}
|
||||
|
||||
cookie_change_notifier_ = std::make_unique<CookieChangeNotifier>(this);
|
||||
|
||||
BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive(this);
|
||||
|
@ -103,7 +108,13 @@ AtomBrowserContext::~AtomBrowserContext() {
|
|||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
NotifyWillBeDestroyed(this);
|
||||
ShutdownStoragePartitions();
|
||||
io_handle_->ShutdownOnUIThread();
|
||||
|
||||
BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE,
|
||||
std::move(resource_context_));
|
||||
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService))
|
||||
io_handle_->ShutdownOnUIThread();
|
||||
|
||||
// Notify any keyed services of browser context destruction.
|
||||
BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
|
||||
this);
|
||||
|
@ -145,22 +156,42 @@ void AtomBrowserContext::SetUserAgent(const std::string& user_agent) {
|
|||
net::URLRequestContextGetter* AtomBrowserContext::CreateRequestContext(
|
||||
content::ProtocolHandlerMap* protocol_handlers,
|
||||
content::URLRequestInterceptorScopedVector protocol_interceptors) {
|
||||
return io_handle_
|
||||
->CreateMainRequestContextGetter(protocol_handlers,
|
||||
std::move(protocol_interceptors))
|
||||
.get();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return io_handle_
|
||||
->CreateMainRequestContextGetter(protocol_handlers,
|
||||
std::move(protocol_interceptors))
|
||||
.get();
|
||||
} else {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
net::URLRequestContextGetter* AtomBrowserContext::CreateMediaRequestContext() {
|
||||
return io_handle_->GetMainRequestContextGetter().get();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return io_handle_->GetMainRequestContextGetter().get();
|
||||
} else {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
net::URLRequestContextGetter* AtomBrowserContext::GetRequestContext() {
|
||||
return GetDefaultStoragePartition(this)->GetURLRequestContext();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return GetDefaultStoragePartition(this)->GetURLRequestContext();
|
||||
} else {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
network::mojom::NetworkContextPtr AtomBrowserContext::GetNetworkContext() {
|
||||
return io_handle_->GetNetworkContext();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return io_handle_->GetNetworkContext();
|
||||
} else {
|
||||
NOTREACHED();
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
base::FilePath AtomBrowserContext::GetPath() const {
|
||||
|
@ -180,7 +211,13 @@ int AtomBrowserContext::GetMaxCacheSize() const {
|
|||
}
|
||||
|
||||
content::ResourceContext* AtomBrowserContext::GetResourceContext() {
|
||||
return io_handle_->GetResourceContext();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
return io_handle_->GetResourceContext();
|
||||
} else {
|
||||
if (!resource_context_)
|
||||
resource_context_.reset(new content::ResourceContext);
|
||||
return resource_context_.get();
|
||||
}
|
||||
}
|
||||
|
||||
std::string AtomBrowserContext::GetMediaDeviceIDSalt() {
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "base/memory/weak_ptr.h"
|
||||
#include "chrome/browser/net/proxy_config_monitor.h"
|
||||
#include "content/public/browser/browser_context.h"
|
||||
#include "content/public/browser/resource_context.h"
|
||||
|
||||
class PrefRegistrySimple;
|
||||
class PrefService;
|
||||
|
@ -148,6 +149,7 @@ class AtomBrowserContext
|
|||
URLRequestContextGetter::Handle* io_handle_;
|
||||
ValueMapPrefStore* in_memory_pref_store_;
|
||||
|
||||
std::unique_ptr<content::ResourceContext> resource_context_;
|
||||
std::unique_ptr<CookieChangeNotifier> cookie_change_notifier_;
|
||||
std::unique_ptr<PrefService> prefs_;
|
||||
std::unique_ptr<AtomDownloadManagerDelegate> download_manager_delegate_;
|
||||
|
|
|
@ -95,8 +95,8 @@ void BrowserProcessImpl::PreCreateThreads(
|
|||
// Must be created before the IOThread.
|
||||
// Once IOThread class is no longer needed,
|
||||
// this can be created on first use.
|
||||
system_network_context_manager_ =
|
||||
std::make_unique<SystemNetworkContextManager>();
|
||||
if (!SystemNetworkContextManager::GetInstance())
|
||||
SystemNetworkContextManager::CreateInstance(local_state_.get());
|
||||
|
||||
net_log_ = std::make_unique<net_log::ChromeNetLog>();
|
||||
// start net log trace if --log-net-log is passed in the command line.
|
||||
|
@ -110,11 +110,11 @@ void BrowserProcessImpl::PreCreateThreads(
|
|||
}
|
||||
}
|
||||
// Initialize net log file exporter.
|
||||
system_network_context_manager_->GetNetExportFileWriter()->Initialize();
|
||||
system_network_context_manager()->GetNetExportFileWriter()->Initialize();
|
||||
|
||||
// Manage global state of net and other IO thread related.
|
||||
io_thread_ = std::make_unique<IOThread>(
|
||||
net_log_.get(), system_network_context_manager_.get());
|
||||
net_log_.get(), SystemNetworkContextManager::GetInstance());
|
||||
}
|
||||
|
||||
void BrowserProcessImpl::PostDestroyThreads() {
|
||||
|
@ -122,8 +122,11 @@ void BrowserProcessImpl::PostDestroyThreads() {
|
|||
}
|
||||
|
||||
void BrowserProcessImpl::PostMainMessageLoopRun() {
|
||||
if (local_state_)
|
||||
local_state_->CommitPendingWrite();
|
||||
|
||||
// This expects to be destroyed before the task scheduler is torn down.
|
||||
system_network_context_manager_.reset();
|
||||
SystemNetworkContextManager::DeleteInstance();
|
||||
}
|
||||
|
||||
bool BrowserProcessImpl::IsShuttingDown() {
|
||||
|
@ -189,8 +192,8 @@ IOThread* BrowserProcessImpl::io_thread() {
|
|||
|
||||
SystemNetworkContextManager*
|
||||
BrowserProcessImpl::system_network_context_manager() {
|
||||
DCHECK(system_network_context_manager_.get());
|
||||
return system_network_context_manager_.get();
|
||||
DCHECK(SystemNetworkContextManager::GetInstance());
|
||||
return SystemNetworkContextManager::GetInstance();
|
||||
}
|
||||
|
||||
network::NetworkQualityTracker* BrowserProcessImpl::network_quality_tracker() {
|
||||
|
|
|
@ -122,7 +122,6 @@ class BrowserProcessImpl : public BrowserProcess {
|
|||
std::unique_ptr<PrefService> local_state_;
|
||||
std::unique_ptr<IOThread> io_thread_;
|
||||
std::unique_ptr<net_log::ChromeNetLog> net_log_;
|
||||
std::unique_ptr<SystemNetworkContextManager> system_network_context_manager_;
|
||||
std::string locale_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(BrowserProcessImpl);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "net/proxy_resolution/proxy_resolution_service.h"
|
||||
#include "net/url_request/url_request_context.h"
|
||||
#include "services/network/network_service.h"
|
||||
#include "services/network/public/cpp/features.h"
|
||||
#include "services/network/url_request_context_builder_mojo.h"
|
||||
|
||||
using content::BrowserThread;
|
||||
|
@ -35,31 +36,35 @@ IOThread::~IOThread() {
|
|||
}
|
||||
|
||||
void IOThread::Init() {
|
||||
std::unique_ptr<network::URLRequestContextBuilderMojo> builder =
|
||||
std::make_unique<network::URLRequestContextBuilderMojo>();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
|
||||
std::unique_ptr<network::URLRequestContextBuilderMojo> builder =
|
||||
std::make_unique<network::URLRequestContextBuilderMojo>();
|
||||
|
||||
auto cert_verifier = std::make_unique<net::CachingCertVerifier>(
|
||||
std::make_unique<net::MultiThreadedCertVerifier>(
|
||||
net::CertVerifyProc::CreateDefault()));
|
||||
builder->SetCertVerifier(std::move(cert_verifier));
|
||||
auto cert_verifier = std::make_unique<net::CachingCertVerifier>(
|
||||
std::make_unique<net::MultiThreadedCertVerifier>(
|
||||
net::CertVerifyProc::CreateDefault()));
|
||||
builder->SetCertVerifier(std::move(cert_verifier));
|
||||
|
||||
// Create the network service, so that shared host resolver
|
||||
// gets created which is required to set the auth preferences below.
|
||||
network::NetworkService* network_service = content::GetNetworkServiceImpl();
|
||||
network_service->SetUpHttpAuth(std::move(http_auth_static_params_));
|
||||
network_service->ConfigureHttpAuthPrefs(std::move(http_auth_dynamic_params_));
|
||||
// Create the network service, so that shared host resolver
|
||||
// gets created which is required to set the auth preferences below.
|
||||
network::NetworkService* network_service = content::GetNetworkServiceImpl();
|
||||
network_service->SetUpHttpAuth(std::move(http_auth_static_params_));
|
||||
network_service->ConfigureHttpAuthPrefs(
|
||||
std::move(http_auth_dynamic_params_));
|
||||
|
||||
system_network_context_ =
|
||||
network_service
|
||||
->CreateNetworkContextWithBuilder(std::move(network_context_request_),
|
||||
std::move(network_context_params_),
|
||||
std::move(builder),
|
||||
&system_request_context_)
|
||||
.release();
|
||||
system_network_context_ =
|
||||
network_service
|
||||
->CreateNetworkContextWithBuilder(
|
||||
std::move(network_context_request_),
|
||||
std::move(network_context_params_), std::move(builder),
|
||||
&system_request_context_)
|
||||
.release();
|
||||
}
|
||||
}
|
||||
|
||||
void IOThread::CleanUp() {
|
||||
system_request_context_->proxy_resolution_service()->OnShutdown();
|
||||
if (!base::FeatureList::IsEnabled(network::features::kNetworkService))
|
||||
system_request_context_->proxy_resolution_service()->OnShutdown();
|
||||
|
||||
if (net_log_)
|
||||
net_log_->ShutDownBeforeTaskScheduler();
|
||||
|
|
94
atom/browser/net/network_context_service.cc
Normal file
94
atom/browser/net/network_context_service.cc
Normal file
|
@ -0,0 +1,94 @@
|
|||
// Copyright (c) 2019 GitHub, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "atom/browser/net/network_context_service.h"
|
||||
|
||||
#include "atom/browser/atom_browser_client.h"
|
||||
#include "atom/browser/browser_process_impl.h"
|
||||
#include "atom/browser/net/system_network_context_manager.h"
|
||||
#include "chrome/common/chrome_constants.h"
|
||||
#include "content/public/browser/network_service_instance.h"
|
||||
#include "services/network/network_service.h"
|
||||
|
||||
namespace atom {
|
||||
|
||||
NetworkContextService::NetworkContextService(content::BrowserContext* context)
|
||||
: browser_context_(static_cast<AtomBrowserContext*>(context)),
|
||||
proxy_config_monitor_(browser_context_->prefs()) {}
|
||||
|
||||
NetworkContextService::~NetworkContextService() = default;
|
||||
|
||||
network::mojom::NetworkContextPtr
|
||||
NetworkContextService::CreateNetworkContext() {
|
||||
network::mojom::NetworkContextPtr network_context;
|
||||
|
||||
content::GetNetworkService()->CreateNetworkContext(
|
||||
MakeRequest(&network_context),
|
||||
CreateNetworkContextParams(browser_context_->IsOffTheRecord(),
|
||||
browser_context_->GetPath()));
|
||||
|
||||
return network_context;
|
||||
}
|
||||
|
||||
network::mojom::NetworkContextParamsPtr
|
||||
NetworkContextService::CreateNetworkContextParams(bool in_memory,
|
||||
const base::FilePath& path) {
|
||||
network::mojom::NetworkContextParamsPtr network_context_params =
|
||||
g_browser_process->system_network_context_manager()
|
||||
->CreateDefaultNetworkContextParams();
|
||||
|
||||
network_context_params->user_agent = browser_context_->GetUserAgent();
|
||||
|
||||
network_context_params->accept_language =
|
||||
net::HttpUtil::GenerateAcceptLanguageHeader(
|
||||
AtomBrowserClient::Get()->GetApplicationLocale());
|
||||
|
||||
// Enable the HTTP cache.
|
||||
network_context_params->http_cache_enabled =
|
||||
browser_context_->CanUseHttpCache();
|
||||
|
||||
network_context_params->cookie_manager_params =
|
||||
network::mojom::CookieManagerParams::New();
|
||||
|
||||
// Configure on-disk storage for persistent sessions.
|
||||
if (!in_memory) {
|
||||
// Configure the HTTP cache path and size.
|
||||
network_context_params->http_cache_path =
|
||||
path.Append(chrome::kCacheDirname);
|
||||
network_context_params->http_cache_max_size =
|
||||
browser_context_->GetMaxCacheSize();
|
||||
|
||||
// Currently this just contains HttpServerProperties
|
||||
network_context_params->http_server_properties_path =
|
||||
path.Append(chrome::kNetworkPersistentStateFilename);
|
||||
|
||||
// Configure persistent cookie path.
|
||||
network_context_params->cookie_path = path.Append(chrome::kCookieFilename);
|
||||
|
||||
network_context_params->restore_old_session_cookies = false;
|
||||
network_context_params->persist_session_cookies = false;
|
||||
|
||||
// TODO(deepak1556): Matches the existing behavior https://git.io/fxHMl,
|
||||
// enable encryption as a followup.
|
||||
network_context_params->enable_encrypted_cookies = false;
|
||||
|
||||
network_context_params->transport_security_persister_path = path;
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(DISABLE_FTP_SUPPORT)
|
||||
network_context_params->enable_ftp_url_support = true;
|
||||
#endif // !BUILDFLAG(DISABLE_FTP_SUPPORT)
|
||||
|
||||
// Needed for PAC scripts that use data URLs.
|
||||
network_context_params->enable_data_url_support = true;
|
||||
|
||||
proxy_config_monitor_.AddToNetworkContextParams(network_context_params.get());
|
||||
|
||||
BrowserProcessImpl::ApplyProxyModeFromCommandLine(
|
||||
browser_context_->in_memory_pref_store());
|
||||
|
||||
return network_context_params;
|
||||
}
|
||||
|
||||
} // namespace atom
|
41
atom/browser/net/network_context_service.h
Normal file
41
atom/browser/net/network_context_service.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Copyright (c) 2019 GitHub, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_H_
|
||||
#define ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_H_
|
||||
|
||||
#include "atom/browser/atom_browser_context.h"
|
||||
#include "base/files/file_path.h"
|
||||
#include "chrome/browser/net/proxy_config_monitor.h"
|
||||
#include "components/keyed_service/core/keyed_service.h"
|
||||
#include "services/network/public/mojom/network_context.mojom.h"
|
||||
|
||||
namespace atom {
|
||||
|
||||
// KeyedService that initializes and provides access to the NetworkContexts for
|
||||
// a BrowserContext.
|
||||
class NetworkContextService : public KeyedService {
|
||||
public:
|
||||
explicit NetworkContextService(content::BrowserContext* context);
|
||||
~NetworkContextService() override;
|
||||
|
||||
NetworkContextService(const NetworkContextService&) = delete;
|
||||
NetworkContextService& operator=(const NetworkContextService&) = delete;
|
||||
|
||||
// Creates a NetworkContext for the BrowserContext.
|
||||
network::mojom::NetworkContextPtr CreateNetworkContext();
|
||||
|
||||
private:
|
||||
// Creates parameters for the NetworkContext.
|
||||
network::mojom::NetworkContextParamsPtr CreateNetworkContextParams(
|
||||
bool in_memory,
|
||||
const base::FilePath& path);
|
||||
|
||||
AtomBrowserContext* browser_context_;
|
||||
ProxyConfigMonitor proxy_config_monitor_;
|
||||
};
|
||||
|
||||
} // namespace atom
|
||||
|
||||
#endif // ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_H_
|
34
atom/browser/net/network_context_service_factory.cc
Normal file
34
atom/browser/net/network_context_service_factory.cc
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Copyright (c) 2019 GitHub, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "atom/browser/net/network_context_service_factory.h"
|
||||
|
||||
#include "atom/browser/net/network_context_service.h"
|
||||
#include "components/keyed_service/content/browser_context_dependency_manager.h"
|
||||
|
||||
namespace atom {
|
||||
|
||||
NetworkContextService* NetworkContextServiceFactory::GetForContext(
|
||||
content::BrowserContext* browser_context) {
|
||||
return static_cast<NetworkContextService*>(
|
||||
GetInstance()->GetServiceForBrowserContext(browser_context, true));
|
||||
}
|
||||
|
||||
NetworkContextServiceFactory* NetworkContextServiceFactory::GetInstance() {
|
||||
return base::Singleton<NetworkContextServiceFactory>::get();
|
||||
}
|
||||
|
||||
NetworkContextServiceFactory::NetworkContextServiceFactory()
|
||||
: BrowserContextKeyedServiceFactory(
|
||||
"ElectronNetworkContextService",
|
||||
BrowserContextDependencyManager::GetInstance()) {}
|
||||
|
||||
NetworkContextServiceFactory::~NetworkContextServiceFactory() {}
|
||||
|
||||
KeyedService* NetworkContextServiceFactory::BuildServiceInstanceFor(
|
||||
content::BrowserContext* context) const {
|
||||
return new NetworkContextService(static_cast<AtomBrowserContext*>(context));
|
||||
}
|
||||
|
||||
} // namespace atom
|
48
atom/browser/net/network_context_service_factory.h
Normal file
48
atom/browser/net/network_context_service_factory.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
// Copyright (c) 2019 GitHub, Inc.
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_FACTORY_H_
|
||||
#define ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_FACTORY_H_
|
||||
|
||||
#include "base/memory/singleton.h"
|
||||
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
|
||||
|
||||
class KeyedService;
|
||||
|
||||
namespace contenet {
|
||||
class BrowserContext;
|
||||
}
|
||||
|
||||
namespace atom {
|
||||
|
||||
class NetworkContextService;
|
||||
|
||||
class NetworkContextServiceFactory : public BrowserContextKeyedServiceFactory {
|
||||
public:
|
||||
// Returns the NetworkContextService that supports NetworkContexts for
|
||||
// |browser_context|.
|
||||
static NetworkContextService* GetForContext(
|
||||
content::BrowserContext* browser_context);
|
||||
|
||||
// Returns the NetworkContextServiceFactory singleton.
|
||||
static NetworkContextServiceFactory* GetInstance();
|
||||
|
||||
NetworkContextServiceFactory(const NetworkContextServiceFactory&) = delete;
|
||||
NetworkContextServiceFactory& operator=(const NetworkContextServiceFactory&) =
|
||||
delete;
|
||||
|
||||
private:
|
||||
friend struct base::DefaultSingletonTraits<NetworkContextServiceFactory>;
|
||||
|
||||
NetworkContextServiceFactory();
|
||||
~NetworkContextServiceFactory() override;
|
||||
|
||||
// BrowserContextKeyedServiceFactory implementation:
|
||||
KeyedService* BuildServiceInstanceFor(
|
||||
content::BrowserContext* context) const override;
|
||||
};
|
||||
|
||||
} // namespace atom
|
||||
|
||||
#endif // ATOM_BROWSER_NET_NETWORK_CONTEXT_SERVICE_FACTORY_H_
|
|
@ -11,7 +11,6 @@
|
|||
#include "atom/common/application_info.h"
|
||||
#include "atom/common/options_switches.h"
|
||||
#include "base/command_line.h"
|
||||
#include "base/lazy_instance.h"
|
||||
#include "chrome/browser/browser_process.h"
|
||||
#include "chrome/browser/net/chrome_mojo_proxy_resolver_factory.h"
|
||||
#include "components/net_log/net_export_file_writer.h"
|
||||
|
@ -27,11 +26,11 @@
|
|||
#include "services/network/public/cpp/shared_url_loader_factory.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
base::LazyInstance<SystemNetworkContextManager>::Leaky
|
||||
g_system_network_context_manager = LAZY_INSTANCE_INITIALIZER;
|
||||
|
||||
namespace {
|
||||
|
||||
// The global instance of the SystemNetworkContextmanager.
|
||||
SystemNetworkContextManager* g_system_network_context_manager = nullptr;
|
||||
|
||||
network::mojom::HttpAuthStaticParamsPtr CreateHttpAuthStaticParams() {
|
||||
network::mojom::HttpAuthStaticParamsPtr auth_static_params =
|
||||
network::mojom::HttpAuthStaticParams::New();
|
||||
|
@ -63,10 +62,11 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem
|
|||
: public network::SharedURLLoaderFactory {
|
||||
public:
|
||||
explicit URLLoaderFactoryForSystem(SystemNetworkContextManager* manager)
|
||||
: manager_(manager) {}
|
||||
: manager_(manager) {
|
||||
DETACH_FROM_SEQUENCE(sequence_checker_);
|
||||
}
|
||||
|
||||
// mojom::URLLoaderFactory implementation:
|
||||
|
||||
void CreateLoaderAndStart(network::mojom::URLLoaderRequest request,
|
||||
int32_t routing_id,
|
||||
int32_t request_id,
|
||||
|
@ -75,7 +75,7 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem
|
|||
network::mojom::URLLoaderClientPtr client,
|
||||
const net::MutableNetworkTrafficAnnotationTag&
|
||||
traffic_annotation) override {
|
||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||
if (!manager_)
|
||||
return;
|
||||
manager_->GetURLLoaderFactory()->CreateLoaderAndStart(
|
||||
|
@ -91,6 +91,7 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem
|
|||
|
||||
// SharedURLLoaderFactory implementation:
|
||||
std::unique_ptr<network::SharedURLLoaderFactoryInfo> Clone() override {
|
||||
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
||||
return std::make_unique<network::CrossThreadSharedURLLoaderFactoryInfo>(
|
||||
this);
|
||||
|
@ -102,6 +103,7 @@ class SystemNetworkContextManager::URLLoaderFactoryForSystem
|
|||
friend class base::RefCounted<URLLoaderFactoryForSystem>;
|
||||
~URLLoaderFactoryForSystem() override {}
|
||||
|
||||
SEQUENCE_CHECKER(sequence_checker_);
|
||||
SystemNetworkContextManager* manager_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(URLLoaderFactoryForSystem);
|
||||
|
@ -157,7 +159,6 @@ SystemNetworkContextManager::GetNetExportFileWriter() {
|
|||
return net_export_file_writer_.get();
|
||||
}
|
||||
|
||||
// static
|
||||
network::mojom::NetworkContextParamsPtr
|
||||
SystemNetworkContextManager::CreateDefaultNetworkContextParams() {
|
||||
network::mojom::NetworkContextParamsPtr network_context_params =
|
||||
|
@ -191,8 +192,29 @@ void SystemNetworkContextManager::SetUp(
|
|||
*http_auth_dynamic_params = CreateHttpAuthDynamicParams();
|
||||
}
|
||||
|
||||
SystemNetworkContextManager::SystemNetworkContextManager()
|
||||
: proxy_config_monitor_(g_browser_process->local_state()) {
|
||||
// static
|
||||
SystemNetworkContextManager* SystemNetworkContextManager::CreateInstance(
|
||||
PrefService* pref_service) {
|
||||
DCHECK(!g_system_network_context_manager);
|
||||
g_system_network_context_manager =
|
||||
new SystemNetworkContextManager(pref_service);
|
||||
return g_system_network_context_manager;
|
||||
}
|
||||
|
||||
// static
|
||||
SystemNetworkContextManager* SystemNetworkContextManager::GetInstance() {
|
||||
return g_system_network_context_manager;
|
||||
}
|
||||
|
||||
// static
|
||||
void SystemNetworkContextManager::DeleteInstance() {
|
||||
DCHECK(g_system_network_context_manager);
|
||||
delete g_system_network_context_manager;
|
||||
}
|
||||
|
||||
SystemNetworkContextManager::SystemNetworkContextManager(
|
||||
PrefService* pref_service)
|
||||
: proxy_config_monitor_(pref_service) {
|
||||
shared_url_loader_factory_ = new URLLoaderFactoryForSystem(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,12 +40,20 @@ class NetExportFileWriter;
|
|||
// using the actual network service.
|
||||
class SystemNetworkContextManager {
|
||||
public:
|
||||
SystemNetworkContextManager();
|
||||
~SystemNetworkContextManager();
|
||||
|
||||
// Creates the global instance of SystemNetworkContextManager. If an
|
||||
// instance already exists, this will cause a DCHECK failure.
|
||||
static SystemNetworkContextManager* CreateInstance(PrefService* pref_service);
|
||||
|
||||
// Gets the global SystemNetworkContextManager instance.
|
||||
static SystemNetworkContextManager* GetInstance();
|
||||
|
||||
// Destroys the global SystemNetworkContextManager instance.
|
||||
static void DeleteInstance();
|
||||
|
||||
// Returns default set of parameters for configuring the network service.
|
||||
static network::mojom::NetworkContextParamsPtr
|
||||
CreateDefaultNetworkContextParams();
|
||||
network::mojom::NetworkContextParamsPtr CreateDefaultNetworkContextParams();
|
||||
|
||||
// Initializes |network_context_params| as needed to set up a system
|
||||
// NetworkContext. If the network service is disabled,
|
||||
|
@ -85,6 +93,8 @@ class SystemNetworkContextManager {
|
|||
private:
|
||||
class URLLoaderFactoryForSystem;
|
||||
|
||||
explicit SystemNetworkContextManager(PrefService* pref_service);
|
||||
|
||||
// Creates parameters for the NetworkContext. May only be called once, since
|
||||
// it initializes some class members.
|
||||
network::mojom::NetworkContextParamsPtr CreateNetworkContextParams();
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#include "content/public/browser/browser_thread.h"
|
||||
#include "content/public/browser/devtools_network_transaction_factory.h"
|
||||
#include "content/public/browser/network_service_instance.h"
|
||||
#include "content/public/browser/resource_context.h"
|
||||
#include "net/base/host_mapping_rules.h"
|
||||
#include "net/cert/multi_log_ct_verifier.h"
|
||||
#include "net/cookies/cookie_monster.h"
|
||||
|
@ -102,18 +101,9 @@ void SetupAtomURLRequestJobFactory(
|
|||
|
||||
} // namespace
|
||||
|
||||
class ResourceContext : public content::ResourceContext {
|
||||
public:
|
||||
ResourceContext() = default;
|
||||
~ResourceContext() override = default;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ResourceContext);
|
||||
};
|
||||
|
||||
URLRequestContextGetter::Handle::Handle(
|
||||
base::WeakPtr<AtomBrowserContext> browser_context)
|
||||
: resource_context_(new ResourceContext),
|
||||
: resource_context_(new content::ResourceContext),
|
||||
browser_context_(browser_context),
|
||||
initialized_(false) {}
|
||||
|
||||
|
@ -154,7 +144,8 @@ URLRequestContextGetter::Handle::GetNetworkContext() {
|
|||
network::mojom::NetworkContextParamsPtr
|
||||
URLRequestContextGetter::Handle::CreateNetworkContextParams() {
|
||||
network::mojom::NetworkContextParamsPtr network_context_params =
|
||||
SystemNetworkContextManager::CreateDefaultNetworkContextParams();
|
||||
SystemNetworkContextManager::GetInstance()
|
||||
->CreateDefaultNetworkContextParams();
|
||||
|
||||
network_context_params->user_agent = browser_context_->GetUserAgent();
|
||||
|
||||
|
@ -250,7 +241,7 @@ URLRequestContextGetter::~URLRequestContextGetter() {
|
|||
}
|
||||
|
||||
void URLRequestContextGetter::NotifyContextShuttingDown(
|
||||
std::unique_ptr<ResourceContext> resource_context) {
|
||||
std::unique_ptr<content::ResourceContext> resource_context) {
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
||||
|
||||
// todo(brenca): remove once C70 lands
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "base/files/file_path.h"
|
||||
#include "content/public/browser/browser_context.h"
|
||||
#include "content/public/browser/resource_context.h"
|
||||
#include "net/url_request/url_request_context.h"
|
||||
#include "net/url_request/url_request_context_getter.h"
|
||||
#include "services/network/public/mojom/network_service.mojom.h"
|
||||
|
@ -36,7 +37,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
|
|||
|
||||
// Discard reference to URLRequestContext and inform observers to
|
||||
// shutdown. Must be called only on IO thread.
|
||||
void NotifyContextShuttingDown(std::unique_ptr<ResourceContext>);
|
||||
void NotifyContextShuttingDown(std::unique_ptr<content::ResourceContext>);
|
||||
|
||||
AtomURLRequestJobFactory* job_factory() const {
|
||||
return top_job_factory_.get();
|
||||
|
@ -69,7 +70,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
|
|||
void LazyInitialize();
|
||||
|
||||
scoped_refptr<URLRequestContextGetter> main_request_context_getter_;
|
||||
std::unique_ptr<ResourceContext> resource_context_;
|
||||
std::unique_ptr<content::ResourceContext> resource_context_;
|
||||
base::WeakPtr<AtomBrowserContext> browser_context_;
|
||||
// This is a NetworkContext interface that uses URLRequestContextGetter
|
||||
// NetworkContext, ownership is passed to StoragePartition when
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "atom/browser/ui/inspectable_web_contents_view.h"
|
||||
#include "atom/browser/ui/inspectable_web_contents_view_delegate.h"
|
||||
#include "atom/common/platform_util.h"
|
||||
#include "base/base64.h"
|
||||
#include "base/guid.h"
|
||||
#include "base/json/json_reader.h"
|
||||
#include "base/json/json_writer.h"
|
||||
|
@ -37,10 +38,9 @@
|
|||
#include "content/public/browser/storage_partition.h"
|
||||
#include "content/public/common/user_agent.h"
|
||||
#include "ipc/ipc_channel.h"
|
||||
#include "net/base/io_buffer.h"
|
||||
#include "net/http/http_response_headers.h"
|
||||
#include "net/url_request/url_fetcher.h"
|
||||
#include "net/url_request/url_fetcher_response_writer.h"
|
||||
#include "services/network/public/cpp/simple_url_loader.h"
|
||||
#include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
|
||||
#include "ui/display/display.h"
|
||||
#include "ui/display/screen.h"
|
||||
|
||||
|
@ -145,64 +145,83 @@ GURL GetDevToolsURL(bool can_dock) {
|
|||
return GURL(url_string);
|
||||
}
|
||||
|
||||
// ResponseWriter -------------------------------------------------------------
|
||||
} // namespace
|
||||
|
||||
class ResponseWriter : public net::URLFetcherResponseWriter {
|
||||
class InspectableWebContentsImpl::NetworkResourceLoader
|
||||
: public network::SimpleURLLoaderStreamConsumer {
|
||||
public:
|
||||
ResponseWriter(base::WeakPtr<InspectableWebContentsImpl> bindings,
|
||||
int stream_id);
|
||||
~ResponseWriter() override;
|
||||
NetworkResourceLoader(int stream_id,
|
||||
InspectableWebContentsImpl* bindings,
|
||||
std::unique_ptr<network::SimpleURLLoader> loader,
|
||||
network::mojom::URLLoaderFactory* url_loader_factory,
|
||||
const DispatchCallback& callback)
|
||||
: stream_id_(stream_id),
|
||||
bindings_(bindings),
|
||||
loader_(std::move(loader)),
|
||||
callback_(callback) {
|
||||
loader_->SetOnResponseStartedCallback(base::BindOnce(
|
||||
&NetworkResourceLoader::OnResponseStarted, base::Unretained(this)));
|
||||
loader_->DownloadAsStream(url_loader_factory, this);
|
||||
}
|
||||
|
||||
// URLFetcherResponseWriter overrides:
|
||||
int Initialize(net::CompletionOnceCallback callback) override;
|
||||
int Write(net::IOBuffer* buffer,
|
||||
int num_bytes,
|
||||
net::CompletionOnceCallback callback) override;
|
||||
int Finish(int net_error, net::CompletionOnceCallback callback) override;
|
||||
NetworkResourceLoader(const NetworkResourceLoader&) = delete;
|
||||
NetworkResourceLoader& operator=(const NetworkResourceLoader&) = delete;
|
||||
|
||||
private:
|
||||
base::WeakPtr<InspectableWebContentsImpl> bindings_;
|
||||
int stream_id_;
|
||||
void OnResponseStarted(const GURL& final_url,
|
||||
const network::ResourceResponseHead& response_head) {
|
||||
response_headers_ = response_head.headers;
|
||||
}
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(ResponseWriter);
|
||||
void OnDataReceived(base::StringPiece chunk,
|
||||
base::OnceClosure resume) override {
|
||||
base::Value chunkValue;
|
||||
|
||||
bool encoded = !base::IsStringUTF8(chunk);
|
||||
if (encoded) {
|
||||
std::string encoded_string;
|
||||
base::Base64Encode(chunk, &encoded_string);
|
||||
chunkValue = base::Value(std::move(encoded_string));
|
||||
} else {
|
||||
chunkValue = base::Value(chunk);
|
||||
}
|
||||
base::Value id(stream_id_);
|
||||
base::Value encodedValue(encoded);
|
||||
|
||||
bindings_->CallClientFunction("DevToolsAPI.streamWrite", &id, &chunkValue,
|
||||
&encodedValue);
|
||||
std::move(resume).Run();
|
||||
}
|
||||
|
||||
void OnComplete(bool success) override {
|
||||
base::DictionaryValue response;
|
||||
response.SetInteger("statusCode", response_headers_
|
||||
? response_headers_->response_code()
|
||||
: 200);
|
||||
|
||||
auto headers = std::make_unique<base::DictionaryValue>();
|
||||
size_t iterator = 0;
|
||||
std::string name;
|
||||
std::string value;
|
||||
while (response_headers_ &&
|
||||
response_headers_->EnumerateHeaderLines(&iterator, &name, &value))
|
||||
headers->SetString(name, value);
|
||||
|
||||
response.Set("headers", std::move(headers));
|
||||
callback_.Run(&response);
|
||||
|
||||
bindings_->loaders_.erase(bindings_->loaders_.find(this));
|
||||
}
|
||||
|
||||
void OnRetry(base::OnceClosure start_retry) override {}
|
||||
|
||||
const int stream_id_;
|
||||
InspectableWebContentsImpl* const bindings_;
|
||||
std::unique_ptr<network::SimpleURLLoader> loader_;
|
||||
DispatchCallback callback_;
|
||||
scoped_refptr<net::HttpResponseHeaders> response_headers_;
|
||||
};
|
||||
|
||||
ResponseWriter::ResponseWriter(
|
||||
base::WeakPtr<InspectableWebContentsImpl> bindings,
|
||||
int stream_id)
|
||||
: bindings_(bindings), stream_id_(stream_id) {}
|
||||
|
||||
ResponseWriter::~ResponseWriter() {}
|
||||
|
||||
int ResponseWriter::Initialize(net::CompletionOnceCallback callback) {
|
||||
return net::OK;
|
||||
}
|
||||
|
||||
int ResponseWriter::Write(net::IOBuffer* buffer,
|
||||
int num_bytes,
|
||||
net::CompletionOnceCallback callback) {
|
||||
std::string chunk = std::string(buffer->data(), num_bytes);
|
||||
if (!base::IsStringUTF8(chunk))
|
||||
return num_bytes;
|
||||
|
||||
base::Value* id = new base::Value(stream_id_);
|
||||
base::Value* chunk_value = new base::Value(chunk);
|
||||
|
||||
base::PostTaskWithTraits(
|
||||
FROM_HERE, {content::BrowserThread::UI},
|
||||
base::BindOnce(&InspectableWebContentsImpl::CallClientFunction, bindings_,
|
||||
"DevToolsAPI.streamWrite", base::Owned(id),
|
||||
base::Owned(chunk_value), nullptr));
|
||||
return num_bytes;
|
||||
}
|
||||
|
||||
int ResponseWriter::Finish(int net_error,
|
||||
net::CompletionOnceCallback callback) {
|
||||
return net::OK;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// Implemented separately on each platform.
|
||||
InspectableWebContentsView* CreateInspectableContentsView(
|
||||
InspectableWebContentsImpl* inspectable_web_contents_impl);
|
||||
|
@ -495,19 +514,19 @@ void InspectableWebContentsImpl::LoadNetworkResource(
|
|||
return;
|
||||
}
|
||||
|
||||
auto* browser_context = GetDevToolsWebContents()->GetBrowserContext();
|
||||
auto resource_request = std::make_unique<network::ResourceRequest>();
|
||||
resource_request->url = gurl;
|
||||
resource_request->headers.AddHeadersFromString(headers);
|
||||
|
||||
net::URLFetcher* fetcher =
|
||||
(net::URLFetcher::Create(gurl, net::URLFetcher::GET, this)).release();
|
||||
pending_requests_[fetcher] = callback;
|
||||
fetcher->SetRequestContext(
|
||||
content::BrowserContext::GetDefaultStoragePartition(browser_context)
|
||||
->GetURLRequestContext());
|
||||
fetcher->SetExtraRequestHeaders(headers);
|
||||
fetcher->SaveResponseWithWriter(
|
||||
std::unique_ptr<net::URLFetcherResponseWriter>(
|
||||
new ResponseWriter(weak_factory_.GetWeakPtr(), stream_id)));
|
||||
fetcher->Start();
|
||||
auto* partition = content::BrowserContext::GetDefaultStoragePartition(
|
||||
GetDevToolsWebContents()->GetBrowserContext());
|
||||
auto factory = partition->GetURLLoaderFactoryForBrowserProcess();
|
||||
|
||||
auto simple_url_loader = network::SimpleURLLoader::Create(
|
||||
std::move(resource_request), NO_TRAFFIC_ANNOTATION_YET);
|
||||
auto resource_loader = std::make_unique<NetworkResourceLoader>(
|
||||
stream_id, this, std::move(simple_url_loader), factory.get(), callback);
|
||||
loaders_.insert(std::move(resource_loader));
|
||||
}
|
||||
|
||||
void InspectableWebContentsImpl::SetIsDocked(const DispatchCallback& callback,
|
||||
|
@ -752,9 +771,6 @@ void InspectableWebContentsImpl::WebContentsDestroyed() {
|
|||
Detach();
|
||||
embedder_message_dispatcher_.reset();
|
||||
|
||||
for (const auto& pair : pending_requests_)
|
||||
delete pair.first;
|
||||
|
||||
if (view_ && view_->GetDelegate())
|
||||
view_->GetDelegate()->DevToolsClosed();
|
||||
}
|
||||
|
@ -874,34 +890,6 @@ void InspectableWebContentsImpl::DidFinishNavigation(
|
|||
frame->ExecuteJavaScriptForTests(base::UTF8ToUTF16(script));
|
||||
}
|
||||
|
||||
void InspectableWebContentsImpl::OnURLFetchComplete(
|
||||
const net::URLFetcher* source) {
|
||||
DCHECK(source);
|
||||
auto it = pending_requests_.find(source);
|
||||
DCHECK(it != pending_requests_.end());
|
||||
|
||||
base::DictionaryValue response;
|
||||
|
||||
net::HttpResponseHeaders* rh = source->GetResponseHeaders();
|
||||
response.SetInteger("statusCode", rh ? rh->response_code() : 200);
|
||||
|
||||
{
|
||||
auto headers = std::make_unique<base::DictionaryValue>();
|
||||
|
||||
size_t iterator = 0;
|
||||
std::string name;
|
||||
std::string value;
|
||||
while (rh && rh->EnumerateHeaderLines(&iterator, &name, &value))
|
||||
headers->SetString(name, value);
|
||||
|
||||
response.Set("headers", std::move(headers));
|
||||
}
|
||||
|
||||
it->second.Run(&response);
|
||||
pending_requests_.erase(it);
|
||||
delete source;
|
||||
}
|
||||
|
||||
void InspectableWebContentsImpl::SendMessageAck(int request_id,
|
||||
const base::Value* arg) {
|
||||
base::Value id_value(request_id);
|
||||
|
|
|
@ -8,10 +8,12 @@
|
|||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "atom/browser/ui/inspectable_web_contents.h"
|
||||
#include "base/containers/unique_ptr_adapters.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "chrome/browser/devtools/devtools_contents_resizing_strategy.h"
|
||||
#include "chrome/browser/devtools/devtools_embedder_message_dispatcher.h"
|
||||
|
@ -19,7 +21,6 @@
|
|||
#include "content/public/browser/devtools_frontend_host.h"
|
||||
#include "content/public/browser/web_contents_delegate.h"
|
||||
#include "content/public/browser/web_contents_observer.h"
|
||||
#include "net/url_request/url_fetcher_delegate.h"
|
||||
#include "ui/gfx/geometry/rect.h"
|
||||
|
||||
class PrefService;
|
||||
|
@ -35,8 +36,7 @@ class InspectableWebContentsImpl
|
|||
public content::DevToolsAgentHostClient,
|
||||
public content::WebContentsObserver,
|
||||
public content::WebContentsDelegate,
|
||||
public DevToolsEmbedderMessageDispatcher::Delegate,
|
||||
public net::URLFetcherDelegate {
|
||||
public DevToolsEmbedderMessageDispatcher::Delegate {
|
||||
public:
|
||||
static void RegisterPrefs(PrefRegistrySimple* pref_registry);
|
||||
|
||||
|
@ -197,9 +197,6 @@ class InspectableWebContentsImpl
|
|||
std::unique_ptr<content::FileSelectListener> listener,
|
||||
const base::FilePath& path) override;
|
||||
|
||||
// net::URLFetcherDelegate:
|
||||
void OnURLFetchComplete(const net::URLFetcher* source) override;
|
||||
|
||||
void SendMessageAck(int request_id, const base::Value* arg1);
|
||||
|
||||
bool frontend_loaded_;
|
||||
|
@ -214,8 +211,6 @@ class InspectableWebContentsImpl
|
|||
std::string dock_state_;
|
||||
bool activate_ = true;
|
||||
|
||||
using PendingRequestsMap = std::map<const net::URLFetcher*, DispatchCallback>;
|
||||
PendingRequestsMap pending_requests_;
|
||||
InspectableWebContentsDelegate* delegate_; // weak references.
|
||||
|
||||
PrefService* pref_service_; // weak reference.
|
||||
|
@ -231,6 +226,10 @@ class InspectableWebContentsImpl
|
|||
bool is_guest_;
|
||||
std::unique_ptr<InspectableWebContentsView> view_;
|
||||
|
||||
class NetworkResourceLoader;
|
||||
std::set<std::unique_ptr<NetworkResourceLoader>, base::UniquePtrComparator>
|
||||
loaders_;
|
||||
|
||||
using ExtensionsAPIs = std::map<std::string, std::string>;
|
||||
ExtensionsAPIs extensions_api_;
|
||||
|
||||
|
|
|
@ -325,6 +325,10 @@ filenames = {
|
|||
"atom/browser/net/http_protocol_handler.h",
|
||||
"atom/browser/net/js_asker.cc",
|
||||
"atom/browser/net/js_asker.h",
|
||||
"atom/browser/net/network_context_service_factory.cc",
|
||||
"atom/browser/net/network_context_service_factory.h",
|
||||
"atom/browser/net/network_context_service.cc",
|
||||
"atom/browser/net/network_context_service.h",
|
||||
"atom/browser/net/require_ct_delegate.cc",
|
||||
"atom/browser/net/require_ct_delegate.h",
|
||||
"atom/browser/net/resolve_proxy_helper.cc",
|
||||
|
|
Loading…
Reference in a new issue