OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/files/file_path.h" |
| 6 #include "chrome/browser/extensions/install_tracker.h" |
| 7 #include "chrome/test/base/testing_profile.h" |
| 8 #include "extensions/browser/extension_registry.h" |
| 9 #include "extensions/common/extension.h" |
| 10 #include "extensions/common/manifest_constants.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 |
| 13 using extensions::Extension; |
| 14 using extensions::ExtensionRegistry; |
| 15 using extensions::InstallTracker; |
| 16 using extensions::InstallObserver; |
| 17 |
| 18 namespace { |
| 19 |
| 20 // Random extension ids for testing. |
| 21 const char kExtensionId1[] = "oochhailbdickimldhhodijaldpllppf"; |
| 22 const char kExtensionId2[] = "ahionppacfhbbmpmlcbkdgcpokfpflji"; |
| 23 const char kExtensionId3[] = "ladmcjmmmmgonboiadnaindoekpbljde"; |
| 24 |
| 25 scoped_refptr<Extension> CreateDummyExtension(const std::string& id) { |
| 26 base::DictionaryValue manifest; |
| 27 manifest.SetString(extensions::manifest_keys::kVersion, "1.0"); |
| 28 manifest.SetString(extensions::manifest_keys::kName, "Dummy name"); |
| 29 |
| 30 std::string error; |
| 31 scoped_refptr<Extension> extension; |
| 32 extension = Extension::Create( |
| 33 base::FilePath(), |
| 34 extensions::Manifest::INTERNAL, |
| 35 manifest, |
| 36 Extension::NO_FLAGS, |
| 37 id, |
| 38 &error); |
| 39 EXPECT_TRUE(extension.get()) << "Error creating extension: " << error; |
| 40 return extension; |
| 41 } |
| 42 |
| 43 } // namespace |
| 44 |
| 45 class InstallTrackerTest : public testing::Test { |
| 46 public: |
| 47 InstallTrackerTest() { |
| 48 profile_.reset(new TestingProfile()); |
| 49 tracker_.reset(new InstallTracker(profile_.get(), NULL)); |
| 50 } |
| 51 |
| 52 virtual ~InstallTrackerTest() {} |
| 53 |
| 54 protected: |
| 55 void VerifyInstallData(const InstallTracker::InstallProgressData& original, |
| 56 const InstallTracker::InstallProgressData& retrieved) { |
| 57 EXPECT_EQ(original.extension_id, retrieved.extension_id); |
| 58 EXPECT_EQ(original.is_ephemeral, retrieved.is_ephemeral); |
| 59 EXPECT_EQ(original.percent_downloaded, retrieved.percent_downloaded); |
| 60 } |
| 61 |
| 62 scoped_ptr<TestingProfile> profile_; |
| 63 scoped_ptr<InstallTracker> tracker_; |
| 64 }; |
| 65 |
| 66 // Verifies that active installs are registered and deregistered correctly. |
| 67 TEST_F(InstallTrackerTest, AddAndRemoveActiveInstalls) { |
| 68 InstallTracker::InstallProgressData install_data1(kExtensionId1); |
| 69 install_data1.percent_downloaded = 76; |
| 70 InstallTracker::InstallProgressData install_data2(kExtensionId2); |
| 71 install_data2.is_ephemeral = true; |
| 72 |
| 73 tracker_->AddActiveInstall(install_data1); |
| 74 tracker_->AddActiveInstall(install_data2); |
| 75 |
| 76 const InstallTracker::InstallProgressData* retrieved_data1 = |
| 77 tracker_->GetActiveInstall(kExtensionId1); |
| 78 const InstallTracker::InstallProgressData* retrieved_data2 = |
| 79 tracker_->GetActiveInstall(kExtensionId2); |
| 80 const InstallTracker::InstallProgressData* retrieved_data3 = |
| 81 tracker_->GetActiveInstall(kExtensionId3); |
| 82 ASSERT_TRUE(retrieved_data1); |
| 83 ASSERT_TRUE(retrieved_data2); |
| 84 ASSERT_FALSE(retrieved_data3); |
| 85 VerifyInstallData(install_data1, *retrieved_data1); |
| 86 VerifyInstallData(install_data2, *retrieved_data2); |
| 87 retrieved_data1 = NULL; |
| 88 retrieved_data2 = NULL; |
| 89 |
| 90 tracker_->RemoveActiveInstall(kExtensionId1); |
| 91 EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1)); |
| 92 EXPECT_TRUE(tracker_->GetActiveInstall(kExtensionId2)); |
| 93 EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId3)); |
| 94 } |
| 95 |
| 96 // Verifies that the download progress is updated correctly. |
| 97 TEST_F(InstallTrackerTest, DownloadProgressUpdated) { |
| 98 InstallTracker::InstallProgressData install_data(kExtensionId1); |
| 99 tracker_->AddActiveInstall(install_data); |
| 100 |
| 101 const InstallTracker::InstallProgressData* retrieved_data = |
| 102 tracker_->GetActiveInstall(kExtensionId1); |
| 103 ASSERT_TRUE(retrieved_data); |
| 104 EXPECT_EQ(0, retrieved_data->percent_downloaded); |
| 105 |
| 106 const int kUpdatedDownloadProgress = 23; |
| 107 tracker_->OnDownloadProgress(kExtensionId1, kUpdatedDownloadProgress); |
| 108 |
| 109 retrieved_data = tracker_->GetActiveInstall(kExtensionId1); |
| 110 ASSERT_TRUE(retrieved_data); |
| 111 EXPECT_EQ(kUpdatedDownloadProgress, retrieved_data->percent_downloaded); |
| 112 } |
| 113 |
| 114 // Verifies that OnBeginExtensionInstall() registers an active install and |
| 115 // OnInstallFailure() removes an active install. |
| 116 TEST_F(InstallTrackerTest, ExtensionInstallFailure) { |
| 117 InstallObserver::ExtensionInstallParams install_params( |
| 118 kExtensionId1, std::string(), gfx::ImageSkia(), false, false); |
| 119 install_params.is_ephemeral = true; |
| 120 tracker_->OnBeginExtensionInstall(install_params); |
| 121 |
| 122 const InstallTracker::InstallProgressData* retrieved_data = |
| 123 tracker_->GetActiveInstall(kExtensionId1); |
| 124 ASSERT_TRUE(retrieved_data); |
| 125 EXPECT_EQ(0, retrieved_data->percent_downloaded); |
| 126 EXPECT_EQ(install_params.extension_id, retrieved_data->extension_id); |
| 127 EXPECT_EQ(install_params.is_ephemeral, retrieved_data->is_ephemeral); |
| 128 retrieved_data = NULL; |
| 129 |
| 130 tracker_->OnInstallFailure(kExtensionId1); |
| 131 EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1)); |
| 132 } |
| 133 |
| 134 // Verifies that OnExtensionInstalled() notification removes an active install. |
| 135 TEST_F(InstallTrackerTest, ExtensionInstalledEvent) { |
| 136 InstallObserver::ExtensionInstallParams install_params( |
| 137 kExtensionId1, std::string(), gfx::ImageSkia(), false, false); |
| 138 tracker_->OnBeginExtensionInstall(install_params); |
| 139 |
| 140 const InstallTracker::InstallProgressData* retrieved_data = |
| 141 tracker_->GetActiveInstall(kExtensionId1); |
| 142 ASSERT_TRUE(retrieved_data); |
| 143 EXPECT_EQ(0, retrieved_data->percent_downloaded); |
| 144 EXPECT_EQ(install_params.extension_id, retrieved_data->extension_id); |
| 145 EXPECT_EQ(install_params.is_ephemeral, retrieved_data->is_ephemeral); |
| 146 retrieved_data = NULL; |
| 147 |
| 148 // Simulate an extension install. |
| 149 scoped_refptr<Extension> extension = CreateDummyExtension(kExtensionId1); |
| 150 ASSERT_TRUE(extension.get()); |
| 151 ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get()); |
| 152 ASSERT_TRUE(registry); |
| 153 registry->AddEnabled(extension); |
| 154 registry->TriggerOnInstalled(extension.get()); |
| 155 |
| 156 EXPECT_FALSE(tracker_->GetActiveInstall(kExtensionId1)); |
| 157 } |
OLD | NEW |