Commit d5023862 authored by Mohit Hotwani's avatar Mohit Hotwani Committed by Commit Bot

Update connectivity checker.

1) Use url_loader instead of URLRequest.
2) Use network_connection_tracker instead of
   network change notifier.

Bug: internal b/139539332
Change-Id: Ia84e3d62d22fd97d440ecf7e148ce8e663a9568d
Merge-With: eureka-internal/255804
Merge-With: eureka-internal/305059
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1762598
Commit-Queue: Mohit Hotwani <hmohit@chromium.org>
Reviewed-by: default avatarMaks Orlovich <morlovich@chromium.org>
Reviewed-by: default avatarJunbo Ke <juke@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#690453}
parent f0527e35
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/storage_partition.h" #include "content/public/browser/storage_partition.h"
#include "content/public/browser/system_connector.h" #include "content/public/browser/system_connector.h"
...@@ -506,12 +507,16 @@ void CastBrowserMainParts::PreMainMessageLoopRun() { ...@@ -506,12 +507,16 @@ void CastBrowserMainParts::PreMainMessageLoopRun() {
url_request_context_factory_->InitializeOnUIThread(nullptr); url_request_context_factory_->InitializeOnUIThread(nullptr);
cast_browser_process_->SetBrowserContext(
std::make_unique<CastBrowserContext>());
cast_browser_process_->SetConnectivityChecker(ConnectivityChecker::Create( cast_browser_process_->SetConnectivityChecker(ConnectivityChecker::Create(
base::CreateSingleThreadTaskRunner({content::BrowserThread::IO}), base::CreateSingleThreadTaskRunner({content::BrowserThread::IO}),
url_request_context_factory_->GetSystemGetter())); content::BrowserContext::GetDefaultStoragePartition(
cast_browser_process_->browser_context())
->GetURLLoaderFactoryForBrowserProcessIOThread(),
content::GetNetworkConnectionTracker()));
cast_browser_process_->SetBrowserContext(
std::make_unique<CastBrowserContext>());
cast_browser_process_->SetMetricsServiceClient( cast_browser_process_->SetMetricsServiceClient(
std::make_unique<metrics::CastMetricsServiceClient>( std::make_unique<metrics::CastMetricsServiceClient>(
cast_browser_process_->browser_client(), cast_browser_process_->browser_client(),
......
...@@ -34,6 +34,8 @@ cast_source_set("net") { ...@@ -34,6 +34,8 @@ cast_source_set("net") {
"//chromecast/public", "//chromecast/public",
"//components/proxy_config", "//components/proxy_config",
"//net", "//net",
"//services/network/public/cpp",
"//services/network/public/mojom",
] ]
if (is_fuchsia) { if (is_fuchsia) {
......
include_rules = [ include_rules = [
"+components/proxy_config", "+components/proxy_config",
"+net", "+net",
"+services/network/public/cpp",
"+services/network/public/mojom",
] ]
...@@ -6,13 +6,16 @@ ...@@ -6,13 +6,16 @@
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "chromecast/net/connectivity_checker_impl.h" #include "chromecast/net/connectivity_checker_impl.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
namespace chromecast { namespace chromecast {
ConnectivityChecker::ConnectivityChecker() ConnectivityChecker::ConnectivityChecker(
: connectivity_observer_list_( scoped_refptr<base::SingleThreadTaskRunner> task_runner)
new base::ObserverListThreadSafe<ConnectivityObserver>()) { : RefCountedDeleteOnSequence(std::move(task_runner)),
} connectivity_observer_list_(
base::MakeRefCounted<
base::ObserverListThreadSafe<ConnectivityObserver>>()) {}
ConnectivityChecker::~ConnectivityChecker() { ConnectivityChecker::~ConnectivityChecker() {
} }
...@@ -36,9 +39,12 @@ void ConnectivityChecker::Notify(bool connected) { ...@@ -36,9 +39,12 @@ void ConnectivityChecker::Notify(bool connected) {
// static // static
scoped_refptr<ConnectivityChecker> ConnectivityChecker::Create( scoped_refptr<ConnectivityChecker> ConnectivityChecker::Create(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
net::URLRequestContextGetter* url_request_context_getter) { std::unique_ptr<network::SharedURLLoaderFactoryInfo>
url_loader_factory_info,
network::NetworkConnectionTracker* network_connection_tracker) {
return ConnectivityCheckerImpl::Create(task_runner, return ConnectivityCheckerImpl::Create(task_runner,
url_request_context_getter); std::move(url_loader_factory_info),
network_connection_tracker);
} }
} // namespace chromecast } // namespace chromecast
...@@ -8,22 +8,24 @@ ...@@ -8,22 +8,24 @@
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted_delete_on_sequence.h"
#include "base/observer_list_threadsafe.h" #include "base/observer_list_threadsafe.h"
#include "base/sequenced_task_runner_helpers.h"
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
} }
namespace net { namespace network {
class URLRequestContextGetter; class SharedURLLoaderFactoryInfo;
} class NetworkConnectionTracker;
} // namespace network
namespace chromecast { namespace chromecast {
// Checks if internet connectivity is available. // Checks if internet connectivity is available.
class ConnectivityChecker class ConnectivityChecker
: public base::RefCountedThreadSafe<ConnectivityChecker> { : public base::RefCountedDeleteOnSequence<ConnectivityChecker> {
public: public:
class ConnectivityObserver { class ConnectivityObserver {
public: public:
...@@ -40,9 +42,9 @@ class ConnectivityChecker ...@@ -40,9 +42,9 @@ class ConnectivityChecker
static scoped_refptr<ConnectivityChecker> Create( static scoped_refptr<ConnectivityChecker> Create(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
net::URLRequestContextGetter* url_request_context_getter); std::unique_ptr<network::SharedURLLoaderFactoryInfo>
url_loader_factory_info,
ConnectivityChecker(); network::NetworkConnectionTracker* network_connection_tracker);
void AddConnectivityObserver(ConnectivityObserver* observer); void AddConnectivityObserver(ConnectivityObserver* observer);
void RemoveConnectivityObserver(ConnectivityObserver* observer); void RemoveConnectivityObserver(ConnectivityObserver* observer);
...@@ -54,13 +56,16 @@ class ConnectivityChecker ...@@ -54,13 +56,16 @@ class ConnectivityChecker
virtual void Check() = 0; virtual void Check() = 0;
protected: protected:
explicit ConnectivityChecker(
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
virtual ~ConnectivityChecker(); virtual ~ConnectivityChecker();
// Notifies observes that connectivity has changed. // Notifies observes that connectivity has changed.
void Notify(bool connected); void Notify(bool connected);
private: private:
friend class base::RefCountedThreadSafe<ConnectivityChecker>; friend class base::RefCountedDeleteOnSequence<ConnectivityChecker>;
friend class base::DeleteHelper<ConnectivityChecker>;
const scoped_refptr<base::ObserverListThreadSafe<ConnectivityObserver>> const scoped_refptr<base::ObserverListThreadSafe<ConnectivityObserver>>
connectivity_observer_list_; connectivity_observer_list_;
......
This diff is collapsed.
...@@ -5,24 +5,28 @@ ...@@ -5,24 +5,28 @@
#ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_ #ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_
#define CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_ #define CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_
#include <memory>
#include "base/cancelable_callback.h" #include "base/cancelable_callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "chromecast/net/connectivity_checker.h" #include "chromecast/net/connectivity_checker.h"
#include "net/base/network_change_notifier.h" #include "services/network/public/cpp/network_connection_tracker.h"
#include "net/url_request/url_request.h"
class GURL; class GURL;
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
} } // namespace base
namespace net { namespace net {
class SSLInfo; class HttpResponseHeaders;
class URLRequest; } // namespace net
class URLRequestContext;
class URLRequestContextGetter; namespace network {
} class SharedURLLoaderFactory;
class SimpleURLLoader;
} // namespace network
namespace chromecast { namespace chromecast {
...@@ -30,13 +34,14 @@ namespace chromecast { ...@@ -30,13 +34,14 @@ namespace chromecast {
// to given url. // to given url.
class ConnectivityCheckerImpl class ConnectivityCheckerImpl
: public ConnectivityChecker, : public ConnectivityChecker,
public net::URLRequest::Delegate, public network::NetworkConnectionTracker::NetworkConnectionObserver {
public net::NetworkChangeNotifier::NetworkChangeObserver {
public: public:
// Connectivity checking and initialization will run on task_runner. // Connectivity checking and initialization will run on task_runner.
static scoped_refptr<ConnectivityCheckerImpl> Create( static scoped_refptr<ConnectivityCheckerImpl> Create(
scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<base::SingleThreadTaskRunner> task_runner,
net::URLRequestContextGetter* url_request_context_getter); std::unique_ptr<network::SharedURLLoaderFactoryInfo>
url_loader_factory_info,
network::NetworkConnectionTracker* network_connection_tracker);
// ConnectivityChecker implementation: // ConnectivityChecker implementation:
bool Connected() const override; bool Connected() const override;
...@@ -44,26 +49,23 @@ class ConnectivityCheckerImpl ...@@ -44,26 +49,23 @@ class ConnectivityCheckerImpl
protected: protected:
explicit ConnectivityCheckerImpl( explicit ConnectivityCheckerImpl(
scoped_refptr<base::SingleThreadTaskRunner> task_runner); scoped_refptr<base::SingleThreadTaskRunner> task_runner,
network::NetworkConnectionTracker* network_connection_tracker);
~ConnectivityCheckerImpl() override; ~ConnectivityCheckerImpl() override;
private: private:
// UrlRequest::Delegate implementation:
void OnResponseStarted(net::URLRequest* request, int net_error) override;
void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
void OnSSLCertificateError(net::URLRequest* request,
int net_error,
const net::SSLInfo& ssl_info,
bool fatal) override;
// Initializes ConnectivityChecker // Initializes ConnectivityChecker
void Initialize(net::URLRequestContextGetter* url_request_context_getter); void Initialize(std::unique_ptr<network::SharedURLLoaderFactoryInfo>
url_loader_factory_info);
// network::NetworkConnectionTracker::NetworkConnectionObserver
// implementation:
void OnConnectionChanged(network::mojom::ConnectionType type) override;
// net::NetworkChangeNotifier::NetworkChangeObserver implementation: void OnConnectionChangedInternal();
void OnNetworkChanged(
net::NetworkChangeNotifier::ConnectionType type) override;
void OnNetworkChangedInternal(); void OnConnectivityCheckComplete(
scoped_refptr<net::HttpResponseHeaders> headers);
// Cancels current connectivity checking in progress. // Cancels current connectivity checking in progress.
void Cancel(); void Cancel();
...@@ -86,17 +88,17 @@ class ConnectivityCheckerImpl ...@@ -86,17 +88,17 @@ class ConnectivityCheckerImpl
void CheckInternal(); void CheckInternal();
std::unique_ptr<GURL> connectivity_check_url_; std::unique_ptr<GURL> connectivity_check_url_;
scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
net::URLRequestContext* url_request_context_; std::unique_ptr<network::SimpleURLLoader> url_loader_;
std::unique_ptr<net::URLRequest> url_request_;
const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
network::NetworkConnectionTracker* const network_connection_tracker_;
// connected_lock_ protects access to connected_ which is shared across // connected_lock_ protects access to connected_ which is shared across
// threads. // threads.
mutable base::Lock connected_lock_; mutable base::Lock connected_lock_;
bool connected_; bool connected_;
net::NetworkChangeNotifier::ConnectionType connection_type_; network::mojom::ConnectionType connection_type_;
// Number of connectivity check errors. // Number of connectivity check errors.
unsigned int check_errors_; unsigned int check_errors_;
bool network_changed_pending_; bool network_changed_pending_;
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "chromecast/net/fake_connectivity_checker.h" #include "chromecast/net/fake_connectivity_checker.h"
#include "base/threading/thread_task_runner_handle.h"
namespace chromecast { namespace chromecast {
FakeConnectivityChecker::FakeConnectivityChecker() FakeConnectivityChecker::FakeConnectivityChecker()
: ConnectivityChecker(), : ConnectivityChecker(base::ThreadTaskRunnerHandle::Get()),
connected_(true) { connected_(true) {}
}
FakeConnectivityChecker::~FakeConnectivityChecker() {} FakeConnectivityChecker::~FakeConnectivityChecker() {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment