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

Side by Side Diff: chrome/test/live_sync/sync_extension_helper.cc

Issue 7599019: Allow sync integration tests to operate on multiple datatypes: Apps, Extensions, Themes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CR feedback Created 9 years, 4 months 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
« no previous file with comments | « chrome/test/live_sync/sync_extension_helper.h ('k') | chrome/test/live_sync/themes_helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 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/test/live_sync/live_sync_extension_helper.h" 5 #include "chrome/test/live_sync/sync_extension_helper.h"
6 6
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/extensions/extension_service.h" 11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/pending_extension_info.h" 12 #include "chrome/browser/extensions/pending_extension_info.h"
13 #include "chrome/browser/extensions/pending_extension_manager.h" 13 #include "chrome/browser/extensions/pending_extension_manager.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/common/extensions/extension_constants.h" 15 #include "chrome/common/extensions/extension_constants.h"
16 #include "chrome/test/live_sync/live_sync_test.h" 16 #include "chrome/test/live_sync/live_sync_test.h"
17 #include "chrome/test/live_sync/sync_datatype_helper.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
19 LiveSyncExtensionHelper::ExtensionState::ExtensionState() 20 SyncExtensionHelper::ExtensionState::ExtensionState()
20 : enabled_state(ENABLED), incognito_enabled(false) {} 21 : enabled_state(ENABLED), incognito_enabled(false) {}
21 22
22 LiveSyncExtensionHelper::ExtensionState::~ExtensionState() {} 23 SyncExtensionHelper::ExtensionState::~ExtensionState() {}
23 24
24 bool LiveSyncExtensionHelper::ExtensionState::Equals( 25 bool SyncExtensionHelper::ExtensionState::Equals(
25 const LiveSyncExtensionHelper::ExtensionState &other) const { 26 const SyncExtensionHelper::ExtensionState &other) const {
26 return ((enabled_state == other.enabled_state) && 27 return ((enabled_state == other.enabled_state) &&
27 (incognito_enabled == other.incognito_enabled)); 28 (incognito_enabled == other.incognito_enabled));
28 } 29 }
29 30
30 LiveSyncExtensionHelper::LiveSyncExtensionHelper() {} 31 // static
32 SyncExtensionHelper* SyncExtensionHelper::GetInstance() {
33 SyncExtensionHelper* instance = Singleton<SyncExtensionHelper>::get();
34 instance->SetupIfNecessary(sync_datatype_helper::test());
35 return instance;
36 }
31 37
32 LiveSyncExtensionHelper::~LiveSyncExtensionHelper() {} 38 SyncExtensionHelper::SyncExtensionHelper() : setup_completed_(false) {}
39
40 SyncExtensionHelper::~SyncExtensionHelper() {}
33 41
34 // static 42 // static
35 std::string LiveSyncExtensionHelper::NameToId(const std::string& name) { 43 std::string SyncExtensionHelper::NameToId(const std::string& name) {
36 std::string id; 44 std::string id;
37 EXPECT_TRUE(Extension::GenerateId(name, &id)); 45 EXPECT_TRUE(Extension::GenerateId(name, &id));
38 return id; 46 return id;
39 } 47 }
40 48
41 void LiveSyncExtensionHelper::Setup(LiveSyncTest* test) { 49 void SyncExtensionHelper::SetupIfNecessary(LiveSyncTest* test) {
50 if (setup_completed_)
51 return;
52
42 for (int i = 0; i < test->num_clients(); ++i) { 53 for (int i = 0; i < test->num_clients(); ++i) {
43 SetupProfile(test->GetProfile(i)); 54 SetupProfile(test->GetProfile(i));
44 } 55 }
45 SetupProfile(test->verifier()); 56 SetupProfile(test->verifier());
57
58 setup_completed_ = true;
46 } 59 }
47 60
48 void LiveSyncExtensionHelper::InstallExtension( 61 void SyncExtensionHelper::InstallExtension(
49 Profile* profile, const std::string& name, Extension::Type type) { 62 Profile* profile, const std::string& name, Extension::Type type) {
50 scoped_refptr<Extension> extension = GetExtension(profile, name, type); 63 scoped_refptr<Extension> extension = GetExtension(profile, name, type);
51 ASSERT_TRUE(extension.get()) << "Could not get extension " << name 64 ASSERT_TRUE(extension.get()) << "Could not get extension " << name
52 << " (profile = " << profile << ")"; 65 << " (profile = " << profile << ")";
53 profile->GetExtensionService()->OnExtensionInstalled( 66 profile->GetExtensionService()->OnExtensionInstalled(
54 extension, extension->UpdatesFromGallery()); 67 extension, extension->UpdatesFromGallery());
55 } 68 }
56 69
57 void LiveSyncExtensionHelper::UninstallExtension( 70 void SyncExtensionHelper::UninstallExtension(
58 Profile* profile, const std::string& name) { 71 Profile* profile, const std::string& name) {
59 ExtensionService::UninstallExtensionHelper(profile->GetExtensionService(), 72 ExtensionService::UninstallExtensionHelper(profile->GetExtensionService(),
60 NameToId(name)); 73 NameToId(name));
61 } 74 }
62 75
63 std::vector<std::string> LiveSyncExtensionHelper::GetInstalledExtensionNames( 76 std::vector<std::string> SyncExtensionHelper::GetInstalledExtensionNames(
64 Profile* profile) const { 77 Profile* profile) const {
65 std::vector<std::string> names; 78 std::vector<std::string> names;
66 ExtensionService* extension_service = profile->GetExtensionService(); 79 ExtensionService* extension_service = profile->GetExtensionService();
67 80
68 const ExtensionList* extensions = extension_service->extensions(); 81 const ExtensionList* extensions = extension_service->extensions();
69 for (ExtensionList::const_iterator it = extensions->begin(); 82 for (ExtensionList::const_iterator it = extensions->begin();
70 it != extensions->end(); ++it) { 83 it != extensions->end(); ++it) {
71 names.push_back((*it)->name()); 84 names.push_back((*it)->name());
72 } 85 }
73 86
74 const ExtensionList* disabled_extensions = 87 const ExtensionList* disabled_extensions =
75 extension_service->disabled_extensions(); 88 extension_service->disabled_extensions();
76 for (ExtensionList::const_iterator it = disabled_extensions->begin(); 89 for (ExtensionList::const_iterator it = disabled_extensions->begin();
77 it != disabled_extensions->end(); ++it) { 90 it != disabled_extensions->end(); ++it) {
78 names.push_back((*it)->name()); 91 names.push_back((*it)->name());
79 } 92 }
80 93
81 const ExtensionList* terminated_extensions = 94 const ExtensionList* terminated_extensions =
82 extension_service->terminated_extensions(); 95 extension_service->terminated_extensions();
83 for (ExtensionList::const_iterator it = terminated_extensions->begin(); 96 for (ExtensionList::const_iterator it = terminated_extensions->begin();
84 it != terminated_extensions->end(); ++it) { 97 it != terminated_extensions->end(); ++it) {
85 names.push_back((*it)->name()); 98 names.push_back((*it)->name());
86 } 99 }
87 100
88 return names; 101 return names;
89 } 102 }
90 103
91 void LiveSyncExtensionHelper::EnableExtension(Profile* profile, 104 void SyncExtensionHelper::EnableExtension(Profile* profile,
92 const std::string& name) { 105 const std::string& name) {
akalin 2011/08/11 00:08:08 indent
Raghu Simha 2011/08/11 00:30:50 Good catch. Done.
93 profile->GetExtensionService()->EnableExtension(NameToId(name)); 106 profile->GetExtensionService()->EnableExtension(NameToId(name));
94 } 107 }
95 108
96 void LiveSyncExtensionHelper::DisableExtension(Profile* profile, 109 void SyncExtensionHelper::DisableExtension(Profile* profile,
97 const std::string& name) { 110 const std::string& name) {
akalin 2011/08/11 00:08:08 indent
Raghu Simha 2011/08/11 00:30:50 Good catch. Done.
98 profile->GetExtensionService()->DisableExtension(NameToId(name)); 111 profile->GetExtensionService()->DisableExtension(NameToId(name));
99 } 112 }
100 113
101 bool LiveSyncExtensionHelper::IsExtensionEnabled( 114 bool SyncExtensionHelper::IsExtensionEnabled(
102 Profile* profile, const std::string& name) const { 115 Profile* profile, const std::string& name) const {
103 return profile->GetExtensionService()->IsExtensionEnabled(NameToId(name)); 116 return profile->GetExtensionService()->IsExtensionEnabled(NameToId(name));
104 } 117 }
105 118
106 void LiveSyncExtensionHelper::IncognitoEnableExtension( 119 void SyncExtensionHelper::IncognitoEnableExtension(
107 Profile* profile, const std::string& name) { 120 Profile* profile, const std::string& name) {
108 profile->GetExtensionService()->SetIsIncognitoEnabled(NameToId(name), true); 121 profile->GetExtensionService()->SetIsIncognitoEnabled(NameToId(name), true);
109 } 122 }
110 123
111 void LiveSyncExtensionHelper::IncognitoDisableExtension( 124 void SyncExtensionHelper::IncognitoDisableExtension(
112 Profile* profile, const std::string& name) { 125 Profile* profile, const std::string& name) {
113 profile->GetExtensionService()->SetIsIncognitoEnabled(NameToId(name), false); 126 profile->GetExtensionService()->SetIsIncognitoEnabled(NameToId(name), false);
114 } 127 }
115 128
116 bool LiveSyncExtensionHelper::IsIncognitoEnabled( 129 bool SyncExtensionHelper::IsIncognitoEnabled(
117 Profile* profile, const std::string& name) const { 130 Profile* profile, const std::string& name) const {
118 return profile->GetExtensionService()->IsIncognitoEnabled(NameToId(name)); 131 return profile->GetExtensionService()->IsIncognitoEnabled(NameToId(name));
119 } 132 }
120 133
121 134
122 bool LiveSyncExtensionHelper::IsExtensionPendingInstallForSync( 135 bool SyncExtensionHelper::IsExtensionPendingInstallForSync(
123 Profile* profile, const std::string& id) const { 136 Profile* profile, const std::string& id) const {
124 const PendingExtensionManager* pending_extension_manager = 137 const PendingExtensionManager* pending_extension_manager =
125 profile->GetExtensionService()->pending_extension_manager(); 138 profile->GetExtensionService()->pending_extension_manager();
126 PendingExtensionInfo info; 139 PendingExtensionInfo info;
127 if (!pending_extension_manager->GetById(id, &info)) { 140 if (!pending_extension_manager->GetById(id, &info)) {
128 return false; 141 return false;
129 } 142 }
130 return info.is_from_sync(); 143 return info.is_from_sync();
131 } 144 }
132 145
133 void LiveSyncExtensionHelper::InstallExtensionsPendingForSync( 146 void SyncExtensionHelper::InstallExtensionsPendingForSync(
134 Profile* profile, Extension::Type type) { 147 Profile* profile, Extension::Type type) {
135 // TODO(akalin): Mock out the servers that the extensions auto-update 148 // TODO(akalin): Mock out the servers that the extensions auto-update
136 // mechanism talk to so as to more closely match what actually happens. 149 // mechanism talk to so as to more closely match what actually happens.
137 // Background networking will need to be re-enabled for extensions tests. 150 // Background networking will need to be re-enabled for extensions tests.
138 151
139 // We make a copy here since InstallExtension() removes the 152 // We make a copy here since InstallExtension() removes the
140 // extension from the extensions service's copy. 153 // extension from the extensions service's copy.
141 const PendingExtensionManager* pending_extension_manager = 154 const PendingExtensionManager* pending_extension_manager =
142 profile->GetExtensionService()->pending_extension_manager(); 155 profile->GetExtensionService()->pending_extension_manager();
143 PendingExtensionManager::PendingExtensionMap pending_extensions( 156 PendingExtensionManager::PendingExtensionMap pending_extensions(
144 pending_extension_manager->begin(), 157 pending_extension_manager->begin(),
145 pending_extension_manager->end()); 158 pending_extension_manager->end());
146 for (PendingExtensionManager::const_iterator it = pending_extensions.begin(); 159 for (PendingExtensionManager::const_iterator it = pending_extensions.begin();
147 it != pending_extensions.end(); ++it) { 160 it != pending_extensions.end(); ++it) {
148 if (!it->second.is_from_sync()) { 161 if (!it->second.is_from_sync()) {
149 continue; 162 continue;
150 } 163 }
151 const std::string& id = it->first; 164 const std::string& id = it->first;
152 StringMap::const_iterator it2 = id_to_name_.find(id); 165 StringMap::const_iterator it2 = id_to_name_.find(id);
153 if (it2 == id_to_name_.end()) { 166 if (it2 == id_to_name_.end()) {
154 ADD_FAILURE() << "Could not get name for id " << id 167 ADD_FAILURE() << "Could not get name for id " << id
155 << " (profile = " << profile->GetDebugName() << ")"; 168 << " (profile = " << profile->GetDebugName() << ")";
156 continue; 169 continue;
157 } 170 }
158 InstallExtension(profile, it2->second, type); 171 InstallExtension(profile, it2->second, type);
159 } 172 }
160 } 173 }
161 174
162 LiveSyncExtensionHelper::ExtensionStateMap 175 SyncExtensionHelper::ExtensionStateMap
163 LiveSyncExtensionHelper::GetExtensionStates(Profile* profile) { 176 SyncExtensionHelper::GetExtensionStates(Profile* profile) {
164 const std::string& profile_debug_name = profile->GetDebugName(); 177 const std::string& profile_debug_name = profile->GetDebugName();
165 178
166 ExtensionStateMap extension_state_map; 179 ExtensionStateMap extension_state_map;
167 180
168 ExtensionService* extension_service = profile->GetExtensionService(); 181 ExtensionService* extension_service = profile->GetExtensionService();
169 182
170 const ExtensionList* extensions = extension_service->extensions(); 183 const ExtensionList* extensions = extension_service->extensions();
171 for (ExtensionList::const_iterator it = extensions->begin(); 184 for (ExtensionList::const_iterator it = extensions->begin();
172 it != extensions->end(); ++it) { 185 it != extensions->end(); ++it) {
173 const std::string& id = (*it)->id(); 186 const std::string& id = (*it)->id();
(...skipping 25 matching lines...) Expand all
199 extension_state_map[id].enabled_state = ExtensionState::PENDING; 212 extension_state_map[id].enabled_state = ExtensionState::PENDING;
200 extension_state_map[id].incognito_enabled = 213 extension_state_map[id].incognito_enabled =
201 extension_service->IsIncognitoEnabled(id); 214 extension_service->IsIncognitoEnabled(id);
202 VLOG(2) << "Extension " << it->first << " in profile " 215 VLOG(2) << "Extension " << it->first << " in profile "
203 << profile_debug_name << " is pending"; 216 << profile_debug_name << " is pending";
204 } 217 }
205 218
206 return extension_state_map; 219 return extension_state_map;
207 } 220 }
208 221
209 bool LiveSyncExtensionHelper::ExtensionStatesMatch( 222 bool SyncExtensionHelper::ExtensionStatesMatch(
210 Profile* profile1, Profile* profile2) { 223 Profile* profile1, Profile* profile2) {
211 const ExtensionStateMap& state_map1 = GetExtensionStates(profile1); 224 const ExtensionStateMap& state_map1 = GetExtensionStates(profile1);
212 const ExtensionStateMap& state_map2 = GetExtensionStates(profile2); 225 const ExtensionStateMap& state_map2 = GetExtensionStates(profile2);
213 if (state_map1.size() != state_map2.size()) { 226 if (state_map1.size() != state_map2.size()) {
214 VLOG(1) << "Number of extensions for profile " << profile1->GetDebugName() 227 VLOG(1) << "Number of extensions for profile " << profile1->GetDebugName()
215 << " does not match profile " << profile2->GetDebugName(); 228 << " does not match profile " << profile2->GetDebugName();
216 return false; 229 return false;
217 } 230 }
218 231
219 ExtensionStateMap::const_iterator it1 = state_map1.begin(); 232 ExtensionStateMap::const_iterator it1 = state_map1.begin();
220 ExtensionStateMap::const_iterator it2 = state_map2.begin(); 233 ExtensionStateMap::const_iterator it2 = state_map2.begin();
221 while (it1 != state_map1.end()) { 234 while (it1 != state_map1.end()) {
222 if (it1->first != it2->first) { 235 if (it1->first != it2->first) {
223 VLOG(1) << "Extensions for profile " << profile1->GetDebugName() 236 VLOG(1) << "Extensions for profile " << profile1->GetDebugName()
224 << " do not match profile " << profile2->GetDebugName(); 237 << " do not match profile " << profile2->GetDebugName();
225 return false; 238 return false;
226 } else if (!it1->second.Equals(it2->second)) { 239 } else if (!it1->second.Equals(it2->second)) {
227 VLOG(1) << "Extension states for profile " << profile1->GetDebugName() 240 VLOG(1) << "Extension states for profile " << profile1->GetDebugName()
228 << " do not match profile " << profile2->GetDebugName(); 241 << " do not match profile " << profile2->GetDebugName();
229 return false; 242 return false;
230 } 243 }
231 ++it1; 244 ++it1;
232 ++it2; 245 ++it2;
233 } 246 }
234 return true; 247 return true;
235 } 248 }
236 249
237 void LiveSyncExtensionHelper::SetupProfile(Profile* profile) { 250 void SyncExtensionHelper::SetupProfile(Profile* profile) {
238 profile->InitExtensions(true); 251 profile->InitExtensions(true);
239 profile_extensions_.insert(make_pair(profile, ExtensionNameMap())); 252 profile_extensions_.insert(make_pair(profile, ExtensionNameMap()));
240 } 253 }
241 254
242 namespace { 255 namespace {
243 256
244 std::string NameToPublicKey(const std::string& name) { 257 std::string NameToPublicKey(const std::string& name) {
245 std::string public_key; 258 std::string public_key;
246 std::string pem; 259 std::string pem;
247 EXPECT_TRUE(Extension::ProducePEM(name, &pem) && 260 EXPECT_TRUE(Extension::ProducePEM(name, &pem) &&
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 } 317 }
305 if (extension->GetType() != type) { 318 if (extension->GetType() != type) {
306 EXPECT_EQ(type, extension->GetType()); 319 EXPECT_EQ(type, extension->GetType());
307 return NULL; 320 return NULL;
308 } 321 }
309 return extension; 322 return extension;
310 } 323 }
311 324
312 } // namespace 325 } // namespace
313 326
314 scoped_refptr<Extension> LiveSyncExtensionHelper::GetExtension( 327 scoped_refptr<Extension> SyncExtensionHelper::GetExtension(
315 Profile* profile, const std::string& name, 328 Profile* profile, const std::string& name,
316 Extension::Type type) { 329 Extension::Type type) {
317 if (name.empty()) { 330 if (name.empty()) {
318 ADD_FAILURE(); 331 ADD_FAILURE();
319 return NULL; 332 return NULL;
320 } 333 }
321 ProfileExtensionNameMap::iterator it = profile_extensions_.find(profile); 334 ProfileExtensionNameMap::iterator it = profile_extensions_.find(profile);
322 if (it == profile_extensions_.end()) { 335 if (it == profile_extensions_.end()) {
323 ADD_FAILURE(); 336 ADD_FAILURE();
324 return NULL; 337 return NULL;
(...skipping 14 matching lines...) Expand all
339 if (extension->id() != expected_id) { 352 if (extension->id() != expected_id) {
340 EXPECT_EQ(expected_id, extension->id()); 353 EXPECT_EQ(expected_id, extension->id());
341 return NULL; 354 return NULL;
342 } 355 }
343 VLOG(2) << "created extension with name = " 356 VLOG(2) << "created extension with name = "
344 << name << ", id = " << expected_id; 357 << name << ", id = " << expected_id;
345 (it->second)[name] = extension; 358 (it->second)[name] = extension;
346 id_to_name_[expected_id] = name; 359 id_to_name_[expected_id] = name;
347 return extension; 360 return extension;
348 } 361 }
OLDNEW
« no previous file with comments | « chrome/test/live_sync/sync_extension_helper.h ('k') | chrome/test/live_sync/themes_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698