diff options
author | derekjchow <derekjchow@chromium.org> | 2015-06-02 17:01:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-03 00:02:33 +0000 |
commit | 15b3f076092736bb58a2ad368d4cfe14308bb463 (patch) | |
tree | ed4c161da3f64c9f2e7a031160607a5d5879a61f /chromecast | |
parent | 5ddc2b7de39a0ac89b25fbdac9d150372eff4221 (diff) | |
download | chromium_src-15b3f076092736bb58a2ad368d4cfe14308bb463.zip chromium_src-15b3f076092736bb58a2ad368d4cfe14308bb463.tar.gz chromium_src-15b3f076092736bb58a2ad368d4cfe14308bb463.tar.bz2 |
[Chromecast] Refactor ConnectivityChecker for test.
Make ConnectivityChecker virtual and add default implementation.
Add FakeConnectivityChecker for use in tests.
TEST=Build cast_shell. Build/run internal unittests.
BUG=
Review URL: https://codereview.chromium.org/1152293006
Cr-Commit-Position: refs/heads/master@{#332499}
Diffstat (limited to 'chromecast')
-rw-r--r-- | chromecast/browser/cast_browser_main_parts.cc | 4 | ||||
-rw-r--r-- | chromecast/chromecast.gyp | 4 | ||||
-rw-r--r-- | chromecast/net/connectivity_checker.cc | 177 | ||||
-rw-r--r-- | chromecast/net/connectivity_checker.h | 68 | ||||
-rw-r--r-- | chromecast/net/connectivity_checker_impl.cc | 184 | ||||
-rw-r--r-- | chromecast/net/connectivity_checker_impl.h | 86 | ||||
-rw-r--r-- | chromecast/net/fake_connectivity_checker.cc | 32 | ||||
-rw-r--r-- | chromecast/net/fake_connectivity_checker.h | 32 |
8 files changed, 358 insertions, 229 deletions
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc index 9e2b84a..f4ea856 100644 --- a/chromecast/browser/cast_browser_main_parts.cc +++ b/chromecast/browser/cast_browser_main_parts.cc @@ -300,9 +300,9 @@ void CastBrowserMainParts::PreMainMessageLoopRun() { #endif // defined(OS_ANDROID) cast_browser_process_->SetConnectivityChecker( - make_scoped_refptr(new ConnectivityChecker( + ConnectivityChecker::Create( content::BrowserThread::GetMessageLoopProxyForThread( - content::BrowserThread::IO)))); + content::BrowserThread::IO))); url_request_context_factory_->InitializeOnUIThread(); diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp index 830c313..f0782ee 100644 --- a/chromecast/chromecast.gyp +++ b/chromecast/chromecast.gyp @@ -110,6 +110,10 @@ 'sources': [ 'net/connectivity_checker.cc', 'net/connectivity_checker.h', + 'net/connectivity_checker_impl.cc', + 'net/connectivity_checker_impl.h', + 'net/fake_connectivity_checker.cc', + 'net/fake_connectivity_checker.h', 'net/net_switches.cc', 'net/net_switches.h', 'net/net_util_cast.cc', diff --git a/chromecast/net/connectivity_checker.cc b/chromecast/net/connectivity_checker.cc index 017b65b..16417ab 100644 --- a/chromecast/net/connectivity_checker.cc +++ b/chromecast/net/connectivity_checker.cc @@ -4,73 +4,16 @@ #include "chromecast/net/connectivity_checker.h" -#include "base/command_line.h" -#include "base/logging.h" -#include "base/message_loop/message_loop.h" -#include "chromecast/net/net_switches.h" -#include "net/base/request_priority.h" -#include "net/http/http_response_headers.h" -#include "net/http/http_response_info.h" -#include "net/http/http_status_code.h" -#include "net/proxy/proxy_config.h" -#include "net/proxy/proxy_config_service_fixed.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_builder.h" +#include "chromecast/net/connectivity_checker_impl.h" namespace chromecast { -namespace { - -// How often connectivity checks are performed in seconds. -const unsigned int kConnectivityPeriodSeconds = 1; - -// Number of consecutive connectivity check errors before status is changed -// to offline. -const unsigned int kNumErrorsToNotifyOffline = 3; - -// Default url for connectivity checking. -const char kDefaultConnectivityCheckUrl[] = - "https://clients3.google.com/generate_204"; - -} // namespace - -ConnectivityChecker::ConnectivityChecker( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) +ConnectivityChecker::ConnectivityChecker() : connectivity_observer_list_( - new ObserverListThreadSafe<ConnectivityObserver>()), - task_runner_(task_runner), - connected_(false), - check_errors_(0) { - DCHECK(task_runner_.get()); - task_runner->PostTask(FROM_HERE, - base::Bind(&ConnectivityChecker::Initialize, this)); -} - -void ConnectivityChecker::Initialize() { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - base::CommandLine::StringType check_url_str = - command_line->GetSwitchValueNative(switches::kConnectivityCheckUrl); - connectivity_check_url_.reset(new GURL( - check_url_str.empty() ? kDefaultConnectivityCheckUrl : check_url_str)); - - net::URLRequestContextBuilder builder; - builder.set_proxy_config_service( - new net::ProxyConfigServiceFixed(net::ProxyConfig::CreateDirect())); - builder.DisableHttpCache(); - url_request_context_.reset(builder.Build()); - - net::NetworkChangeNotifier::AddConnectionTypeObserver(this); - net::NetworkChangeNotifier::AddIPAddressObserver(this); - task_runner_->PostTask(FROM_HERE, - base::Bind(&ConnectivityChecker::Check, this)); + new base::ObserverListThreadSafe<ConnectivityObserver>()) { } ConnectivityChecker::~ConnectivityChecker() { - DCHECK(task_runner_.get()); - net::NetworkChangeNotifier::RemoveIPAddressObserver(this); - net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); - task_runner_->DeleteSoon(FROM_HERE, url_request_context_.release()); - task_runner_->DeleteSoon(FROM_HERE, url_request_.release()); } void ConnectivityChecker::AddConnectivityObserver( @@ -83,116 +26,10 @@ void ConnectivityChecker::RemoveConnectivityObserver( connectivity_observer_list_->RemoveObserver(observer); } -bool ConnectivityChecker::Connected() const { - return connected_; -} - -void ConnectivityChecker::SetConnectedForTesting(bool connected) { - SetConnected(connected); -} - -void ConnectivityChecker::SetConnected(bool connected) { - if (connected_ == connected) - return; - - connected_ = connected; - connectivity_observer_list_->Notify( - FROM_HERE, &ConnectivityObserver::OnConnectivityChanged, connected); - LOG(INFO) << "Global connection is: " << (connected ? "Up" : "Down"); -} - -void ConnectivityChecker::Check() { - if (!task_runner_->BelongsToCurrentThread()) { - task_runner_->PostTask(FROM_HERE, - base::Bind(&ConnectivityChecker::Check, this)); - return; - } - DCHECK(url_request_context_.get()); - - // Don't check connectivity if network is offline, because Internet could be - // accessible via netifs ignored. - if (net::NetworkChangeNotifier::IsOffline()) - return; - - // If url_request_ is non-null, there is already a check going on. Don't - // start another. - if (url_request_.get()) - return; - - VLOG(1) << "Connectivity check: url=" << *connectivity_check_url_; - url_request_ = url_request_context_->CreateRequest( - *connectivity_check_url_, net::MAXIMUM_PRIORITY, this); - url_request_->set_method("HEAD"); - url_request_->Start(); -} - -void ConnectivityChecker::OnConnectionTypeChanged( - net::NetworkChangeNotifier::ConnectionType type) { - VLOG(2) << "OnConnectionTypeChanged " << type; - if (type == net::NetworkChangeNotifier::CONNECTION_NONE) - SetConnected(false); - - Cancel(); - Check(); -} - -void ConnectivityChecker::OnIPAddressChanged() { - VLOG(2) << "OnIPAddressChanged"; - - Cancel(); - Check(); -} - -void ConnectivityChecker::OnResponseStarted(net::URLRequest* request) { - int http_response_code = - (request->status().is_success() && - request->response_info().headers.get() != NULL) - ? request->response_info().headers->response_code() - : net::HTTP_BAD_REQUEST; - - // Clears resources. - url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. - - if (http_response_code < 400) { - VLOG(1) << "Connectivity check succeeded"; - check_errors_ = 0; - SetConnected(true); - return; - } - VLOG(1) << "Connectivity check failed: " << http_response_code; - OnUrlRequestError(); -} - -void ConnectivityChecker::OnSSLCertificateError(net::URLRequest* request, - const net::SSLInfo& ssl_info, - bool fatal) { - LOG(ERROR) << "OnSSLCertificateError"; - OnUrlRequestError(); -} - -void ConnectivityChecker::OnUrlRequestError() { - ++check_errors_; - if (check_errors_ > kNumErrorsToNotifyOffline) { - check_errors_ = kNumErrorsToNotifyOffline; - SetConnected(false); - } - url_request_.reset(NULL); - // Check again. - task_runner_->PostDelayedTask( - FROM_HERE, base::Bind(&ConnectivityChecker::Check, this), - base::TimeDelta::FromSeconds(kConnectivityPeriodSeconds)); -} - -void ConnectivityChecker::OnReadCompleted(net::URLRequest* request, - int bytes_read) { - NOTREACHED(); -} - -void ConnectivityChecker::Cancel() { - if (url_request_.get()) { - VLOG(2) << "Cancel connectivity check in progress"; - url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. - } +// static +scoped_refptr<ConnectivityChecker> ConnectivityChecker::Create( + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { + return make_scoped_refptr(new ConnectivityCheckerImpl(task_runner)); } } // namespace chromecast diff --git a/chromecast/net/connectivity_checker.h b/chromecast/net/connectivity_checker.h index e01f08e..0c843a0 100644 --- a/chromecast/net/connectivity_checker.h +++ b/chromecast/net/connectivity_checker.h @@ -7,9 +7,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" -#include "base/memory/weak_ptr.h" -#include "net/base/network_change_notifier.h" -#include "net/url_request/url_request.h" +#include "base/observer_list_threadsafe.h" class GURL; @@ -17,20 +15,11 @@ namespace base { class SingleThreadTaskRunner; } -namespace net { -class SSLInfo; -class URLRequestContext; -} - namespace chromecast { -// Simple class to check network connectivity by sending a HEAD http request -// to given url. +// Checks if internet connectivity is available. class ConnectivityChecker - : public base::RefCountedThreadSafe<ConnectivityChecker>, - public net::URLRequest::Delegate, - public net::NetworkChangeNotifier::ConnectionTypeObserver, - public net::NetworkChangeNotifier::IPAddressObserver { + : public base::RefCountedThreadSafe<ConnectivityChecker> { public: class ConnectivityObserver { public: @@ -45,63 +34,28 @@ class ConnectivityChecker DISALLOW_COPY_AND_ASSIGN(ConnectivityObserver); }; - explicit ConnectivityChecker( + static scoped_refptr<ConnectivityChecker> Create( const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); + ConnectivityChecker(); + void AddConnectivityObserver(ConnectivityObserver* observer); void RemoveConnectivityObserver(ConnectivityObserver* observer); // Returns if there is internet connectivity - bool Connected() const; + virtual bool Connected() const = 0; // Checks for connectivity - void Check(); - - // TODO(derek): refactor ConnectivityChecker to make a fully functional mock. - void SetConnectedForTesting(bool connected); + virtual void Check() = 0; protected: - ~ConnectivityChecker() override; + virtual ~ConnectivityChecker(); + const scoped_refptr<base::ObserverListThreadSafe<ConnectivityObserver>> + connectivity_observer_list_; private: friend class base::RefCountedThreadSafe<ConnectivityChecker>; - // UrlRequest::Delegate implementation: - void OnResponseStarted(net::URLRequest* request) override; - void OnReadCompleted(net::URLRequest* request, int bytes_read) override; - void OnSSLCertificateError(net::URLRequest* request, - const net::SSLInfo& ssl_info, - bool fatal) override; - - // Initializes ConnectivityChecker - void Initialize(); - - // NetworkChangeNotifier::ConnectionTypeObserver implementation: - void OnConnectionTypeChanged( - net::NetworkChangeNotifier::ConnectionType type) override; - - // net::NetworkChangeNotifier::IPAddressObserver implementation: - void OnIPAddressChanged() override; - - // Cancels current connectivity checking in progress. - void Cancel(); - - // Sets connectivity and alerts observers if it has changed - void SetConnected(bool connected); - - // Called when URL request failed. - void OnUrlRequestError(); - - scoped_ptr<GURL> connectivity_check_url_; - scoped_ptr<net::URLRequestContext> url_request_context_; - scoped_ptr<net::URLRequest> url_request_; - const scoped_refptr<ObserverListThreadSafe<ConnectivityObserver> > - connectivity_observer_list_; - const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - bool connected_; - // Number of connectivity check errors. - unsigned int check_errors_; - DISALLOW_COPY_AND_ASSIGN(ConnectivityChecker); }; diff --git a/chromecast/net/connectivity_checker_impl.cc b/chromecast/net/connectivity_checker_impl.cc new file mode 100644 index 0000000..f17a73f --- /dev/null +++ b/chromecast/net/connectivity_checker_impl.cc @@ -0,0 +1,184 @@ +// Copyright 2015 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 "chromecast/net/connectivity_checker_impl.h" + +#include "base/command_line.h" +#include "base/logging.h" +#include "base/message_loop/message_loop.h" +#include "chromecast/net/net_switches.h" +#include "net/base/request_priority.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_response_info.h" +#include "net/http/http_status_code.h" +#include "net/proxy/proxy_config.h" +#include "net/proxy/proxy_config_service_fixed.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_builder.h" + +namespace chromecast { + +namespace { + +// How often connectivity checks are performed in seconds. +const unsigned int kConnectivityPeriodSeconds = 1; + +// Number of consecutive connectivity check errors before status is changed +// to offline. +const unsigned int kNumErrorsToNotifyOffline = 3; + +// Default url for connectivity checking. +const char kDefaultConnectivityCheckUrl[] = + "https://clients3.google.com/generate_204"; + +} // namespace + +ConnectivityCheckerImpl::ConnectivityCheckerImpl( + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) + : ConnectivityChecker(), + task_runner_(task_runner), + connected_(false), + check_errors_(0) { + DCHECK(task_runner_.get()); + task_runner->PostTask(FROM_HERE, + base::Bind(&ConnectivityCheckerImpl::Initialize, this)); +} + +void ConnectivityCheckerImpl::Initialize() { + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + base::CommandLine::StringType check_url_str = + command_line->GetSwitchValueNative(switches::kConnectivityCheckUrl); + connectivity_check_url_.reset(new GURL( + check_url_str.empty() ? kDefaultConnectivityCheckUrl : check_url_str)); + + net::URLRequestContextBuilder builder; + builder.set_proxy_config_service( + new net::ProxyConfigServiceFixed(net::ProxyConfig::CreateDirect())); + builder.DisableHttpCache(); + url_request_context_.reset(builder.Build()); + + net::NetworkChangeNotifier::AddConnectionTypeObserver(this); + net::NetworkChangeNotifier::AddIPAddressObserver(this); + task_runner_->PostTask(FROM_HERE, + base::Bind(&ConnectivityCheckerImpl::Check, this)); +} + +ConnectivityCheckerImpl::~ConnectivityCheckerImpl() { + DCHECK(task_runner_.get()); + net::NetworkChangeNotifier::RemoveIPAddressObserver(this); + net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); + task_runner_->DeleteSoon(FROM_HERE, url_request_.release()); + task_runner_->DeleteSoon(FROM_HERE, url_request_context_.release()); +} + +bool ConnectivityCheckerImpl::Connected() const { + return connected_; +} + +void ConnectivityCheckerImpl::SetConnected(bool connected) { + if (connected_ == connected) + return; + + connected_ = connected; + connectivity_observer_list_->Notify( + FROM_HERE, &ConnectivityObserver::OnConnectivityChanged, connected); + LOG(INFO) << "Global connection is: " << (connected ? "Up" : "Down"); +} + +void ConnectivityCheckerImpl::Check() { + if (!task_runner_->BelongsToCurrentThread()) { + task_runner_->PostTask(FROM_HERE, + base::Bind(&ConnectivityCheckerImpl::Check, this)); + return; + } + DCHECK(url_request_context_.get()); + + // Don't check connectivity if network is offline, because Internet could be + // accessible via netifs ignored. + if (net::NetworkChangeNotifier::IsOffline()) + return; + + // If url_request_ is non-null, there is already a check going on. Don't + // start another. + if (url_request_.get()) + return; + + VLOG(1) << "Connectivity check: url=" << *connectivity_check_url_; + url_request_ = url_request_context_->CreateRequest( + *connectivity_check_url_, net::MAXIMUM_PRIORITY, this); + url_request_->set_method("HEAD"); + url_request_->Start(); +} + +void ConnectivityCheckerImpl::OnConnectionTypeChanged( + net::NetworkChangeNotifier::ConnectionType type) { + VLOG(2) << "OnConnectionTypeChanged " << type; + if (type == net::NetworkChangeNotifier::CONNECTION_NONE) + SetConnected(false); + + Cancel(); + Check(); +} + +void ConnectivityCheckerImpl::OnIPAddressChanged() { + VLOG(2) << "OnIPAddressChanged"; + + Cancel(); + Check(); +} + +void ConnectivityCheckerImpl::OnResponseStarted(net::URLRequest* request) { + int http_response_code = + (request->status().is_success() && + request->response_info().headers.get() != NULL) + ? request->response_info().headers->response_code() + : net::HTTP_BAD_REQUEST; + + // Clears resources. + url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. + + if (http_response_code < 400) { + VLOG(1) << "Connectivity check succeeded"; + check_errors_ = 0; + SetConnected(true); + return; + } + VLOG(1) << "Connectivity check failed: " << http_response_code; + OnUrlRequestError(); +} + +void ConnectivityCheckerImpl::OnSSLCertificateError( + net::URLRequest* request, + const net::SSLInfo& ssl_info, + bool fatal) { + LOG(ERROR) << "OnSSLCertificateError"; + OnUrlRequestError(); +} + +void ConnectivityCheckerImpl::OnUrlRequestError() { + ++check_errors_; + if (check_errors_ > kNumErrorsToNotifyOffline) { + check_errors_ = kNumErrorsToNotifyOffline; + SetConnected(false); + } + url_request_.reset(NULL); + // Check again. + task_runner_->PostDelayedTask( + FROM_HERE, base::Bind(&ConnectivityCheckerImpl::Check, this), + base::TimeDelta::FromSeconds(kConnectivityPeriodSeconds)); +} + +void ConnectivityCheckerImpl::OnReadCompleted(net::URLRequest* request, + int bytes_read) { + NOTREACHED(); +} + +void ConnectivityCheckerImpl::Cancel() { + if (url_request_.get()) { + VLOG(2) << "Cancel connectivity check in progress"; + url_request_.reset(NULL); // URLRequest::Cancel() is called in destructor. + } +} + +} // namespace chromecast diff --git a/chromecast/net/connectivity_checker_impl.h b/chromecast/net/connectivity_checker_impl.h new file mode 100644 index 0000000..6ebe718 --- /dev/null +++ b/chromecast/net/connectivity_checker_impl.h @@ -0,0 +1,86 @@ +// Copyright 2015 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. + +#ifndef CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_ +#define CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_ + +#include "chromecast/net/connectivity_checker.h" +#include "net/base/network_change_notifier.h" +#include "net/url_request/url_request.h" + +class GURL; + +namespace base { +class SingleThreadTaskRunner; +} + +namespace net { +class SSLInfo; +class URLRequest; +class URLRequestContext; +} + +namespace chromecast { + +// Simple class to check network connectivity by sending a HEAD http request +// to given url. +class ConnectivityCheckerImpl + : public ConnectivityChecker, + public net::URLRequest::Delegate, + public net::NetworkChangeNotifier::ConnectionTypeObserver, + public net::NetworkChangeNotifier::IPAddressObserver { + public: + explicit ConnectivityCheckerImpl( + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); + + // ConnectivityChecker implementation: + bool Connected() const override; + void Check() override; + + protected: + ~ConnectivityCheckerImpl() override; + + private: + // UrlRequest::Delegate implementation: + void OnResponseStarted(net::URLRequest* request) override; + void OnReadCompleted(net::URLRequest* request, int bytes_read) override; + void OnSSLCertificateError(net::URLRequest* request, + const net::SSLInfo& ssl_info, + bool fatal) override; + + // Initializes ConnectivityChecker + void Initialize(); + + // NetworkChangeNotifier::ConnectionTypeObserver implementation: + void OnConnectionTypeChanged( + net::NetworkChangeNotifier::ConnectionType type) override; + + // net::NetworkChangeNotifier::IPAddressObserver implementation: + void OnIPAddressChanged() override; + + // Cancels current connectivity checking in progress. + void Cancel(); + + // Sets connectivity and alerts observers if it has changed + void SetConnected(bool connected); + + // Called when URL request failed. + void OnUrlRequestError(); + + scoped_ptr<GURL> connectivity_check_url_; + scoped_ptr<net::URLRequestContext> url_request_context_; + scoped_ptr<net::URLRequest> url_request_; + const scoped_refptr<ObserverListThreadSafe<ConnectivityObserver> > + connectivity_observer_list_; + const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + bool connected_; + // Number of connectivity check errors. + unsigned int check_errors_; + + DISALLOW_COPY_AND_ASSIGN(ConnectivityCheckerImpl); +}; + +} // namespace chromecast + +#endif // CHROMECAST_NET_CONNECTIVITY_CHECKER_IMPL_H_ diff --git a/chromecast/net/fake_connectivity_checker.cc b/chromecast/net/fake_connectivity_checker.cc new file mode 100644 index 0000000..7b97d8a --- /dev/null +++ b/chromecast/net/fake_connectivity_checker.cc @@ -0,0 +1,32 @@ +// Copyright 2015 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 "chromecast/net/fake_connectivity_checker.h" + +namespace chromecast { + +FakeConnectivityChecker::FakeConnectivityChecker() + : ConnectivityChecker(), + connected_(true) { +} + +FakeConnectivityChecker::~FakeConnectivityChecker() {} + +bool FakeConnectivityChecker::Connected() const { + return connected_; +} + +void FakeConnectivityChecker::Check() { +} + +void FakeConnectivityChecker::SetConnectedForTest(bool connected) { + if (connected_ == connected) + return; + + connected_ = connected; + connectivity_observer_list_->Notify( + FROM_HERE, &ConnectivityObserver::OnConnectivityChanged, connected); +} + +} // namespace chromecast diff --git a/chromecast/net/fake_connectivity_checker.h b/chromecast/net/fake_connectivity_checker.h new file mode 100644 index 0000000..7381b8f --- /dev/null +++ b/chromecast/net/fake_connectivity_checker.h @@ -0,0 +1,32 @@ +// Copyright 2015 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 "chromecast/net/connectivity_checker.h" + +namespace chromecast { + +// A simple fake connectivity checker for testing. Will appeared to be +// connected by default. +class FakeConnectivityChecker : public ConnectivityChecker { + public: + FakeConnectivityChecker(); + + // ConnectivityChecker implementation: + bool Connected() const override; + void Check() override; + + // Sets connectivity and notifies observers if it has changed. + void SetConnectedForTest(bool connected); + + protected: + ~FakeConnectivityChecker() override; + + private: + friend class base::RefCountedThreadSafe<FakeConnectivityChecker>; + bool connected_; + + DISALLOW_COPY_AND_ASSIGN(FakeConnectivityChecker); +}; + +} // namespace chromecast |