clock_skew_tool.cc 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2021 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. #include "tools/privacy_budget/clock_skew/clock_skew_tool.h"
  5. #include "base/check.h"
  6. #include "base/check_op.h"
  7. #include "base/metrics/field_trial_param_associator.h"
  8. #include "base/task/thread_pool/thread_pool_instance.h"
  9. #include "base/time/default_clock.h"
  10. #include "base/time/default_tick_clock.h"
  11. #include "components/network_time/network_time_tracker.h"
  12. #include "content/public/browser/network_service_instance.h"
  13. #include "mojo/core/embedder/embedder.h"
  14. #include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
  15. #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
  16. #include "services/network/public/mojom/network_context.mojom-forward.h"
  17. namespace clock_skew {
  18. ClockSkewTool::ClockSkewTool() {
  19. base::ThreadPoolInstance::CreateAndStartWithDefaultParams("clock_skew_tool");
  20. features_.InitAndEnableFeatureWithParameters(
  21. network_time::kNetworkTimeServiceQuerying,
  22. {// Guarantee that the `NetworkTimeTracker::ShouldIssueTimeQuery` will
  23. // not choose to rate-limit our requested queries.
  24. {"RandomQueryProbability", "1.0"},
  25. {"FetchBehavior", "background-and-on-demand"},
  26. {"CheckTimeInterval", "10s"},
  27. {"BackoffInterval", "10s"},
  28. {"ClockDriftSamples", "2"},
  29. {"ClockDriftSamplesDistance", "2s"}});
  30. network_time::NetworkTimeTracker::RegisterPrefs(pref_service_.registry());
  31. // Initialize the network service.
  32. mojo::core::Init();
  33. mojo::Remote<network::mojom::NetworkService> network_service_remote;
  34. network_service_ = network::NetworkService::Create(
  35. network_service_remote.BindNewPipeAndPassReceiver());
  36. network::mojom::NetworkContextParamsPtr network_context_params =
  37. network::mojom::NetworkContextParams::New();
  38. network_context_params->cert_verifier_params = content::GetCertVerifierParams(
  39. cert_verifier::mojom::CertVerifierCreationParams::New());
  40. network_context_params->enable_brotli = true;
  41. mojo::Remote<network::mojom::NetworkContext> network_context_remote;
  42. network_context_ = std::make_unique<network::NetworkContext>(
  43. network_service_.get(),
  44. network_context_remote.BindNewPipeAndPassReceiver(),
  45. std::move(network_context_params));
  46. network::mojom::URLLoaderFactoryParamsPtr url_loader_factory_params =
  47. network::mojom::URLLoaderFactoryParams::New();
  48. url_loader_factory_params->process_id = network::mojom::kBrowserProcessId;
  49. network_context_->CreateURLLoaderFactory(
  50. url_loader_factory_.BindNewPipeAndPassReceiver(),
  51. std::move(url_loader_factory_params));
  52. shared_url_loader_factory_ =
  53. base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
  54. url_loader_factory_.get());
  55. tracker_ = std::make_unique<network_time::NetworkTimeTracker>(
  56. std::make_unique<base::DefaultClock>(),
  57. std::make_unique<base::DefaultTickClock>(), &pref_service_,
  58. shared_url_loader_factory_);
  59. CHECK(tracker_->AreTimeFetchesEnabled());
  60. CHECK_EQ(
  61. tracker_->GetFetchBehavior(),
  62. network_time::NetworkTimeTracker::FETCHES_IN_BACKGROUND_AND_ON_DEMAND);
  63. }
  64. ClockSkewTool::~ClockSkewTool() = default;
  65. } // namespace clock_skew