dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "chrome/browser/net_benchmarking.h" |
| 6 | |
| 7 | #include <memory> |
| 8 | #include <utility> |
| 9 | |
| 10 | #include "base/bind.h" |
| 11 | #include "base/bind_helpers.h" |
| 12 | #include "base/command_line.h" |
| 13 | #include "base/macros.h" |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 14 | #include "base/time/time.h" |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 15 | #include "chrome/browser/predictors/loading_predictor.h" |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 16 | #include "chrome/common/chrome_switches.h" |
| 17 | #include "chrome/common/net_benchmarking.mojom.h" |
| 18 | #include "content/public/browser/browser_thread.h" |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 19 | #include "content/public/browser/render_process_host.h" |
| 20 | #include "content/public/browser/storage_partition.h" |
Julie Jeongeun Kim | 924acc8 | 2019-09-28 01:26:10 | [diff] [blame] | 21 | #include "mojo/public/cpp/bindings/self_owned_receiver.h" |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 22 | #include "services/network/public/mojom/network_context.mojom.h" |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 23 | |
| 24 | using content::BrowserThread; |
| 25 | |
| 26 | namespace { |
| 27 | |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 28 | network::mojom::NetworkContext* GetNetworkContext(int render_process_id) { |
| 29 | content::RenderProcessHost* render_process_host = |
| 30 | content::RenderProcessHost::FromID(render_process_id); |
| 31 | if (!render_process_host) |
| 32 | return nullptr; |
| 33 | return render_process_host->GetStoragePartition()->GetNetworkContext(); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 34 | } |
| 35 | |
| 36 | } // namespace |
| 37 | |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 38 | NetBenchmarking::NetBenchmarking( |
| 39 | base::WeakPtr<predictors::LoadingPredictor> loading_predictor, |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 40 | int render_process_id) |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 41 | : loading_predictor_(loading_predictor), |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 42 | render_process_id_(render_process_id) { |
| 43 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 44 | } |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 45 | |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 46 | NetBenchmarking::~NetBenchmarking() { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 47 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 48 | } |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 49 | |
| 50 | // static |
Alexandr Ilin | 4909ec8 | 2018-06-06 10:22:48 | [diff] [blame] | 51 | void NetBenchmarking::Create( |
| 52 | base::WeakPtr<predictors::LoadingPredictor> loading_predictor, |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 53 | int render_process_id, |
Julie Jeongeun Kim | 924acc8 | 2019-09-28 01:26:10 | [diff] [blame] | 54 | mojo::PendingReceiver<chrome::mojom::NetBenchmarking> receiver) { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 55 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
Julie Jeongeun Kim | 924acc8 | 2019-09-28 01:26:10 | [diff] [blame] | 56 | mojo::MakeSelfOwnedReceiver( |
| 57 | std::make_unique<NetBenchmarking>(std::move(loading_predictor), |
| 58 | render_process_id), |
| 59 | std::move(receiver)); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 60 | } |
| 61 | |
| 62 | // static |
| 63 | bool NetBenchmarking::CheckBenchmarkingEnabled() { |
| 64 | const base::CommandLine& command_line = |
| 65 | *base::CommandLine::ForCurrentProcess(); |
| 66 | return command_line.HasSwitch(switches::kEnableNetBenchmarking); |
| 67 | } |
| 68 | |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 69 | void NetBenchmarking::ClearCache(ClearCacheCallback callback) { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 70 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 71 | auto* network_context = GetNetworkContext(render_process_id_); |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 72 | CHECK(network_context); |
| 73 | network_context->ClearHttpCache(base::Time(), base::Time(), nullptr, |
| 74 | std::move(callback)); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 75 | } |
| 76 | |
| 77 | void NetBenchmarking::ClearHostResolverCache( |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 78 | ClearHostResolverCacheCallback callback) { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 79 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 80 | auto* network_context = GetNetworkContext(render_process_id_); |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 81 | CHECK(network_context); |
| 82 | network_context->ClearHostCache(nullptr, std::move(callback)); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 83 | } |
| 84 | |
| 85 | void NetBenchmarking::CloseCurrentConnections( |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 86 | CloseCurrentConnectionsCallback callback) { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 87 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 88 | auto* network_context = GetNetworkContext(render_process_id_); |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 89 | CHECK(network_context); |
| 90 | network_context->CloseAllConnections(std::move(callback)); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | void NetBenchmarking::ClearPredictorCache( |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 94 | ClearPredictorCacheCallback callback) { |
Robbie McElrath | b0f248c | 2018-07-24 19:44:16 | [diff] [blame] | 95 | DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 96 | if (loading_predictor_) |
| 97 | loading_predictor_->resource_prefetch_predictor()->DeleteAllUrls(); |
tzik | cd02d3b | 2018-08-09 21:32:47 | [diff] [blame] | 98 | std::move(callback).Run(); |
dvallet | 233f57ab | 2016-12-21 03:17:10 | [diff] [blame] | 99 | } |