| Index: components/update_client/update_client_unittest.cc
|
| diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc
|
| index a0bee0fec94515278aa5c4d2c8a134953ea2d221..60f76a43918cd35b35c349f9ebfd9c5f1c3ef543 100644
|
| --- a/components/update_client/update_client_unittest.cc
|
| +++ b/components/update_client/update_client_unittest.cc
|
| @@ -227,7 +227,7 @@ TEST_F(UpdateClientTest, OneCrxNoUpdate) {
|
| const UpdateCheckCallback& update_check_callback) override {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(update_check_callback, 0, UpdateResponse::Results()));
|
| + base::Bind(update_check_callback, 0, UpdateResponse::Results(), 0));
|
| return true;
|
| }
|
| };
|
| @@ -368,7 +368,7 @@ TEST_F(UpdateClientTest, TwoCrxUpdateNoUpdate) {
|
| results.list.push_back(result);
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -580,7 +580,7 @@ TEST_F(UpdateClientTest, TwoCrxUpdate) {
|
| results.list.push_back(result2);
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -827,7 +827,7 @@ TEST_F(UpdateClientTest, TwoCrxUpdateDownloadTimeout) {
|
| results.list.push_back(result2);
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -1099,7 +1099,7 @@ TEST_F(UpdateClientTest, OneCrxDiffUpdate) {
|
| }
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -1340,7 +1340,7 @@ TEST_F(UpdateClientTest, OneCrxInstallError) {
|
| results.list.push_back(result);
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -1573,7 +1573,7 @@ TEST_F(UpdateClientTest, OneCrxDiffUpdateFailsFullUpdateSucceeds) {
|
| }
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -1778,7 +1778,7 @@ TEST_F(UpdateClientTest, OneCrxNoUpdateQueuedCall) {
|
| const UpdateCheckCallback& update_check_callback) override {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(update_check_callback, 0, UpdateResponse::Results()));
|
| + base::Bind(update_check_callback, 0, UpdateResponse::Results(), 0));
|
| return true;
|
| }
|
| };
|
| @@ -1911,7 +1911,7 @@ TEST_F(UpdateClientTest, OneCrxInstall) {
|
| results.list.push_back(result);
|
|
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(update_check_callback, 0, results));
|
| + FROM_HERE, base::Bind(update_check_callback, 0, results, 0));
|
| return true;
|
| }
|
| };
|
| @@ -2063,7 +2063,7 @@ TEST_F(UpdateClientTest, ConcurrentInstallSameCRX) {
|
| const UpdateCheckCallback& update_check_callback) override {
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(update_check_callback, 0, UpdateResponse::Results()));
|
| + base::Bind(update_check_callback, 0, UpdateResponse::Results(), 0));
|
| return true;
|
| }
|
| };
|
| @@ -2243,4 +2243,126 @@ TEST_F(UpdateClientTest, SendUninstallPing) {
|
| base::Version("1.0"), 10);
|
| }
|
|
|
| +TEST_F(UpdateClientTest, RetryAfter) {
|
| + class DataCallbackFake {
|
| + public:
|
| + static void Callback(const std::vector<std::string>& ids,
|
| + std::vector<CrxComponent>* components) {
|
| + CrxComponent crx;
|
| + crx.name = "test_jebg";
|
| + crx.pk_hash.assign(jebg_hash, jebg_hash + arraysize(jebg_hash));
|
| + crx.version = Version("0.9");
|
| + crx.installer = new TestInstaller;
|
| + components->push_back(crx);
|
| + }
|
| + };
|
| +
|
| + class CompletionCallbackFake {
|
| + public:
|
| + static void Callback(const base::Closure& quit_closure, int error) {
|
| + static int num_call = 0;
|
| + ++num_call;
|
| +
|
| + EXPECT_LE(num_call, 2);
|
| +
|
| + if (num_call == 1) {
|
| + EXPECT_EQ(0, error);
|
| + } else if (num_call == 2) {
|
| + EXPECT_EQ(Error::ERROR_UPDATE_RETRY_LATER, error);
|
| + }
|
| +
|
| + quit_closure.Run();
|
| + }
|
| + };
|
| +
|
| + class FakeUpdateChecker : public UpdateChecker {
|
| + public:
|
| + static scoped_ptr<UpdateChecker> Create(
|
| + const scoped_refptr<Configurator>& config) {
|
| + return scoped_ptr<UpdateChecker>(new FakeUpdateChecker());
|
| + }
|
| +
|
| + bool CheckForUpdates(
|
| + const std::vector<CrxUpdateItem*>& items_to_check,
|
| + const std::string& additional_attributes,
|
| + const UpdateCheckCallback& update_check_callback) override {
|
| + const int kRetryAfterOneHourSec = 60 * 60;
|
| + base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(update_check_callback, 0, UpdateResponse::Results(),
|
| + kRetryAfterOneHourSec));
|
| + return true;
|
| + }
|
| + };
|
| +
|
| + class FakeCrxDownloader : public CrxDownloader {
|
| + public:
|
| + static scoped_ptr<CrxDownloader> Create(
|
| + bool is_background_download,
|
| + net::URLRequestContextGetter* context_getter,
|
| + const scoped_refptr<base::SequencedTaskRunner>& task_runner) {
|
| + return scoped_ptr<CrxDownloader>(new FakeCrxDownloader());
|
| + }
|
| +
|
| + private:
|
| + FakeCrxDownloader()
|
| + : CrxDownloader(base::ThreadTaskRunnerHandle::Get(), nullptr) {}
|
| + ~FakeCrxDownloader() override {}
|
| +
|
| + void DoStartDownload(const GURL& url) override { EXPECT_TRUE(false); }
|
| + };
|
| +
|
| + class FakePingManager : public FakePingManagerImpl {
|
| + public:
|
| + explicit FakePingManager(const scoped_refptr<Configurator>& config)
|
| + : FakePingManagerImpl(config) {}
|
| + ~FakePingManager() override { EXPECT_TRUE(items().empty()); }
|
| + };
|
| +
|
| + scoped_ptr<PingManager> ping_manager(new FakePingManager(config()));
|
| + scoped_refptr<UpdateClient> update_client(new UpdateClientImpl(
|
| + config(), std::move(ping_manager), &FakeUpdateChecker::Create,
|
| + &FakeCrxDownloader::Create));
|
| +
|
| + // Verify that calling Update does not set ondemand.
|
| + OnDemandTester ondemand_tester(update_client, false);
|
| +
|
| + MockObserver observer;
|
| + ON_CALL(observer, OnEvent(_, _))
|
| + .WillByDefault(Invoke(&ondemand_tester, &OnDemandTester::CheckOnDemand));
|
| +
|
| + InSequence seq;
|
| + EXPECT_CALL(observer, OnEvent(Events::COMPONENT_CHECKING_FOR_UPDATES,
|
| + "jebgalgnebhfojomionfpkfelancnnkf"))
|
| + .Times(1);
|
| + EXPECT_CALL(observer, OnEvent(Events::COMPONENT_NOT_UPDATED,
|
| + "jebgalgnebhfojomionfpkfelancnnkf"))
|
| + .Times(1);
|
| +
|
| + update_client->AddObserver(&observer);
|
| +
|
| + std::vector<std::string> ids;
|
| + ids.push_back(std::string("jebgalgnebhfojomionfpkfelancnnkf"));
|
| +
|
| + {
|
| + base::RunLoop runloop;
|
| + update_client->Update(
|
| + ids, base::Bind(&DataCallbackFake::Callback),
|
| + base::Bind(&CompletionCallbackFake::Callback, runloop.QuitClosure()));
|
| + runloop.Run();
|
| + }
|
| +
|
| + {
|
| + // This call will result in a completion callback invoked with
|
| + // Error::ERROR_UPDATE_RETRY_LATER.
|
| + base::RunLoop runloop;
|
| + update_client->Update(
|
| + ids, base::Bind(&DataCallbackFake::Callback),
|
| + base::Bind(&CompletionCallbackFake::Callback, runloop.QuitClosure()));
|
| + runloop.Run();
|
| + }
|
| +
|
| + update_client->RemoveObserver(&observer);
|
| +}
|
| +
|
| } // namespace update_client
|
|
|