Port GCM's RegistrationRequest to SimpleURLLoader
URLFetcher will stop working with advent of Network Service, and
SimpleURLLoader is the replacement API for most clients.
(Other request types will follow; they were not done for now to keep CL size down, since there is a
lot of wiring of pointers through and test infra stuff).
Bug: 844987
Cq-Include-Trybots: luci.chromium.try:ios-simulator-full-configs;luci.chromium.try:linux_mojo;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I1dc5efda6d239509d060f154cedf57ecf73edff2
Reviewed-on: https://chromium-review.googlesource.com/1110705
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Peter Beverloo <[email protected]>
Reviewed-by: Reilly Grant <[email protected]>
Commit-Queue: Maks Orlovich <[email protected]>
Cr-Commit-Position: refs/heads/master@{#574468}
diff --git a/components/gcm_driver/gcm_client_impl_unittest.cc b/components/gcm_driver/gcm_client_impl_unittest.cc
index df7f5e4..b9a3411 100644
--- a/components/gcm_driver/gcm_client_impl_unittest.cc
+++ b/components/gcm_driver/gcm_client_impl_unittest.cc
@@ -21,7 +21,6 @@
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/test_mock_time_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
#include "base/time/clock.h"
#include "base/timer/timer.h"
#include "components/gcm_driver/features.h"
@@ -40,6 +39,9 @@
#include "net/url_request/test_url_fetcher_factory.h"
#include "net/url_request/url_fetcher_delegate.h"
#include "net/url_request/url_request_test_util.h"
+#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/test/test_url_loader_factory.h"
+#include "services/network/test/test_utils.h"
#include "testing/gtest/include/gtest/gtest-spi.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/leveldatabase/leveldb_chrome.h"
@@ -81,6 +83,8 @@
const char kGroupName[] = "Enabled";
const char kInvalidateTokenTrialName[] = "InvalidateTokenTrial";
+const char kRegisterUrl[] = "https://android.clients.google.com/c2dm/register3";
+
// Helper for building arbitrary data messages.
MCSMessage BuildDownstreamMessage(
const std::string& project_id,
@@ -301,7 +305,6 @@
net::HttpStatusCode response_code);
void CompleteRegistration(const std::string& registration_id);
void CompleteUnregistration(const std::string& app_id);
- void VerifyPendingRequestFetcherDeleted();
bool ExistsRegistration(const std::string& app_id) const;
void AddRegistration(const std::string& app_id,
@@ -402,6 +405,9 @@
net::TestURLFetcherFactory* url_fetcher_factory() {
return &url_fetcher_factory_;
}
+ network::TestURLLoaderFactory* url_loader_factory() {
+ return &test_url_loader_factory_;
+ }
base::TestMockTimeTaskRunner* task_runner() {
return task_runner_.get();
}
@@ -427,10 +433,10 @@
net::TestURLFetcherFactory url_fetcher_factory_;
scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
- base::ThreadTaskRunnerHandle task_runner_handle_;
// Injected to GCM client.
scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
+ network::TestURLLoaderFactory test_url_loader_factory_;
base::test::ScopedFeatureList scoped_feature_list_;
base::FieldTrialList field_trial_list_;
std::map<std::string, base::FieldTrial*> trials_;
@@ -439,8 +445,8 @@
GCMClientImplTest::GCMClientImplTest()
: last_event_(NONE),
last_result_(GCMClient::UNKNOWN_ERROR),
- task_runner_(new base::TestMockTimeTaskRunner),
- task_runner_handle_(task_runner_),
+ task_runner_(new base::TestMockTimeTaskRunner(
+ base::TestMockTimeTaskRunner::Type::kBoundToThread)),
url_request_context_getter_(
new net::TestURLRequestContextGetter(task_runner_)),
field_trial_list_(nullptr) {}
@@ -573,11 +579,11 @@
const std::string& registration_id) {
std::string response(kRegistrationResponsePrefix);
response.append(registration_id);
- net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- fetcher->set_response_code(net::HTTP_OK);
- fetcher->SetResponseString(response);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
+
+ EXPECT_TRUE(url_loader_factory()->SimulateResponseForPendingRequest(
+ GURL(kRegisterUrl), network::URLLoaderCompletionStatus(net::OK),
+ network::CreateResourceResponseHead(net::HTTP_OK), response));
+
// Give a chance for GCMStoreImpl::Backend to finish persisting data.
PumpLoopUntilIdle();
}
@@ -595,11 +601,6 @@
PumpLoopUntilIdle();
}
-void GCMClientImplTest::VerifyPendingRequestFetcherDeleted() {
- net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
- EXPECT_FALSE(fetcher);
-}
-
bool GCMClientImplTest::ExistsRegistration(const std::string& app_id) const {
return ExistsGCMRegistrationInMap(gcm_client_->registrations_, app_id);
}
@@ -621,9 +622,12 @@
GCMClient::ChromeBuildInfo chrome_build_info;
chrome_build_info.version = kChromeVersion;
chrome_build_info.product_category_for_subtypes = kProductCategoryForSubtypes;
- gcm_client_->Initialize(chrome_build_info, gcm_store_path(), task_runner_,
- url_request_context_getter_,
- base::WrapUnique<Encryptor>(new FakeEncryptor), this);
+ gcm_client_->Initialize(
+ chrome_build_info, gcm_store_path(), task_runner_,
+ url_request_context_getter_,
+ base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
+ &test_url_loader_factory_),
+ base::WrapUnique<Encryptor>(new FakeEncryptor), this);
}
void GCMClientImplTest::StartGCMClient() {
@@ -1044,7 +1048,7 @@
gcm_client()->Stop();
PumpLoopUntilIdle();
- VerifyPendingRequestFetcherDeleted();
+ EXPECT_EQ(0, url_loader_factory()->NumPending());
}
TEST_F(GCMClientImplTest, DispatchDownstreamMessage) {