Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/extensions/extensions_service_unittest.cc

Issue 5535002: Decouple killbit testing from external extension providers (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: improve comments Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/extensions_service_unittest.h" 5 #include "chrome/browser/extensions/extensions_service_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 const std::string& version, 133 const std::string& version,
134 const FilePath& path) { 134 const FilePath& path) {
135 extension_map_[id] = std::make_pair(version, path); 135 extension_map_[id] = std::make_pair(version, path);
136 } 136 }
137 137
138 void RemoveExtension(const std::string& id) { 138 void RemoveExtension(const std::string& id) {
139 extension_map_.erase(id); 139 extension_map_.erase(id);
140 } 140 }
141 141
142 // ExternalExtensionProvider implementation: 142 // ExternalExtensionProvider implementation:
143 virtual void VisitRegisteredExtension( 143 virtual void VisitRegisteredExtension(Visitor* visitor) const {
144 Visitor* visitor, const std::set<std::string>& ids_to_ignore) const {
145 visit_count_++; 144 visit_count_++;
146 for (DataMap::const_iterator i = extension_map_.begin(); 145 for (DataMap::const_iterator i = extension_map_.begin();
147 i != extension_map_.end(); ++i) { 146 i != extension_map_.end(); ++i) {
148 if (ids_to_ignore.find(i->first) != ids_to_ignore.end())
149 continue;
150 scoped_ptr<Version> version; 147 scoped_ptr<Version> version;
151 version.reset(Version::GetVersionFromString(i->second.first)); 148 version.reset(Version::GetVersionFromString(i->second.first));
152 149
153 visitor->OnExternalExtensionFileFound( 150 visitor->OnExternalExtensionFileFound(
154 i->first, version.get(), i->second.second, location_); 151 i->first, version.get(), i->second.second, location_);
155 } 152 }
156 } 153 }
157 154
158 virtual bool HasExtension(const std::string& id) const { 155 virtual bool HasExtension(const std::string& id) const {
159 return extension_map_.find(id) != extension_map_.end(); 156 return extension_map_.find(id) != extension_map_.end();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 mutable int visit_count_; 188 mutable int visit_count_;
192 189
193 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); 190 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider);
194 }; 191 };
195 192
196 class MockProviderVisitor : public ExternalExtensionProvider::Visitor { 193 class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
197 public: 194 public:
198 MockProviderVisitor() : ids_found_(0) { 195 MockProviderVisitor() : ids_found_(0) {
199 } 196 }
200 197
201 int Visit(const std::string& json_data, 198 int Visit(const std::string& json_data) {
202 const std::set<std::string>& ignore_list) {
203 // Give the test json file to the provider for parsing. 199 // Give the test json file to the provider for parsing.
204 provider_.reset(new ExternalPrefExtensionProvider()); 200 provider_.reset(new ExternalPrefExtensionProvider());
205 provider_->SetPreferencesForTesting(json_data); 201 provider_->SetPreferencesForTesting(json_data);
206 202
207 // We also parse the file into a dictionary to compare what we get back 203 // We also parse the file into a dictionary to compare what we get back
208 // from the provider. 204 // from the provider.
209 JSONStringValueSerializer serializer(json_data); 205 JSONStringValueSerializer serializer(json_data);
210 Value* json_value = serializer.Deserialize(NULL, NULL); 206 Value* json_value = serializer.Deserialize(NULL, NULL);
211 207
212 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { 208 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) {
213 NOTREACHED() << "Unable to deserialize json data"; 209 NOTREACHED() << "Unable to deserialize json data";
214 return -1; 210 return -1;
215 } else { 211 } else {
216 DictionaryValue* external_extensions = 212 DictionaryValue* external_extensions =
217 static_cast<DictionaryValue*>(json_value); 213 static_cast<DictionaryValue*>(json_value);
218 prefs_.reset(external_extensions); 214 prefs_.reset(external_extensions);
219 } 215 }
220 216
221 // Reset our counter. 217 // Reset our counter.
222 ids_found_ = 0; 218 ids_found_ = 0;
223 // Ask the provider to look up all extensions (and return the ones 219 // Ask the provider to look up all extensions and return them.
224 // found (that are not on the ignore list). 220 provider_->VisitRegisteredExtension(this);
225 provider_->VisitRegisteredExtension(this, ignore_list);
226 221
227 return ids_found_; 222 return ids_found_;
228 } 223 }
229 224
230 virtual void OnExternalExtensionFileFound(const std::string& id, 225 virtual void OnExternalExtensionFileFound(const std::string& id,
231 const Version* version, 226 const Version* version,
232 const FilePath& path, 227 const FilePath& path,
233 Extension::Location unused) { 228 Extension::Location unused) {
234 ++ids_found_; 229 ++ids_found_;
235 DictionaryValue* pref; 230 DictionaryValue* pref;
(...skipping 2584 matching lines...) Expand 10 before | Expand all | Expand 10 after
2820 " \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\": {" 2815 " \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\": {"
2821 " \"external_crx\": \"RandomExtension2.crx\"," 2816 " \"external_crx\": \"RandomExtension2.crx\","
2822 " \"external_version\": \"2.0\"" 2817 " \"external_version\": \"2.0\""
2823 " }," 2818 " },"
2824 " \"cccccccccccccccccccccccccccccccc\": {" 2819 " \"cccccccccccccccccccccccccccccccc\": {"
2825 " \"external_update_url\": \"http:\\\\foo.com/update\"" 2820 " \"external_update_url\": \"http:\\\\foo.com/update\""
2826 " }" 2821 " }"
2827 "}"; 2822 "}";
2828 2823
2829 MockProviderVisitor visitor; 2824 MockProviderVisitor visitor;
2830 std::set<std::string> ignore_list;
2831 EXPECT_EQ(3, visitor.Visit(json_data, ignore_list));
2832 ignore_list.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
2833 EXPECT_EQ(2, visitor.Visit(json_data, ignore_list));
2834 ignore_list.insert("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
2835 EXPECT_EQ(1, visitor.Visit(json_data, ignore_list));
2836 ignore_list.insert("cccccccccccccccccccccccccccccccc");
2837 EXPECT_EQ(0, visitor.Visit(json_data, ignore_list));
2838 2825
2839 // Simulate an external_extensions.json file that contains seven invalid 2826 // Simulate an external_extensions.json file that contains seven invalid
2840 // extensions: 2827 // extensions:
2841 // - One that is missing the 'external_crx' key. 2828 // - One that is missing the 'external_crx' key.
2842 // - One that is missing the 'external_version' key. 2829 // - One that is missing the 'external_version' key.
2843 // - One that is specifying .. in the path. 2830 // - One that is specifying .. in the path.
2844 // - One that specifies both a file and update URL. 2831 // - One that specifies both a file and update URL.
2845 // - One that specifies no file or update URL. 2832 // - One that specifies no file or update URL.
2846 // - One that has an update URL that is not well formed. 2833 // - One that has an update URL that is not well formed.
2847 // - One that contains a malformed version. 2834 // - One that contains a malformed version.
(...skipping 23 matching lines...) Expand all
2871 " }," 2858 " },"
2872 " \"gggggggggggggggggggggggggggggggg\": {" 2859 " \"gggggggggggggggggggggggggggggggg\": {"
2873 " \"external_crx\": \"RandomExtension3.crx\"," 2860 " \"external_crx\": \"RandomExtension3.crx\","
2874 " \"external_version\": \"This is not a valid version!\"" 2861 " \"external_version\": \"This is not a valid version!\""
2875 " }," 2862 " },"
2876 " \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\": {" 2863 " \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\": {"
2877 " \"external_crx\": \"RandomValidExtension.crx\"," 2864 " \"external_crx\": \"RandomValidExtension.crx\","
2878 " \"external_version\": \"1.0\"" 2865 " \"external_version\": \"1.0\""
2879 " }" 2866 " }"
2880 "}"; 2867 "}";
2881 ignore_list.clear(); 2868 EXPECT_EQ(1, visitor.Visit(json_data));
2882 EXPECT_EQ(1, visitor.Visit(json_data, ignore_list));
2883 } 2869 }
2884 2870
2885 // Test loading good extensions from the profile directory. 2871 // Test loading good extensions from the profile directory.
2886 TEST_F(ExtensionsServiceTest, LoadAndRelocalizeExtensions) { 2872 TEST_F(ExtensionsServiceTest, LoadAndRelocalizeExtensions) {
2887 // Initialize the test dir with a good Preferences/extensions. 2873 // Initialize the test dir with a good Preferences/extensions.
2888 FilePath source_install_dir; 2874 FilePath source_install_dir;
2889 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); 2875 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir));
2890 source_install_dir = source_install_dir 2876 source_install_dir = source_install_dir
2891 .AppendASCII("extensions") 2877 .AppendASCII("extensions")
2892 .AppendASCII("l10n"); 2878 .AppendASCII("l10n");
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
3097 // Component extensions shouldn't get recourded in the prefs. 3083 // Component extensions shouldn't get recourded in the prefs.
3098 ValidatePrefKeyCount(0); 3084 ValidatePrefKeyCount(0);
3099 3085
3100 // Reload all extensions, and make sure it comes back. 3086 // Reload all extensions, and make sure it comes back.
3101 std::string extension_id = service_->extensions()->at(0)->id(); 3087 std::string extension_id = service_->extensions()->at(0)->id();
3102 loaded_.clear(); 3088 loaded_.clear();
3103 service_->ReloadExtensions(); 3089 service_->ReloadExtensions();
3104 ASSERT_EQ(1u, service_->extensions()->size()); 3090 ASSERT_EQ(1u, service_->extensions()->size());
3105 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); 3091 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id());
3106 } 3092 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698