OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/file_util.h" | 13 #include "base/file_util.h" |
14 #include "base/json/json_reader.h" | 14 #include "base/json/json_reader.h" |
15 #include "base/message_loop.h" | 15 #include "base/message_loop.h" |
16 #include "base/path_service.h" | 16 #include "base/path_service.h" |
17 #include "base/scoped_ptr.h" | 17 #include "base/scoped_ptr.h" |
18 #include "base/stl_util-inl.h" | 18 #include "base/stl_util-inl.h" |
19 #include "base/string16.h" | 19 #include "base/string16.h" |
20 #include "base/string_number_conversions.h" | 20 #include "base/string_number_conversions.h" |
21 #include "base/string_util.h" | 21 #include "base/string_util.h" |
22 #include "base/task.h" | 22 #include "base/task.h" |
23 #include "base/utf_string_conversions.h" | 23 #include "base/utf_string_conversions.h" |
24 #include "base/version.h" | 24 #include "base/version.h" |
25 #include "chrome/browser/appcache/chrome_appcache_service.h" | 25 #include "chrome/browser/appcache/chrome_appcache_service.h" |
26 #include "chrome/browser/browser_thread.h" | 26 #include "chrome/browser/browser_thread.h" |
27 #include "chrome/browser/extensions/crx_installer.h" | 27 #include "chrome/browser/extensions/crx_installer.h" |
28 #include "chrome/browser/extensions/extension_creator.h" | 28 #include "chrome/browser/extensions/extension_creator.h" |
29 #include "chrome/browser/extensions/extension_error_reporter.h" | 29 #include "chrome/browser/extensions/extension_error_reporter.h" |
30 #include "chrome/browser/extensions/extension_service.h" | 30 #include "chrome/browser/extensions/extension_service.h" |
31 #include "chrome/browser/extensions/external_extension_provider.h" | 31 #include "chrome/browser/extensions/external_extension_provider_interface.h" |
32 #include "chrome/browser/extensions/external_pref_extension_provider.h" | 32 #include "chrome/browser/extensions/external_extension_provider_impl.h" |
| 33 #include "chrome/browser/extensions/external_pref_extension_loader.h" |
33 #include "chrome/browser/extensions/pack_extension_job.cc" | 34 #include "chrome/browser/extensions/pack_extension_job.cc" |
34 #include "chrome/browser/file_system/browser_file_system_helper.h" | 35 #include "chrome/browser/file_system/browser_file_system_helper.h" |
35 #include "chrome/browser/in_process_webkit/dom_storage_context.h" | 36 #include "chrome/browser/in_process_webkit/dom_storage_context.h" |
36 #include "chrome/browser/in_process_webkit/webkit_context.h" | 37 #include "chrome/browser/in_process_webkit/webkit_context.h" |
37 #include "chrome/browser/prefs/browser_prefs.h" | 38 #include "chrome/browser/prefs/browser_prefs.h" |
38 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 39 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
39 #include "chrome/browser/prefs/scoped_pref_update.h" | 40 #include "chrome/browser/prefs/scoped_pref_update.h" |
40 #include "chrome/common/chrome_paths.h" | 41 #include "chrome/common/chrome_paths.h" |
41 #include "chrome/common/chrome_switches.h" | 42 #include "chrome/common/chrome_switches.h" |
42 #include "chrome/common/extensions/extension.h" | 43 #include "chrome/common/extensions/extension.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 119 |
119 std::set<std::string> strings2; | 120 std::set<std::string> strings2; |
120 for (size_t i = 0; i < patterns2.size(); ++i) | 121 for (size_t i = 0; i < patterns2.size(); ++i) |
121 strings2.insert(patterns2.at(i).GetAsString()); | 122 strings2.insert(patterns2.at(i).GetAsString()); |
122 | 123 |
123 EXPECT_EQ(strings1, strings2); | 124 EXPECT_EQ(strings1, strings2); |
124 } | 125 } |
125 | 126 |
126 } // namespace | 127 } // namespace |
127 | 128 |
128 class MockExtensionProvider : public ExternalExtensionProvider { | 129 class MockExtensionProvider : public ExternalExtensionProviderInterface { |
129 public: | 130 public: |
130 explicit MockExtensionProvider(Extension::Location location) | 131 explicit MockExtensionProvider( |
131 : location_(location), visit_count_(0) {} | 132 VisitorInterface* visitor, |
| 133 Extension::Location location) |
| 134 : location_(location), visitor_(visitor), visit_count_(0) { |
| 135 } |
132 virtual ~MockExtensionProvider() {} | 136 virtual ~MockExtensionProvider() {} |
133 | 137 |
134 void UpdateOrAddExtension(const std::string& id, | 138 void UpdateOrAddExtension(const std::string& id, |
135 const std::string& version, | 139 const std::string& version, |
136 const FilePath& path) { | 140 const FilePath& path) { |
137 extension_map_[id] = std::make_pair(version, path); | 141 extension_map_[id] = std::make_pair(version, path); |
138 } | 142 } |
139 | 143 |
140 void RemoveExtension(const std::string& id) { | 144 void RemoveExtension(const std::string& id) { |
141 extension_map_.erase(id); | 145 extension_map_.erase(id); |
142 } | 146 } |
143 | 147 |
144 // ExternalExtensionProvider implementation: | 148 // ExternalExtensionProvider implementation: |
145 virtual void VisitRegisteredExtension(Visitor* visitor) const { | 149 virtual void VisitRegisteredExtension() const { |
146 visit_count_++; | 150 visit_count_++; |
147 for (DataMap::const_iterator i = extension_map_.begin(); | 151 for (DataMap::const_iterator i = extension_map_.begin(); |
148 i != extension_map_.end(); ++i) { | 152 i != extension_map_.end(); ++i) { |
149 scoped_ptr<Version> version; | 153 scoped_ptr<Version> version; |
150 version.reset(Version::GetVersionFromString(i->second.first)); | 154 version.reset(Version::GetVersionFromString(i->second.first)); |
151 | 155 |
152 visitor->OnExternalExtensionFileFound( | 156 visitor_->OnExternalExtensionFileFound( |
153 i->first, version.get(), i->second.second, location_); | 157 i->first, version.get(), i->second.second, location_); |
154 } | 158 } |
| 159 visitor_->OnExternalProviderReady(); |
155 } | 160 } |
156 | 161 |
157 virtual bool HasExtension(const std::string& id) const { | 162 virtual bool HasExtension(const std::string& id) const { |
158 return extension_map_.find(id) != extension_map_.end(); | 163 return extension_map_.find(id) != extension_map_.end(); |
159 } | 164 } |
160 | 165 |
161 virtual bool GetExtensionDetails(const std::string& id, | 166 virtual bool GetExtensionDetails(const std::string& id, |
162 Extension::Location* location, | 167 Extension::Location* location, |
163 scoped_ptr<Version>* version) const { | 168 scoped_ptr<Version>* version) const { |
164 DataMap::const_iterator it = extension_map_.find(id); | 169 DataMap::const_iterator it = extension_map_.find(id); |
165 if (it == extension_map_.end()) | 170 if (it == extension_map_.end()) |
166 return false; | 171 return false; |
167 | 172 |
168 if (version) | 173 if (version) |
169 version->reset(Version::GetVersionFromString(it->second.first)); | 174 version->reset(Version::GetVersionFromString(it->second.first)); |
170 | 175 |
171 if (location) | 176 if (location) |
172 *location = location_; | 177 *location = location_; |
173 | 178 |
174 return true; | 179 return true; |
175 } | 180 } |
| 181 |
| 182 virtual bool IsReady() { |
| 183 return true; |
| 184 } |
| 185 |
| 186 virtual void ServiceShutdown() { |
| 187 } |
| 188 |
176 int visit_count() const { return visit_count_; } | 189 int visit_count() const { return visit_count_; } |
177 void set_visit_count(int visit_count) { | 190 void set_visit_count(int visit_count) { |
178 visit_count_ = visit_count; | 191 visit_count_ = visit_count; |
179 } | 192 } |
180 | 193 |
181 private: | 194 private: |
182 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap; | 195 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap; |
183 DataMap extension_map_; | 196 DataMap extension_map_; |
184 Extension::Location location_; | 197 Extension::Location location_; |
| 198 VisitorInterface* visitor_; |
185 | 199 |
186 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). | 200 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). |
187 // Mutable because it must be incremented on each call to | 201 // Mutable because it must be incremented on each call to |
188 // VisitRegisteredExtension(), which must be a const method to inherit | 202 // VisitRegisteredExtension(), which must be a const method to inherit |
189 // from the class being mocked. | 203 // from the class being mocked. |
190 mutable int visit_count_; | 204 mutable int visit_count_; |
191 | 205 |
192 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); | 206 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); |
193 }; | 207 }; |
194 | 208 |
195 class MockProviderVisitor : public ExternalExtensionProvider::Visitor { | 209 class MockProviderVisitor |
| 210 : public ExternalExtensionProviderInterface::VisitorInterface { |
196 public: | 211 public: |
197 MockProviderVisitor() : ids_found_(0) { | 212 MockProviderVisitor() : ids_found_(0) { |
198 } | 213 } |
199 | 214 |
200 int Visit(const std::string& json_data) { | 215 int Visit(const std::string& json_data) { |
201 // Give the test json file to the provider for parsing. | 216 // Give the test json file to the provider for parsing. |
202 provider_.reset(new ExternalPrefExtensionProvider()); | 217 provider_.reset(new ExternalExtensionProviderImpl( |
203 provider_->SetPreferencesForTesting(json_data); | 218 this, |
| 219 new ExternalTestingExtensionLoader(json_data), |
| 220 Extension::EXTERNAL_PREF, |
| 221 Extension::EXTERNAL_PREF_DOWNLOAD)); |
204 | 222 |
205 // We also parse the file into a dictionary to compare what we get back | 223 // We also parse the file into a dictionary to compare what we get back |
206 // from the provider. | 224 // from the provider. |
207 JSONStringValueSerializer serializer(json_data); | 225 JSONStringValueSerializer serializer(json_data); |
208 Value* json_value = serializer.Deserialize(NULL, NULL); | 226 Value* json_value = serializer.Deserialize(NULL, NULL); |
209 | 227 |
210 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { | 228 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { |
211 NOTREACHED() << "Unable to deserialize json data"; | 229 NOTREACHED() << "Unable to deserialize json data"; |
212 return -1; | 230 return -1; |
213 } else { | 231 } else { |
214 DictionaryValue* external_extensions = | 232 DictionaryValue* external_extensions = |
215 static_cast<DictionaryValue*>(json_value); | 233 static_cast<DictionaryValue*>(json_value); |
216 prefs_.reset(external_extensions); | 234 prefs_.reset(external_extensions); |
217 } | 235 } |
218 | 236 |
219 // Reset our counter. | 237 // Reset our counter. |
220 ids_found_ = 0; | 238 ids_found_ = 0; |
221 // Ask the provider to look up all extensions and return them. | 239 // Ask the provider to look up all extensions and return them. |
222 provider_->VisitRegisteredExtension(this); | 240 provider_->VisitRegisteredExtension(); |
223 | 241 |
224 return ids_found_; | 242 return ids_found_; |
225 } | 243 } |
226 | 244 |
227 virtual void OnExternalExtensionFileFound(const std::string& id, | 245 virtual void OnExternalExtensionFileFound(const std::string& id, |
228 const Version* version, | 246 const Version* version, |
229 const FilePath& path, | 247 const FilePath& path, |
230 Extension::Location unused) { | 248 Extension::Location unused) { |
231 ++ids_found_; | 249 ++ids_found_; |
232 DictionaryValue* pref; | 250 DictionaryValue* pref; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 Extension::Location location1 = Extension::INVALID; | 296 Extension::Location location1 = Extension::INVALID; |
279 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1)); | 297 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1)); |
280 EXPECT_FALSE(v1.get()); | 298 EXPECT_FALSE(v1.get()); |
281 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location1); | 299 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location1); |
282 | 300 |
283 // Remove it so we won't count it again. | 301 // Remove it so we won't count it again. |
284 prefs_->Remove(id, NULL); | 302 prefs_->Remove(id, NULL); |
285 } | 303 } |
286 } | 304 } |
287 | 305 |
| 306 virtual void OnExternalProviderReady() { |
| 307 EXPECT_TRUE(provider_->IsReady()); |
| 308 } |
| 309 |
288 private: | 310 private: |
289 int ids_found_; | 311 int ids_found_; |
290 | 312 |
291 scoped_ptr<ExternalPrefExtensionProvider> provider_; | 313 scoped_ptr<ExternalExtensionProviderImpl> provider_; |
292 scoped_ptr<DictionaryValue> prefs_; | 314 scoped_ptr<DictionaryValue> prefs_; |
293 | 315 |
294 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); | 316 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); |
295 }; | 317 }; |
296 | 318 |
297 class ExtensionTestingProfile : public TestingProfile { | 319 class ExtensionTestingProfile : public TestingProfile { |
298 public: | 320 public: |
299 ExtensionTestingProfile() : service_(NULL) { | 321 ExtensionTestingProfile() : service_(NULL) { |
300 } | 322 } |
301 | 323 |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 case NotificationType::EXTENSION_INSTALLED: | 485 case NotificationType::EXTENSION_INSTALLED: |
464 case NotificationType::THEME_INSTALLED: | 486 case NotificationType::THEME_INSTALLED: |
465 installed_ = Details<const Extension>(details).ptr(); | 487 installed_ = Details<const Extension>(details).ptr(); |
466 break; | 488 break; |
467 | 489 |
468 default: | 490 default: |
469 DCHECK(false); | 491 DCHECK(false); |
470 } | 492 } |
471 } | 493 } |
472 | 494 |
473 void AddMockExternalProvider(ExternalExtensionProvider* provider) { | 495 void AddMockExternalProvider(ExternalExtensionProviderInterface* provider) { |
474 service_->AddProviderForTesting(provider); | 496 service_->AddProviderForTesting(provider); |
475 } | 497 } |
476 | 498 |
477 protected: | 499 protected: |
478 void TestExternalProvider(MockExtensionProvider* provider, | 500 void TestExternalProvider(MockExtensionProvider* provider, |
479 Extension::Location location); | 501 Extension::Location location); |
480 | 502 |
481 void PackAndInstallExtension(const FilePath& dir_path, | 503 void PackAndInstallExtension(const FilePath& dir_path, |
482 const FilePath& pem_path, | 504 const FilePath& pem_path, |
483 bool should_succeed) { | 505 bool should_succeed) { |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 // Test the handling of killed extensions. | 1085 // Test the handling of killed extensions. |
1064 TEST_F(ExtensionServiceTest, KilledExtensions) { | 1086 TEST_F(ExtensionServiceTest, KilledExtensions) { |
1065 InitializeEmptyExtensionService(); | 1087 InitializeEmptyExtensionService(); |
1066 | 1088 |
1067 FilePath extensions_path; | 1089 FilePath extensions_path; |
1068 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1090 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
1069 extensions_path = extensions_path.AppendASCII("extensions"); | 1091 extensions_path = extensions_path.AppendASCII("extensions"); |
1070 FilePath path = extensions_path.AppendASCII("good.crx"); | 1092 FilePath path = extensions_path.AppendASCII("good.crx"); |
1071 set_extensions_enabled(true); | 1093 set_extensions_enabled(true); |
1072 | 1094 |
| 1095 scoped_ptr<Version> version; |
| 1096 version.reset(Version::GetVersionFromString("1.0.0.0")); |
1073 // Install an external extension. | 1097 // Install an external extension. |
1074 service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0", | 1098 service_->OnExternalExtensionFileFound(good_crx, version.get(), |
1075 path, Extension::EXTERNAL_PREF); | 1099 path, Extension::EXTERNAL_PREF); |
1076 loop_.RunAllPending(); | 1100 loop_.RunAllPending(); |
1077 ASSERT_TRUE(NULL != service_->GetExtensionById(good_crx, false)); | 1101 ASSERT_TRUE(NULL != service_->GetExtensionById(good_crx, false)); |
1078 | 1102 |
1079 // Uninstall it and check that its killbit gets set. | 1103 // Uninstall it and check that its killbit gets set. |
1080 service_->UninstallExtension(good_crx, false); | 1104 service_->UninstallExtension(good_crx, false); |
1081 loop_.RunAllPending(); | 1105 loop_.RunAllPending(); |
1082 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); | 1106 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); |
1083 | 1107 |
1084 // Try to re-install it externally. This should fail because of the killbit. | 1108 // Try to re-install it externally. This should fail because of the killbit. |
1085 service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0", | 1109 service_->OnExternalExtensionFileFound(good_crx, version.get(), |
1086 path, Extension::EXTERNAL_PREF); | 1110 path, Extension::EXTERNAL_PREF); |
1087 loop_.RunAllPending(); | 1111 loop_.RunAllPending(); |
1088 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1112 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1089 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); | 1113 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); |
1090 | 1114 |
| 1115 version.reset(Version::GetVersionFromString("1.0.0.1")); |
1091 // Repeat the same thing with a newer version of the extension. | 1116 // Repeat the same thing with a newer version of the extension. |
1092 path = extensions_path.AppendASCII("good2.crx"); | 1117 path = extensions_path.AppendASCII("good2.crx"); |
1093 service_->OnExternalExtensionFileFound(good_crx, "1.0.0.1", | 1118 service_->OnExternalExtensionFileFound(good_crx, version.get(), |
1094 path, Extension::EXTERNAL_PREF); | 1119 path, Extension::EXTERNAL_PREF); |
1095 loop_.RunAllPending(); | 1120 loop_.RunAllPending(); |
1096 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1121 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1097 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); | 1122 ValidateIntegerPref(good_crx, "location", Extension::KILLBIT); |
1098 | 1123 |
1099 // Try adding the same extension from an external update URL. | 1124 // Try adding the same extension from an external update URL. |
1100 service_->AddPendingExtensionFromExternalUpdateUrl( | 1125 service_->AddPendingExtensionFromExternalUpdateUrl( |
1101 good_crx, | 1126 good_crx, |
1102 GURL("http:://fake.update/url"), | 1127 GURL("http:://fake.update/url"), |
1103 Extension::EXTERNAL_PREF_DOWNLOAD); | 1128 Extension::EXTERNAL_PREF_DOWNLOAD); |
(...skipping 1750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2854 ASSERT_EQ(1u, loaded_.size()); | 2879 ASSERT_EQ(1u, loaded_.size()); |
2855 ValidatePrefKeyCount(1); | 2880 ValidatePrefKeyCount(1); |
2856 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 2881 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
2857 ValidateIntegerPref(good_crx, "location", location); | 2882 ValidateIntegerPref(good_crx, "location", location); |
2858 | 2883 |
2859 // Now test an externally triggered uninstall (deleting the registry key or | 2884 // Now test an externally triggered uninstall (deleting the registry key or |
2860 // the pref entry). | 2885 // the pref entry). |
2861 provider->RemoveExtension(good_crx); | 2886 provider->RemoveExtension(good_crx); |
2862 | 2887 |
2863 loaded_.clear(); | 2888 loaded_.clear(); |
2864 service_->UnloadAllExtensions(); | 2889 service_->OnExternalProviderReady(); |
2865 service_->LoadAllExtensions(); | |
2866 loop_.RunAllPending(); | 2890 loop_.RunAllPending(); |
2867 ASSERT_EQ(0u, loaded_.size()); | 2891 ASSERT_EQ(0u, loaded_.size()); |
2868 ValidatePrefKeyCount(0); | 2892 ValidatePrefKeyCount(0); |
2869 | 2893 |
2870 // The extension should also be gone from the install directory. | 2894 // The extension should also be gone from the install directory. |
2871 ASSERT_FALSE(file_util::PathExists(install_path)); | 2895 ASSERT_FALSE(file_util::PathExists(install_path)); |
2872 | 2896 |
2873 // Now test the case where user uninstalls and then the extension is removed | 2897 // Now test the case where user uninstalls and then the extension is removed |
2874 // from the external provider. | 2898 // from the external provider. |
2875 | 2899 |
(...skipping 25 matching lines...) Expand all Loading... |
2901 | 2925 |
2902 // Tests the external installation feature | 2926 // Tests the external installation feature |
2903 #if defined(OS_WIN) | 2927 #if defined(OS_WIN) |
2904 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { | 2928 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { |
2905 // This should all work, even when normal extension installation is disabled. | 2929 // This should all work, even when normal extension installation is disabled. |
2906 InitializeEmptyExtensionService(); | 2930 InitializeEmptyExtensionService(); |
2907 set_extensions_enabled(false); | 2931 set_extensions_enabled(false); |
2908 | 2932 |
2909 // Now add providers. Extension system takes ownership of the objects. | 2933 // Now add providers. Extension system takes ownership of the objects. |
2910 MockExtensionProvider* reg_provider = | 2934 MockExtensionProvider* reg_provider = |
2911 new MockExtensionProvider(Extension::EXTERNAL_REGISTRY); | 2935 new MockExtensionProvider(service_.get(), Extension::EXTERNAL_REGISTRY); |
2912 AddMockExternalProvider(reg_provider); | 2936 AddMockExternalProvider(reg_provider); |
2913 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); | 2937 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); |
2914 } | 2938 } |
2915 #endif | 2939 #endif |
2916 | 2940 |
2917 TEST_F(ExtensionServiceTest, ExternalInstallPref) { | 2941 TEST_F(ExtensionServiceTest, ExternalInstallPref) { |
2918 InitializeEmptyExtensionService(); | 2942 InitializeEmptyExtensionService(); |
2919 | 2943 |
2920 // Now add providers. Extension system takes ownership of the objects. | 2944 // Now add providers. Extension system takes ownership of the objects. |
2921 MockExtensionProvider* pref_provider = | 2945 MockExtensionProvider* pref_provider = |
2922 new MockExtensionProvider(Extension::EXTERNAL_PREF); | 2946 new MockExtensionProvider(service_.get(), Extension::EXTERNAL_PREF); |
2923 | 2947 |
2924 AddMockExternalProvider(pref_provider); | 2948 AddMockExternalProvider(pref_provider); |
2925 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); | 2949 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); |
2926 } | 2950 } |
2927 | 2951 |
2928 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { | 2952 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { |
2929 // This should all work, even when normal extension installation is disabled. | 2953 // This should all work, even when normal extension installation is disabled. |
2930 InitializeEmptyExtensionService(); | 2954 InitializeEmptyExtensionService(); |
2931 set_extensions_enabled(false); | 2955 set_extensions_enabled(false); |
2932 | 2956 |
2933 // TODO(skerner): The mock provider is not a good model of a provider | 2957 // TODO(skerner): The mock provider is not a good model of a provider |
2934 // that works with update URLs, because it adds file and version info. | 2958 // that works with update URLs, because it adds file and version info. |
2935 // Extend the mock to work with update URLs. This test checks the | 2959 // Extend the mock to work with update URLs. This test checks the |
2936 // behavior that is common to all external extension visitors. The | 2960 // behavior that is common to all external extension visitors. The |
2937 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 2961 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
2938 // what the visitor does results in an extension being downloaded and | 2962 // what the visitor does results in an extension being downloaded and |
2939 // installed. | 2963 // installed. |
2940 MockExtensionProvider* pref_provider = | 2964 MockExtensionProvider* pref_provider = |
2941 new MockExtensionProvider(Extension::EXTERNAL_PREF_DOWNLOAD); | 2965 new MockExtensionProvider(service_.get(), |
| 2966 Extension::EXTERNAL_PREF_DOWNLOAD); |
2942 AddMockExternalProvider(pref_provider); | 2967 AddMockExternalProvider(pref_provider); |
2943 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); | 2968 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); |
2944 } | 2969 } |
2945 | 2970 |
2946 // Tests that external extensions get uninstalled when the external extension | 2971 // Tests that external extensions get uninstalled when the external extension |
2947 // providers can't account for them. | 2972 // providers can't account for them. |
2948 TEST_F(ExtensionServiceTest, ExternalUninstall) { | 2973 TEST_F(ExtensionServiceTest, ExternalUninstall) { |
2949 // Start the extensions service with one external extension already installed. | 2974 // Start the extensions service with one external extension already installed. |
2950 FilePath source_install_dir; | 2975 FilePath source_install_dir; |
2951 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 2976 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3111 BrowserThread ui_thread(BrowserThread::UI, &loop); | 3136 BrowserThread ui_thread(BrowserThread::UI, &loop); |
3112 BrowserThread file_thread(BrowserThread::FILE, &loop); | 3137 BrowserThread file_thread(BrowserThread::FILE, &loop); |
3113 scoped_ptr<CommandLine> command_line; | 3138 scoped_ptr<CommandLine> command_line; |
3114 scoped_refptr<ExtensionService> service; | 3139 scoped_refptr<ExtensionService> service; |
3115 FilePath install_dir = profile->GetPath() | 3140 FilePath install_dir = profile->GetPath() |
3116 .AppendASCII(ExtensionService::kInstallDirectoryName); | 3141 .AppendASCII(ExtensionService::kInstallDirectoryName); |
3117 | 3142 |
3118 // By default, we are enabled. | 3143 // By default, we are enabled. |
3119 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3144 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
3120 service = profile->CreateExtensionService(command_line.get(), | 3145 service = profile->CreateExtensionService(command_line.get(), |
3121 install_dir); | 3146 install_dir); |
3122 EXPECT_TRUE(service->extensions_enabled()); | 3147 EXPECT_TRUE(service->extensions_enabled()); |
3123 service->Init(); | 3148 service->Init(); |
3124 loop.RunAllPending(); | 3149 loop.RunAllPending(); |
3125 EXPECT_TRUE(recorder.ready()); | 3150 EXPECT_TRUE(recorder.ready()); |
3126 | 3151 |
3127 // If either the command line or pref is set, we are disabled. | 3152 // If either the command line or pref is set, we are disabled. |
3128 recorder.set_ready(false); | 3153 recorder.set_ready(false); |
3129 profile.reset(new TestingProfile()); | 3154 profile.reset(new TestingProfile()); |
3130 command_line->AppendSwitch(switches::kDisableExtensions); | 3155 command_line->AppendSwitch(switches::kDisableExtensions); |
3131 service = profile->CreateExtensionService(command_line.get(), | 3156 service = profile->CreateExtensionService(command_line.get(), |
3132 install_dir); | 3157 install_dir); |
3133 EXPECT_FALSE(service->extensions_enabled()); | 3158 EXPECT_FALSE(service->extensions_enabled()); |
3134 service->Init(); | 3159 service->Init(); |
3135 loop.RunAllPending(); | 3160 loop.RunAllPending(); |
3136 EXPECT_TRUE(recorder.ready()); | 3161 EXPECT_TRUE(recorder.ready()); |
3137 | 3162 |
3138 recorder.set_ready(false); | 3163 recorder.set_ready(false); |
3139 profile.reset(new TestingProfile()); | 3164 profile.reset(new TestingProfile()); |
3140 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3165 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
3141 service = profile->CreateExtensionService(command_line.get(), | 3166 service = profile->CreateExtensionService(command_line.get(), |
3142 install_dir); | 3167 install_dir); |
3143 EXPECT_FALSE(service->extensions_enabled()); | 3168 EXPECT_FALSE(service->extensions_enabled()); |
3144 service->Init(); | 3169 service->Init(); |
3145 loop.RunAllPending(); | 3170 loop.RunAllPending(); |
3146 EXPECT_TRUE(recorder.ready()); | 3171 EXPECT_TRUE(recorder.ready()); |
3147 | 3172 |
3148 recorder.set_ready(false); | 3173 recorder.set_ready(false); |
3149 profile.reset(new TestingProfile()); | 3174 profile.reset(new TestingProfile()); |
3150 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3175 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
3151 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3176 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
3152 service = profile->CreateExtensionService(command_line.get(), | 3177 service = profile->CreateExtensionService(command_line.get(), |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3255 // Component extensions shouldn't get recourded in the prefs. | 3280 // Component extensions shouldn't get recourded in the prefs. |
3256 ValidatePrefKeyCount(0); | 3281 ValidatePrefKeyCount(0); |
3257 | 3282 |
3258 // Reload all extensions, and make sure it comes back. | 3283 // Reload all extensions, and make sure it comes back. |
3259 std::string extension_id = service_->extensions()->at(0)->id(); | 3284 std::string extension_id = service_->extensions()->at(0)->id(); |
3260 loaded_.clear(); | 3285 loaded_.clear(); |
3261 service_->ReloadExtensions(); | 3286 service_->ReloadExtensions(); |
3262 ASSERT_EQ(1u, service_->extensions()->size()); | 3287 ASSERT_EQ(1u, service_->extensions()->size()); |
3263 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); | 3288 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); |
3264 } | 3289 } |
OLD | NEW |