blob: c3ca4143b905506f107a4a02516dd4409fbd3c9d [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2017 The Chromium Authors
John Abd-El-Malek576c6132017-11-04 00:33:582// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Lei Zhang02a0ad72021-04-21 05:26:085#ifndef CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_
6#define CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_
John Abd-El-Malek576c6132017-11-04 00:33:587
Daniel McArdle8b30dd42019-05-29 23:38:138#include <memory>
9#include <string>
10#include <vector>
11
Clark DuVall6e751642018-12-27 23:42:0612#include "base/memory/memory_pressure_listener.h"
Hayato Itoee6ca192019-06-04 03:06:3613#include "base/unguessable_token.h"
Clark DuVall16acd1c2018-09-21 00:54:5814#include "build/build_config.h"
Takashi Toyoshimabfc3b2812022-10-07 23:51:3715#include "content/browser/network/socket_broker_impl.h"
Julie Jeongeun Kimd28b36f2019-10-11 04:43:4316#include "mojo/public/cpp/bindings/pending_receiver.h"
17#include "mojo/public/cpp/bindings/receiver.h"
Dave Tapuska69f89252021-03-10 17:11:3718#include "mojo/public/cpp/bindings/receiver_set.h"
Julie Jeongeun Kimf962da32019-11-29 17:43:2519#include "mojo/public/cpp/bindings/remote.h"
John Abd-El-Malekb344c2a2018-10-26 20:51:2620#include "net/cert/cert_database.h"
Hans Wennborgae6fc9752021-05-19 12:59:0121#include "services/network/public/mojom/network_change_manager.mojom.h"
Ken Rockot54311e62018-02-10 19:01:5222#include "services/network/public/mojom/network_service.mojom.h"
Sigurd Schneidera3b02582021-07-27 13:51:3723#include "services/network/public/mojom/url_loader_network_service_observer.mojom.h"
Jun Caibc561f412018-02-28 18:41:3924#include "url/gurl.h"
John Abd-El-Malek576c6132017-11-04 00:33:5825
Xiaohan Wang1ecfd002022-01-19 22:33:1026#if BUILDFLAG(IS_ANDROID)
Clark DuVall16acd1c2018-09-21 00:54:5827#include "base/android/application_status_listener.h"
28#endif
29
John Abd-El-Malek576c6132017-11-04 00:33:5830namespace content {
31
Tarun Bansalf153d6832019-06-17 18:18:0532class WebRtcConnectionsObserver;
33
Lei Zhanged9be3a2021-11-17 22:01:1834class NetworkServiceClient
Dave Tapuska69f89252021-03-10 17:11:3735 : public network::mojom::URLLoaderNetworkServiceObserver,
Matthew Dentonce1ba152023-04-05 20:58:2636#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
Clark DuVallfe37e8e02019-02-15 02:00:2837 public net::NetworkChangeNotifier::ConnectionTypeObserver,
38 public net::NetworkChangeNotifier::MaxBandwidthObserver,
39 public net::NetworkChangeNotifier::IPAddressObserver,
Clark DuVallfe37e8e02019-02-15 02:00:2840#endif
John Abd-El-Malekb344c2a2018-10-26 20:51:2641 public net::CertDatabase::Observer {
John Abd-El-Malek576c6132017-11-04 00:33:5842 public:
Dave Tapuska69f89252021-03-10 17:11:3743 NetworkServiceClient();
Peter Boström828b9022021-09-21 02:28:4344
45 NetworkServiceClient(const NetworkServiceClient&) = delete;
46 NetworkServiceClient& operator=(const NetworkServiceClient&) = delete;
47
John Abd-El-Malek576c6132017-11-04 00:33:5848 ~NetworkServiceClient() override;
49
Dave Tapuska69f89252021-03-10 17:11:3750 mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
51 BindURLLoaderNetworkServiceObserver();
Simon Zündf60b2a22020-11-24 10:54:2452
Yutaka Hirano136bd912022-01-31 16:26:1153 // Called when SetParams() is called on the associated network service.
54 void OnNetworkServiceInitialized(network::mojom::NetworkService* service);
55
John Abd-El-Malekb344c2a2018-10-26 20:51:2656 // net::CertDatabase::Observer implementation:
Matt Mueller70e3c422023-06-14 00:21:0357 void OnTrustStoreChanged() override;
58 void OnClientCertStoreChanged() override;
John Abd-El-Malekb344c2a2018-10-26 20:51:2659
Clark DuVall6e751642018-12-27 23:42:0660 void OnMemoryPressure(
61 base::MemoryPressureListener::MemoryPressureLevel memory_presure_level);
62
Tarun Bansalf153d6832019-06-17 18:18:0563 // Called when there is a change in the count of media connections that
64 // require low network latency.
65 void OnPeerToPeerConnectionsCountChange(uint32_t count);
66
Xiaohan Wang1ecfd002022-01-19 22:33:1067#if BUILDFLAG(IS_ANDROID)
Clark DuVall16acd1c2018-09-21 00:54:5868 void OnApplicationStateChange(base::android::ApplicationState state);
Matthew Dentonce1ba152023-04-05 20:58:2669#endif
Clark DuVallfe37e8e02019-02-15 02:00:2870
Matthew Dentonce1ba152023-04-05 20:58:2671#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
Clark DuVallfe37e8e02019-02-15 02:00:2872 // net::NetworkChangeNotifier::ConnectionTypeObserver implementation:
73 void OnConnectionTypeChanged(
74 net::NetworkChangeNotifier::ConnectionType type) override;
75
76 // net::NetworkChangeNotifier::MaxBandwidthObserver implementation:
77 void OnMaxBandwidthChanged(
78 double max_bandwidth_mbps,
79 net::NetworkChangeNotifier::ConnectionType type) override;
80
81 // net::NetworkChangeNotifier::IPAddressObserver implementation:
Alex Henrie5713c0912025-08-13 19:21:1482 void OnIPAddressChanged(
83 net::NetworkChangeNotifier::IPAddressChangeType change_type =
84 net::NetworkChangeNotifier::IP_ADDRESS_CHANGE_NORMAL) override;
Matthew Dentonce1ba152023-04-05 20:58:2685#endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
Liza Burakova27070602022-07-01 05:27:4086
Liza Burakova1595a7812023-09-27 15:03:3287#if BUILDFLAG(IS_WIN)
Liza Burakova27070602022-07-01 05:27:4088 // Called when the network service sandbox is enabled.
89 mojo::PendingRemote<network::mojom::SocketBroker> BindSocketBroker();
Clark DuVall16acd1c2018-09-21 00:54:5890#endif
91
John Abd-El-Malek576c6132017-11-04 00:33:5892 private:
Dave Tapuska69f89252021-03-10 17:11:3793 // network::mojom::URLLoaderNetworkServiceObserver overrides.
94 void OnSSLCertificateError(const GURL& url,
95 int net_error,
96 const net::SSLInfo& ssl_info,
97 bool fatal,
98 OnSSLCertificateErrorCallback response) override;
99 void OnCertificateRequested(
Arthur Sonzognic686e8f2024-01-11 08:36:37100 const std::optional<base::UnguessableToken>& window_id,
Dave Tapuska69f89252021-03-10 17:11:37101 const scoped_refptr<net::SSLCertRequestInfo>& cert_info,
102 mojo::PendingRemote<network::mojom::ClientCertificateResponder>
103 cert_responder) override;
104 void OnAuthRequired(
Arthur Sonzognic686e8f2024-01-11 08:36:37105 const std::optional<base::UnguessableToken>& window_id,
Dan McArdlea9fa6742024-07-16 15:13:50106 int32_t request_id,
Dave Tapuska69f89252021-03-10 17:11:37107 const GURL& url,
108 bool first_auth_attempt,
109 const net::AuthChallengeInfo& auth_info,
110 const scoped_refptr<net::HttpResponseHeaders>& head_headers,
111 mojo::PendingRemote<network::mojom::AuthChallengeResponder>
112 auth_challenge_responder) override;
Chris Thompsonba3d2a22025-03-24 18:08:50113 void OnLocalNetworkAccessPermissionRequired(
114 OnLocalNetworkAccessPermissionRequiredCallback callback) override;
Dylan Cutler108a41922022-01-05 18:16:23115 void OnClearSiteData(
116 const GURL& url,
117 const std::string& header_value,
118 int load_flags,
Arthur Sonzognic686e8f2024-01-11 08:36:37119 const std::optional<net::CookiePartitionKey>& cookie_partition_key,
Dylan Cutler72ac55092023-03-20 20:54:05120 bool partitioned_state_allowed_only,
Dylan Cutler108a41922022-01-05 18:16:23121 OnClearSiteDataCallback callback) override;
Dave Tapuska69f89252021-03-10 17:11:37122 void OnLoadingStateUpdate(network::mojom::LoadInfoPtr info,
123 OnLoadingStateUpdateCallback callback) override;
124 void OnDataUseUpdate(int32_t network_traffic_annotation_id_hash,
125 int64_t recv_bytes,
126 int64_t sent_bytes) override;
Camillia Smith Barnes76d6da92023-06-01 18:54:27127 void OnSharedStorageHeaderReceived(
128 const url::Origin& request_origin,
Yao Xiao7177f672024-11-26 17:22:50129 std::vector<network::mojom::SharedStorageModifierMethodWithOptionsPtr>
130 methods_with_options,
Yao Xiao08d15432024-12-18 00:56:36131 const std::optional<std::string>& with_lock,
Camillia Smith Barnes76d6da92023-06-01 18:54:27132 OnSharedStorageHeaderReceivedCallback callback) override;
Caleb Raittoaa9076612025-03-18 16:48:53133 void OnAdAuctionEventRecordHeaderReceived(
Maks Orlovich4347dea2025-04-17 20:57:07134 network::AdAuctionEventRecord event_record,
135 const std::optional<url::Origin>& top_frame_origin) override;
Dave Tapuska69f89252021-03-10 17:11:37136 void Clone(
137 mojo::PendingReceiver<network::mojom::URLLoaderNetworkServiceObserver>
138 listener) override;
Jonathan Hao3e33cb082024-03-06 19:36:01139 void OnWebSocketConnectedToPrivateNetwork(
140 network::mojom::IPAddressSpace ip_address_space) override;
Chris Thompsondfd934f2025-02-14 06:34:57141 void OnUrlLoaderConnectedToPrivateNetwork(
142 const GURL& request_url,
143 network::mojom::IPAddressSpace response_address_space,
144 network::mojom::IPAddressSpace client_address_space,
145 network::mojom::IPAddressSpace target_address_space) override;
John Abd-El-Malek576c6132017-11-04 00:33:58146
Clark DuVall6e751642018-12-27 23:42:06147 std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
148
Tarun Bansalf153d6832019-06-17 18:18:05149 std::unique_ptr<WebRtcConnectionsObserver> webrtc_connections_observer_;
150
Xiaohan Wang1ecfd002022-01-19 22:33:10151#if BUILDFLAG(IS_ANDROID)
Clark DuVall16acd1c2018-09-21 00:54:58152 std::unique_ptr<base::android::ApplicationStatusListener>
153 app_status_listener_;
Matthew Dentonce1ba152023-04-05 20:58:26154#endif
155
156#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX)
Julie Jeongeun Kimf962da32019-11-29 17:43:25157 mojo::Remote<network::mojom::NetworkChangeManager> network_change_manager_;
Will Harris7bcc5282022-07-29 00:51:03158#endif // BUILDFLAG(IS_ANDROID)
159
Liza Burakova1595a7812023-09-27 15:03:32160#if BUILDFLAG(IS_WIN)
Liza Burakova27070602022-07-01 05:27:40161 SocketBrokerImpl socket_broker_;
Liza Burakova1595a7812023-09-27 15:03:32162#endif // BUILDFLAG(IS_WIN)
Clark DuVall16acd1c2018-09-21 00:54:58163
Dave Tapuska69f89252021-03-10 17:11:37164 mojo::ReceiverSet<network::mojom::URLLoaderNetworkServiceObserver>
165 url_loader_network_service_observers_;
John Abd-El-Malek576c6132017-11-04 00:33:58166};
167
168} // namespace content
169
Lei Zhang02a0ad72021-04-21 05:26:08170#endif // CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_