| Index: chrome/browser/extensions/install_tracker_unittest.cc
|
| diff --git a/chrome/browser/extensions/install_tracker_unittest.cc b/chrome/browser/extensions/install_tracker_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9f71f7ea313185edd0cd1b07604941f71f78dc58
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/install_tracker_unittest.cc
|
| @@ -0,0 +1,157 @@
|
| +// Copyright 2014 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 "base/files/file_path.h"
|
| +#include "chrome/browser/extensions/install_tracker.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "extensions/browser/extension_registry.h"
|
| +#include "extensions/common/extension.h"
|
| +#include "extensions/common/manifest_constants.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using extensions::Extension;
|
| +using extensions::ExtensionRegistry;
|
| +using extensions::InstallTracker;
|
| +using extensions::InstallObserver;
|
| +
|
| +namespace {
|
| +
|
| +// Random extension ids for testing.
|
| +const char kExtensionId1[] = "oochhailbdickimldhhodijaldpllppf";
|
| +const char kExtensionId2[] = "ahionppacfhbbmpmlcbkdgcpokfpflji";
|
| +const char kExtensionId3[] = "ladmcjmmmmgonboiadnaindoekpbljde";
|
| +
|
| +scoped_refptr<Extension> CreateDummyExtension(const std::string& id) {
|
| + base::DictionaryValue manifest;
|
| + manifest.SetString(extensions::manifest_keys::kVersion, "1.0");
|
| + manifest.SetString(extensions::manifest_keys::kName, "Dummy name");
|
| +
|
| + std::string error;
|
| + scoped_refptr<Extension> extension;
|
| + extension = Extension::Create(
|
| + base::FilePath(),
|
| + extensions::Manifest::INTERNAL,
|
| + manifest,
|
| + Extension::NO_FLAGS,
|
| + id,
|
| + &error);
|
| + EXPECT_TRUE(extension.get()) << "Error creating extension: " << error;
|
| + return extension;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +class InstallTrackerTest : public testing::Test {
|
| + public:
|
| + InstallTrackerTest() {
|
| + profile_.reset(new TestingProfile());
|
| + tracker_.reset(new InstallTracker(profile_.get(), NULL));
|
| + }
|
| +
|
| + virtual ~InstallTrackerTest() {}
|
| +
|
| + protected:
|
| + void VerifyInstallData(const InstallTracker::InstallProgressData& original,
|
| + const InstallTracker::InstallProgressData& retrieved) {
|
| + EXPECT_EQ(original.extension_id, retrieved.extension_id);
|
| + EXPECT_EQ(original.is_ephemeral, retrieved.is_ephemeral);
|
| + EXPECT_EQ(original.percent_downloaded, retrieved.percent_downloaded);
|
| + }
|
| +
|
| + scoped_ptr<TestingProfile> profile_;
|
| + scoped_ptr<InstallTracker> tracker_;
|
| +};
|
| +
|
| +// Verifies that active installs are registered and deregistered correctly.
|
| +TEST_F(InstallTrackerTest, AddAndRemoveActiveInstalls) {
|
| + InstallTracker::InstallProgressData install_data1(kExtensionId1);
|
| + install_data1.percent_downloaded = 76;
|
| + InstallTracker::InstallProgressData install_data2(kExtensionId2);
|
| + install_data2.is_ephemeral = true;
|
| +
|
| + tracker_->AddActiveInstall(install_data1);
|
| + tracker_->AddActiveInstall(install_data2);
|
| +
|
| + const InstallTracker::InstallProgressData* retrieved_data1 =
|
| + tracker_->GetActiveInstall(kExtensionId1);
|
| + const InstallTracker::InstallProgressData* retrieved_data2 =
|
| + tracker_->GetActiveInstall(kExtensionId2);
|
| + const InstallTracker::InstallProgressData* retrieved_data3 =
|
| + tracker_->GetActiveInstall(kExtensionId3);
|
| + ASSERT_TRUE(retrieved_data1);
|
| + ASSERT_TRUE(retrieved_data2);
|
| + ASSERT_FALSE(retrieved_data3);
|
| + VerifyInstallData(install_data1, *retrieved_data1);
|
| + VerifyInstallData(install_data2, *retrieved_data2);
|
| + retrieved_data1 = NULL;
|
| + retrieved_data2 = NULL;
|
| +
|
| + tracker_->RemoveActiveInstall(kExtensionId1);
|
| + EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1));
|
| + EXPECT_TRUE(tracker_->GetActiveInstall(kExtensionId2));
|
| + EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId3));
|
| +}
|
| +
|
| +// Verifies that the download progress is updated correctly.
|
| +TEST_F(InstallTrackerTest, DownloadProgressUpdated) {
|
| + InstallTracker::InstallProgressData install_data(kExtensionId1);
|
| + tracker_->AddActiveInstall(install_data);
|
| +
|
| + const InstallTracker::InstallProgressData* retrieved_data =
|
| + tracker_->GetActiveInstall(kExtensionId1);
|
| + ASSERT_TRUE(retrieved_data);
|
| + EXPECT_EQ(0, retrieved_data->percent_downloaded);
|
| +
|
| + const int kUpdatedDownloadProgress = 23;
|
| + tracker_->OnDownloadProgress(kExtensionId1, kUpdatedDownloadProgress);
|
| +
|
| + retrieved_data = tracker_->GetActiveInstall(kExtensionId1);
|
| + ASSERT_TRUE(retrieved_data);
|
| + EXPECT_EQ(kUpdatedDownloadProgress, retrieved_data->percent_downloaded);
|
| +}
|
| +
|
| +// Verifies that OnBeginExtensionInstall() registers an active install and
|
| +// OnInstallFailure() removes an active install.
|
| +TEST_F(InstallTrackerTest, ExtensionInstallFailure) {
|
| + InstallObserver::ExtensionInstallParams install_params(
|
| + kExtensionId1, std::string(), gfx::ImageSkia(), false, false);
|
| + install_params.is_ephemeral = true;
|
| + tracker_->OnBeginExtensionInstall(install_params);
|
| +
|
| + const InstallTracker::InstallProgressData* retrieved_data =
|
| + tracker_->GetActiveInstall(kExtensionId1);
|
| + ASSERT_TRUE(retrieved_data);
|
| + EXPECT_EQ(0, retrieved_data->percent_downloaded);
|
| + EXPECT_EQ(install_params.extension_id, retrieved_data->extension_id);
|
| + EXPECT_EQ(install_params.is_ephemeral, retrieved_data->is_ephemeral);
|
| + retrieved_data = NULL;
|
| +
|
| + tracker_->OnInstallFailure(kExtensionId1);
|
| + EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1));
|
| +}
|
| +
|
| +// Verifies that OnExtensionInstalled() notification removes an active install.
|
| +TEST_F(InstallTrackerTest, ExtensionInstalledEvent) {
|
| + InstallObserver::ExtensionInstallParams install_params(
|
| + kExtensionId1, std::string(), gfx::ImageSkia(), false, false);
|
| + tracker_->OnBeginExtensionInstall(install_params);
|
| +
|
| + const InstallTracker::InstallProgressData* retrieved_data =
|
| + tracker_->GetActiveInstall(kExtensionId1);
|
| + ASSERT_TRUE(retrieved_data);
|
| + EXPECT_EQ(0, retrieved_data->percent_downloaded);
|
| + EXPECT_EQ(install_params.extension_id, retrieved_data->extension_id);
|
| + EXPECT_EQ(install_params.is_ephemeral, retrieved_data->is_ephemeral);
|
| + retrieved_data = NULL;
|
| +
|
| + // Simulate an extension install.
|
| + scoped_refptr<Extension> extension = CreateDummyExtension(kExtensionId1);
|
| + ASSERT_TRUE(extension.get());
|
| + ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get());
|
| + ASSERT_TRUE(registry);
|
| + registry->AddEnabled(extension);
|
| + registry->TriggerOnInstalled(extension.get());
|
| +
|
| + EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1));
|
| +}
|
|
|