Commit dc2a716c authored by Robbie McElrath's avatar Robbie McElrath Committed by Commit Bot

Migrate WaitForNetworkCallbackHelper to NetworkConnectionTracker

This migrates WaitForNetworkCallbackHelper from NetworkChangeNotifier
to NetworkConnectionTracker, which works with the network service
enabled.

Bug: 887056
Cq-Include-Trybots: luci.chromium.try:ios-simulator-cronet;luci.chromium.try:ios-simulator-full-configs
Change-Id: I70cc4863630ffbbd808ed91f5b4cee7dcc003296
Reviewed-on: https://chromium-review.googlesource.com/1239261Reviewed-by: default avatarMihai Sardarescu <msarda@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Commit-Queue: Robbie McElrath <rmcelrath@chromium.org>
Cr-Commit-Position: refs/heads/master@{#596291}
parent 34af3640
include_rules = [
"+ios/web/public",
"+services/network/public",
"+services/network/test",
"+third_party/ocmock",
]
......@@ -4,17 +4,19 @@
#include "components/signin/ios/browser/wait_for_network_callback_helper.h"
WaitForNetworkCallbackHelper::WaitForNetworkCallbackHelper() {
net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
WaitForNetworkCallbackHelper::WaitForNetworkCallbackHelper(
network::NetworkConnectionTracker* network_connection_tracker)
: network_connection_tracker_(network_connection_tracker) {
network_connection_tracker_->AddNetworkConnectionObserver(this);
}
WaitForNetworkCallbackHelper::~WaitForNetworkCallbackHelper() {
net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
network_connection_tracker_->RemoveNetworkConnectionObserver(this);
}
void WaitForNetworkCallbackHelper::OnNetworkChanged(
net::NetworkChangeNotifier::ConnectionType type) {
if (net::NetworkChangeNotifier::IsOffline())
void WaitForNetworkCallbackHelper::OnConnectionChanged(
network::mojom::ConnectionType type) {
if (network_connection_tracker_->IsOffline())
return;
for (const base::Closure& callback : delayed_callbacks_)
......@@ -25,7 +27,7 @@ void WaitForNetworkCallbackHelper::OnNetworkChanged(
void WaitForNetworkCallbackHelper::HandleCallback(
const base::Closure& callback) {
if (net::NetworkChangeNotifier::IsOffline()) {
if (network_connection_tracker_->IsOffline()) {
delayed_callbacks_.push_back(callback);
} else {
callback.Run();
......
......@@ -9,25 +9,26 @@
#include "base/callback.h"
#include "base/macros.h"
#include "net/base/network_change_notifier.h"
#include "services/network/public/cpp/network_connection_tracker.h"
// Class used for delaying callbacks when the network connection is offline and
// invoking them when the network connection becomes online.
class WaitForNetworkCallbackHelper
: public net::NetworkChangeNotifier::NetworkChangeObserver {
: public network::NetworkConnectionTracker::NetworkConnectionObserver {
public:
WaitForNetworkCallbackHelper();
WaitForNetworkCallbackHelper(
network::NetworkConnectionTracker* network_connection_tracker);
~WaitForNetworkCallbackHelper() override;
// net::NetworkChangeController::NetworkChangeObserver implementation.
void OnNetworkChanged(
net::NetworkChangeNotifier::ConnectionType type) override;
// network::NetworkConnectionTracker::NetworkConnectionObserver implementation
void OnConnectionChanged(network::mojom::ConnectionType type) override;
// If offline, saves the |callback| to be called later when online. Otherwise,
// invokes immediately.
void HandleCallback(const base::Closure& callback);
private:
network::NetworkConnectionTracker* network_connection_tracker_;
std::list<base::Closure> delayed_callbacks_;
DISALLOW_COPY_AND_ASSIGN(WaitForNetworkCallbackHelper);
......
......@@ -7,7 +7,7 @@
#include "base/bind.h"
#include "base/run_loop.h"
#include "base/test/scoped_task_environment.h"
#include "net/base/mock_network_change_notifier.h"
#include "services/network/test/test_network_connection_tracker.h"
#include "testing/gtest/include/gtest/gtest.h"
// A test fixture to test WaitForNetworkCallbackHelper.
......@@ -16,17 +16,19 @@ class WaitForNetworkCallbackHelperTest : public testing::Test {
void CallbackFunction() { num_callbacks_invoked_++; }
protected:
WaitForNetworkCallbackHelperTest() : num_callbacks_invoked_(0) {}
WaitForNetworkCallbackHelperTest()
: num_callbacks_invoked_(0),
callback_helper_(network::TestNetworkConnectionTracker::GetInstance()) {
}
int num_callbacks_invoked_;
base::test::ScopedTaskEnvironment scoped_task_environment_;
net::test::MockNetworkChangeNotifier network_change_notifier_;
WaitForNetworkCallbackHelper callback_helper_;
};
TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedImmediately) {
network_change_notifier_.SetConnectionType(
net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
network::mojom::ConnectionType::CONNECTION_WIFI);
callback_helper_.HandleCallback(
base::Bind(&WaitForNetworkCallbackHelperTest::CallbackFunction,
base::Unretained(this)));
......@@ -34,8 +36,8 @@ TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedImmediately) {
}
TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedLater) {
network_change_notifier_.SetConnectionType(
net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE);
network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
network::mojom::ConnectionType::CONNECTION_NONE);
callback_helper_.HandleCallback(
base::Bind(&WaitForNetworkCallbackHelperTest::CallbackFunction,
base::Unretained(this)));
......@@ -44,10 +46,8 @@ TEST_F(WaitForNetworkCallbackHelperTest, CallbackInvokedLater) {
base::Unretained(this)));
EXPECT_EQ(0, num_callbacks_invoked_);
network_change_notifier_.SetConnectionType(
net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
network_change_notifier_.NotifyObserversOfConnectionTypeChangeForTests(
net::NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType(
network::mojom::ConnectionType::CONNECTION_WIFI);
scoped_task_environment_.RunUntilIdle();
EXPECT_EQ(2, num_callbacks_invoked_);
}
......@@ -28,8 +28,8 @@ IOSChromeSigninClient::IOSChromeSigninClient(
SigninErrorController* signin_error_controller,
scoped_refptr<content_settings::CookieSettings> cookie_settings,
scoped_refptr<HostContentSettingsMap> host_content_settings_map)
: network_callback_helper_(
std::make_unique<WaitForNetworkCallbackHelper>()),
: network_callback_helper_(std::make_unique<WaitForNetworkCallbackHelper>(
GetApplicationContext()->GetNetworkConnectionTracker())),
browser_state_(browser_state),
signin_error_controller_(signin_error_controller),
cookie_settings_(cookie_settings),
......
......@@ -7,6 +7,7 @@
#include "components/signin/core/browser/cookie_settings_util.h"
#include "components/signin/core/browser/device_id_helper.h"
#include "google_apis/gaia/gaia_auth_fetcher.h"
#include "ios/web_view/internal/app/application_context.h"
#import "ios/web_view/internal/sync/cwv_sync_controller_internal.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
......@@ -21,8 +22,9 @@ IOSWebViewSigninClient::IOSWebViewSigninClient(
SigninErrorController* signin_error_controller,
scoped_refptr<content_settings::CookieSettings> cookie_settings,
scoped_refptr<HostContentSettingsMap> host_content_settings_map)
: network_callback_helper_(
std::make_unique<WaitForNetworkCallbackHelper>()),
: network_callback_helper_(std::make_unique<WaitForNetworkCallbackHelper>(
ios_web_view::ApplicationContext::GetInstance()
->GetNetworkConnectionTracker())),
pref_service_(pref_service),
url_loader_factory_(url_loader_factory),
cookie_manager_(cookie_manager),
......
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