Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2017 The Chromium Authors |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Lei Zhang | 02a0ad7 | 2021-04-21 05:26:08 | [diff] [blame] | 5 | #ifndef CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_ |
| 6 | #define CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_ |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 7 | |
Daniel McArdle | 8b30dd4 | 2019-05-29 23:38:13 | [diff] [blame] | 8 | #include <memory> |
| 9 | #include <string> |
| 10 | #include <vector> |
| 11 | |
Clark DuVall | 6e75164 | 2018-12-27 23:42:06 | [diff] [blame] | 12 | #include "base/memory/memory_pressure_listener.h" |
Hayato Ito | ee6ca19 | 2019-06-04 03:06:36 | [diff] [blame] | 13 | #include "base/unguessable_token.h" |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 14 | #include "build/build_config.h" |
Takashi Toyoshima | bfc3b281 | 2022-10-07 23:51:37 | [diff] [blame] | 15 | #include "content/browser/network/socket_broker_impl.h" |
Julie Jeongeun Kim | d28b36f | 2019-10-11 04:43:43 | [diff] [blame] | 16 | #include "mojo/public/cpp/bindings/pending_receiver.h" |
| 17 | #include "mojo/public/cpp/bindings/receiver.h" |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 18 | #include "mojo/public/cpp/bindings/receiver_set.h" |
Julie Jeongeun Kim | f962da3 | 2019-11-29 17:43:25 | [diff] [blame] | 19 | #include "mojo/public/cpp/bindings/remote.h" |
John Abd-El-Malek | b344c2a | 2018-10-26 20:51:26 | [diff] [blame] | 20 | #include "net/cert/cert_database.h" |
Hans Wennborg | ae6fc975 | 2021-05-19 12:59:01 | [diff] [blame] | 21 | #include "services/network/public/mojom/network_change_manager.mojom.h" |
Ken Rockot | 54311e6 | 2018-02-10 19:01:52 | [diff] [blame] | 22 | #include "services/network/public/mojom/network_service.mojom.h" |
Sigurd Schneider | a3b0258 | 2021-07-27 13:51:37 | [diff] [blame] | 23 | #include "services/network/public/mojom/url_loader_network_service_observer.mojom.h" |
Jun Cai | bc561f41 | 2018-02-28 18:41:39 | [diff] [blame] | 24 | #include "url/gurl.h" |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 25 | |
Xiaohan Wang | 1ecfd00 | 2022-01-19 22:33:10 | [diff] [blame] | 26 | #if BUILDFLAG(IS_ANDROID) |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 27 | #include "base/android/application_status_listener.h" |
| 28 | #endif |
| 29 | |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 30 | namespace content { |
| 31 | |
Tarun Bansal | f153d683 | 2019-06-17 18:18:05 | [diff] [blame] | 32 | class WebRtcConnectionsObserver; |
| 33 | |
Lei Zhang | ed9be3a | 2021-11-17 22:01:18 | [diff] [blame] | 34 | class NetworkServiceClient |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 35 | : public network::mojom::URLLoaderNetworkServiceObserver, |
Matthew Denton | ce1ba15 | 2023-04-05 20:58:26 | [diff] [blame] | 36 | #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) |
Clark DuVall | fe37e8e0 | 2019-02-15 02:00:28 | [diff] [blame] | 37 | public net::NetworkChangeNotifier::ConnectionTypeObserver, |
| 38 | public net::NetworkChangeNotifier::MaxBandwidthObserver, |
| 39 | public net::NetworkChangeNotifier::IPAddressObserver, |
Clark DuVall | fe37e8e0 | 2019-02-15 02:00:28 | [diff] [blame] | 40 | #endif |
John Abd-El-Malek | b344c2a | 2018-10-26 20:51:26 | [diff] [blame] | 41 | public net::CertDatabase::Observer { |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 42 | public: |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 43 | NetworkServiceClient(); |
Peter Boström | 828b902 | 2021-09-21 02:28:43 | [diff] [blame] | 44 | |
| 45 | NetworkServiceClient(const NetworkServiceClient&) = delete; |
| 46 | NetworkServiceClient& operator=(const NetworkServiceClient&) = delete; |
| 47 | |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 48 | ~NetworkServiceClient() override; |
| 49 | |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 50 | mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver> |
| 51 | BindURLLoaderNetworkServiceObserver(); |
Simon Zünd | f60b2a2 | 2020-11-24 10:54:24 | [diff] [blame] | 52 | |
Yutaka Hirano | 136bd91 | 2022-01-31 16:26:11 | [diff] [blame] | 53 | // Called when SetParams() is called on the associated network service. |
| 54 | void OnNetworkServiceInitialized(network::mojom::NetworkService* service); |
| 55 | |
John Abd-El-Malek | b344c2a | 2018-10-26 20:51:26 | [diff] [blame] | 56 | // net::CertDatabase::Observer implementation: |
Matt Mueller | 70e3c42 | 2023-06-14 00:21:03 | [diff] [blame] | 57 | void OnTrustStoreChanged() override; |
| 58 | void OnClientCertStoreChanged() override; |
John Abd-El-Malek | b344c2a | 2018-10-26 20:51:26 | [diff] [blame] | 59 | |
Clark DuVall | 6e75164 | 2018-12-27 23:42:06 | [diff] [blame] | 60 | void OnMemoryPressure( |
| 61 | base::MemoryPressureListener::MemoryPressureLevel memory_presure_level); |
| 62 | |
Tarun Bansal | f153d683 | 2019-06-17 18:18:05 | [diff] [blame] | 63 | // 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 Wang | 1ecfd00 | 2022-01-19 22:33:10 | [diff] [blame] | 67 | #if BUILDFLAG(IS_ANDROID) |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 68 | void OnApplicationStateChange(base::android::ApplicationState state); |
Matthew Denton | ce1ba15 | 2023-04-05 20:58:26 | [diff] [blame] | 69 | #endif |
Clark DuVall | fe37e8e0 | 2019-02-15 02:00:28 | [diff] [blame] | 70 | |
Matthew Denton | ce1ba15 | 2023-04-05 20:58:26 | [diff] [blame] | 71 | #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) |
Clark DuVall | fe37e8e0 | 2019-02-15 02:00:28 | [diff] [blame] | 72 | // 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 Henrie | 5713c091 | 2025-08-13 19:21:14 | [diff] [blame] | 82 | void OnIPAddressChanged( |
| 83 | net::NetworkChangeNotifier::IPAddressChangeType change_type = |
| 84 | net::NetworkChangeNotifier::IP_ADDRESS_CHANGE_NORMAL) override; |
Matthew Denton | ce1ba15 | 2023-04-05 20:58:26 | [diff] [blame] | 85 | #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) |
Liza Burakova | 2707060 | 2022-07-01 05:27:40 | [diff] [blame] | 86 | |
Liza Burakova | 1595a781 | 2023-09-27 15:03:32 | [diff] [blame] | 87 | #if BUILDFLAG(IS_WIN) |
Liza Burakova | 2707060 | 2022-07-01 05:27:40 | [diff] [blame] | 88 | // Called when the network service sandbox is enabled. |
| 89 | mojo::PendingRemote<network::mojom::SocketBroker> BindSocketBroker(); |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 90 | #endif |
| 91 | |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 92 | private: |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 93 | // 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 Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 100 | const std::optional<base::UnguessableToken>& window_id, |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 101 | const scoped_refptr<net::SSLCertRequestInfo>& cert_info, |
| 102 | mojo::PendingRemote<network::mojom::ClientCertificateResponder> |
| 103 | cert_responder) override; |
| 104 | void OnAuthRequired( |
Arthur Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 105 | const std::optional<base::UnguessableToken>& window_id, |
Dan McArdle | a9fa674 | 2024-07-16 15:13:50 | [diff] [blame] | 106 | int32_t request_id, |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 107 | 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 Thompson | ba3d2a2 | 2025-03-24 18:08:50 | [diff] [blame] | 113 | void OnLocalNetworkAccessPermissionRequired( |
| 114 | OnLocalNetworkAccessPermissionRequiredCallback callback) override; |
Dylan Cutler | 108a4192 | 2022-01-05 18:16:23 | [diff] [blame] | 115 | void OnClearSiteData( |
| 116 | const GURL& url, |
| 117 | const std::string& header_value, |
| 118 | int load_flags, |
Arthur Sonzogni | c686e8f | 2024-01-11 08:36:37 | [diff] [blame] | 119 | const std::optional<net::CookiePartitionKey>& cookie_partition_key, |
Dylan Cutler | 72ac5509 | 2023-03-20 20:54:05 | [diff] [blame] | 120 | bool partitioned_state_allowed_only, |
Dylan Cutler | 108a4192 | 2022-01-05 18:16:23 | [diff] [blame] | 121 | OnClearSiteDataCallback callback) override; |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 122 | 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 Barnes | 76d6da9 | 2023-06-01 18:54:27 | [diff] [blame] | 127 | void OnSharedStorageHeaderReceived( |
| 128 | const url::Origin& request_origin, |
Yao Xiao | 7177f67 | 2024-11-26 17:22:50 | [diff] [blame] | 129 | std::vector<network::mojom::SharedStorageModifierMethodWithOptionsPtr> |
| 130 | methods_with_options, |
Yao Xiao | 08d1543 | 2024-12-18 00:56:36 | [diff] [blame] | 131 | const std::optional<std::string>& with_lock, |
Camillia Smith Barnes | 76d6da9 | 2023-06-01 18:54:27 | [diff] [blame] | 132 | OnSharedStorageHeaderReceivedCallback callback) override; |
Caleb Raitto | aa907661 | 2025-03-18 16:48:53 | [diff] [blame] | 133 | void OnAdAuctionEventRecordHeaderReceived( |
Maks Orlovich | 4347dea | 2025-04-17 20:57:07 | [diff] [blame] | 134 | network::AdAuctionEventRecord event_record, |
| 135 | const std::optional<url::Origin>& top_frame_origin) override; |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 136 | void Clone( |
| 137 | mojo::PendingReceiver<network::mojom::URLLoaderNetworkServiceObserver> |
| 138 | listener) override; |
Jonathan Hao | 3e33cb08 | 2024-03-06 19:36:01 | [diff] [blame] | 139 | void OnWebSocketConnectedToPrivateNetwork( |
| 140 | network::mojom::IPAddressSpace ip_address_space) override; |
Chris Thompson | dfd934f | 2025-02-14 06:34:57 | [diff] [blame] | 141 | 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-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 146 | |
Clark DuVall | 6e75164 | 2018-12-27 23:42:06 | [diff] [blame] | 147 | std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_; |
| 148 | |
Tarun Bansal | f153d683 | 2019-06-17 18:18:05 | [diff] [blame] | 149 | std::unique_ptr<WebRtcConnectionsObserver> webrtc_connections_observer_; |
| 150 | |
Xiaohan Wang | 1ecfd00 | 2022-01-19 22:33:10 | [diff] [blame] | 151 | #if BUILDFLAG(IS_ANDROID) |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 152 | std::unique_ptr<base::android::ApplicationStatusListener> |
| 153 | app_status_listener_; |
Matthew Denton | ce1ba15 | 2023-04-05 20:58:26 | [diff] [blame] | 154 | #endif |
| 155 | |
| 156 | #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) |
Julie Jeongeun Kim | f962da3 | 2019-11-29 17:43:25 | [diff] [blame] | 157 | mojo::Remote<network::mojom::NetworkChangeManager> network_change_manager_; |
Will Harris | 7bcc528 | 2022-07-29 00:51:03 | [diff] [blame] | 158 | #endif // BUILDFLAG(IS_ANDROID) |
| 159 | |
Liza Burakova | 1595a781 | 2023-09-27 15:03:32 | [diff] [blame] | 160 | #if BUILDFLAG(IS_WIN) |
Liza Burakova | 2707060 | 2022-07-01 05:27:40 | [diff] [blame] | 161 | SocketBrokerImpl socket_broker_; |
Liza Burakova | 1595a781 | 2023-09-27 15:03:32 | [diff] [blame] | 162 | #endif // BUILDFLAG(IS_WIN) |
Clark DuVall | 16acd1c | 2018-09-21 00:54:58 | [diff] [blame] | 163 | |
Dave Tapuska | 69f8925 | 2021-03-10 17:11:37 | [diff] [blame] | 164 | mojo::ReceiverSet<network::mojom::URLLoaderNetworkServiceObserver> |
| 165 | url_loader_network_service_observers_; |
John Abd-El-Malek | 576c613 | 2017-11-04 00:33:58 | [diff] [blame] | 166 | }; |
| 167 | |
| 168 | } // namespace content |
| 169 | |
Lei Zhang | 02a0ad7 | 2021-04-21 05:26:08 | [diff] [blame] | 170 | #endif // CONTENT_BROWSER_NETWORK_SERVICE_CLIENT_H_ |