// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "weblayer/browser/browser_process.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" #include "base/time/default_clock.h" #include "base/time/default_tick_clock.h" #include "components/network_time/network_time_tracker.h" #include "components/prefs/pref_service.h" #include "content/public/browser/network_quality_observer_factory.h" #include "content/public/browser/network_service_instance.h" #include "services/network/public/cpp/network_quality_tracker.h" #include "weblayer/browser/system_network_context_manager.h" #if defined(OS_ANDROID) #include "weblayer/browser/safe_browsing/safe_browsing_service.h" #include "weblayer/browser/url_bar/page_info_client_impl.h" #endif namespace weblayer { namespace { BrowserProcess* g_browser_process = nullptr; } // namespace BrowserProcess::BrowserProcess(std::unique_ptr local_state) : local_state_(std::move(local_state)) { g_browser_process = this; } BrowserProcess::~BrowserProcess() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); g_browser_process = nullptr; SystemNetworkContextManager::DeleteInstance(); } // static BrowserProcess* BrowserProcess::GetInstance() { return g_browser_process; } void BrowserProcess::PreMainMessageLoopRun() { CreateNetworkQualityObserver(); #if defined(OS_ANDROID) page_info::SetPageInfoClient(PageInfoClientImpl::GetInstance()); #endif } void BrowserProcess::StartTearDown() { if (local_state_) local_state_->CommitPendingWrite(); } PrefService* BrowserProcess::GetLocalState() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return local_state_.get(); } scoped_refptr BrowserProcess::GetSharedURLLoaderFactory() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return SystemNetworkContextManager::GetInstance() ->GetSharedURLLoaderFactory(); } network_time::NetworkTimeTracker* BrowserProcess::GetNetworkTimeTracker() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!network_time_tracker_) { network_time_tracker_ = std::make_unique( base::WrapUnique(new base::DefaultClock()), base::WrapUnique(new base::DefaultTickClock()), GetLocalState(), GetSharedURLLoaderFactory()); } return network_time_tracker_.get(); } network::NetworkQualityTracker* BrowserProcess::GetNetworkQualityTracker() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!network_quality_tracker_) { network_quality_tracker_ = std::make_unique( base::BindRepeating(&content::GetNetworkService)); } return network_quality_tracker_.get(); } void BrowserProcess::CreateNetworkQualityObserver() { DCHECK(!network_quality_observer_); network_quality_observer_ = content::CreateNetworkQualityObserver(GetNetworkQualityTracker()); DCHECK(network_quality_observer_); } #if defined(OS_ANDROID) SafeBrowsingService* BrowserProcess::GetSafeBrowsingService( std::string user_agent) { if (!safe_browsing_service_) { // Create and initialize safe_browsing_service on first get. // Note: Initialize() needs to happen on UI thread. safe_browsing_service_ = std::make_unique(user_agent); safe_browsing_service_->Initialize(); } return safe_browsing_service_.get(); } void BrowserProcess::StopSafeBrowsingService() { if (safe_browsing_service_) { safe_browsing_service_->StopDBManager(); } } #endif } // namespace weblayer