OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
14 #include "base/memory/linked_ptr.h" | |
15 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
16 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
17 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
18 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
19 #include "build/build_config.h" | 18 #include "build/build_config.h" |
20 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" | 19 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" |
21 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" | 20 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" |
22 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" | 21 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" |
23 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
24 #include "components/sync/api/sync_change_processor.h" | 23 #include "components/sync/api/sync_change_processor.h" |
(...skipping 22 matching lines...) Expand all Loading... |
47 namespace util = settings_test_util; | 46 namespace util = settings_test_util; |
48 | 47 |
49 namespace { | 48 namespace { |
50 | 49 |
51 // To save typing ValueStore::DEFAULTS everywhere. | 50 // To save typing ValueStore::DEFAULTS everywhere. |
52 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; | 51 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; |
53 | 52 |
54 // More saving typing. Maps extension IDs to a list of sync changes for that | 53 // More saving typing. Maps extension IDs to a list of sync changes for that |
55 // extension. | 54 // extension. |
56 using SettingSyncDataMultimap = | 55 using SettingSyncDataMultimap = |
57 std::map<std::string, linked_ptr<SettingSyncDataList>>; | 56 std::map<std::string, std::unique_ptr<SettingSyncDataList>>; |
58 | 57 |
59 // Gets the pretty-printed JSON for a value. | 58 // Gets the pretty-printed JSON for a value. |
60 static std::string GetJson(const base::Value& value) { | 59 static std::string GetJson(const base::Value& value) { |
61 std::string json; | 60 std::string json; |
62 base::JSONWriter::WriteWithOptions( | 61 base::JSONWriter::WriteWithOptions( |
63 value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); | 62 value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); |
64 return json; | 63 return json; |
65 } | 64 } |
66 | 65 |
67 // Returns whether two Values are equal. | 66 // Returns whether two Values are equal. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 const syncer::SyncChangeList& change_list) override { | 112 const syncer::SyncChangeList& change_list) override { |
114 if (fail_all_requests_) { | 113 if (fail_all_requests_) { |
115 return syncer::SyncError( | 114 return syncer::SyncError( |
116 FROM_HERE, | 115 FROM_HERE, |
117 syncer::SyncError::DATATYPE_ERROR, | 116 syncer::SyncError::DATATYPE_ERROR, |
118 "MockSyncChangeProcessor: configured to fail", | 117 "MockSyncChangeProcessor: configured to fail", |
119 change_list[0].sync_data().GetDataType()); | 118 change_list[0].sync_data().GetDataType()); |
120 } | 119 } |
121 for (syncer::SyncChangeList::const_iterator it = change_list.begin(); | 120 for (syncer::SyncChangeList::const_iterator it = change_list.begin(); |
122 it != change_list.end(); ++it) { | 121 it != change_list.end(); ++it) { |
123 changes_.push_back(new SettingSyncData(*it)); | 122 changes_.push_back(base::MakeUnique<SettingSyncData>(*it)); |
124 } | 123 } |
125 return syncer::SyncError(); | 124 return syncer::SyncError(); |
126 } | 125 } |
127 | 126 |
128 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { | 127 syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const override { |
129 return syncer::SyncDataList(); | 128 return syncer::SyncDataList(); |
130 } | 129 } |
131 | 130 |
132 // Mock methods. | 131 // Mock methods. |
133 | 132 |
134 const SettingSyncDataList& changes() { return changes_; } | 133 const SettingSyncDataList& changes() { return changes_; } |
135 | 134 |
136 void ClearChanges() { | 135 void ClearChanges() { |
137 changes_.clear(); | 136 changes_.clear(); |
138 } | 137 } |
139 | 138 |
140 void set_fail_all_requests(bool fail_all_requests) { | 139 void set_fail_all_requests(bool fail_all_requests) { |
141 fail_all_requests_ = fail_all_requests; | 140 fail_all_requests_ = fail_all_requests; |
142 } | 141 } |
143 | 142 |
144 // Returns the only change for a given extension setting. If there is not | 143 // Returns the only change for a given extension setting. If there is not |
145 // exactly 1 change for that key, a test assertion will fail. | 144 // exactly 1 change for that key, a test assertion will fail. |
146 SettingSyncData* GetOnlyChange(const std::string& extension_id, | 145 SettingSyncData* GetOnlyChange(const std::string& extension_id, |
147 const std::string& key) { | 146 const std::string& key) { |
148 std::vector<SettingSyncData*> matching_changes; | 147 std::vector<SettingSyncData*> matching_changes; |
149 for (SettingSyncDataList::iterator it = changes_.begin(); | 148 for (const std::unique_ptr<SettingSyncData>& change : changes_) { |
150 it != changes_.end(); ++it) { | 149 if (change->extension_id() == extension_id && change->key() == key) |
151 if ((*it)->extension_id() == extension_id && (*it)->key() == key) { | 150 matching_changes.push_back(change.get()); |
152 matching_changes.push_back(*it); | |
153 } | |
154 } | 151 } |
155 if (matching_changes.empty()) { | 152 if (matching_changes.empty()) { |
156 ADD_FAILURE() << "No matching changes for " << extension_id << "/" << | 153 ADD_FAILURE() << "No matching changes for " << extension_id << "/" << |
157 key << " (out of " << changes_.size() << ")"; | 154 key << " (out of " << changes_.size() << ")"; |
158 return nullptr; | 155 return nullptr; |
159 } | 156 } |
160 if (matching_changes.size() != 1u) { | 157 if (matching_changes.size() != 1u) { |
161 ADD_FAILURE() << matching_changes.size() << " matching changes for " << | 158 ADD_FAILURE() << matching_changes.size() << " matching changes for " << |
162 extension_id << "/" << key << " (out of " << changes_.size() << ")"; | 159 extension_id << "/" << key << " (out of " << changes_.size() << ")"; |
163 } | 160 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 } | 230 } |
234 | 231 |
235 // Gets all the sync data from the SyncableService for a sync type as a map | 232 // Gets all the sync data from the SyncableService for a sync type as a map |
236 // from extension id to its sync data. | 233 // from extension id to its sync data. |
237 SettingSyncDataMultimap GetAllSyncData(syncer::ModelType model_type) { | 234 SettingSyncDataMultimap GetAllSyncData(syncer::ModelType model_type) { |
238 syncer::SyncDataList as_list = | 235 syncer::SyncDataList as_list = |
239 GetSyncableService(model_type)->GetAllSyncData(model_type); | 236 GetSyncableService(model_type)->GetAllSyncData(model_type); |
240 SettingSyncDataMultimap as_map; | 237 SettingSyncDataMultimap as_map; |
241 for (syncer::SyncDataList::iterator it = as_list.begin(); | 238 for (syncer::SyncDataList::iterator it = as_list.begin(); |
242 it != as_list.end(); ++it) { | 239 it != as_list.end(); ++it) { |
243 SettingSyncData* sync_data = new SettingSyncData(*it); | 240 std::unique_ptr<SettingSyncData> sync_data(new SettingSyncData(*it)); |
244 linked_ptr<SettingSyncDataList>& list_for_extension = | 241 std::unique_ptr<SettingSyncDataList>& list_for_extension = |
245 as_map[sync_data->extension_id()]; | 242 as_map[sync_data->extension_id()]; |
246 if (!list_for_extension.get()) | 243 if (!list_for_extension) |
247 list_for_extension.reset(new SettingSyncDataList()); | 244 list_for_extension.reset(new SettingSyncDataList()); |
248 list_for_extension->push_back(sync_data); | 245 list_for_extension->push_back(std::move(sync_data)); |
249 } | 246 } |
250 return as_map; | 247 return as_map; |
251 } | 248 } |
252 | 249 |
253 // This class uses it's TestingValueStore in such a way that it always mints | 250 // This class uses it's TestingValueStore in such a way that it always mints |
254 // new TestingValueStore instances. | 251 // new TestingValueStore instances. |
255 TestingValueStore* GetExisting(const ExtensionId& extension_id) { | 252 TestingValueStore* GetExisting(const ExtensionId& extension_id) { |
256 return static_cast<TestingValueStore*>( | 253 return static_cast<TestingValueStore*>( |
257 storage_factory_->GetExisting(extension_id)); | 254 storage_factory_->GetExisting(extension_id)); |
258 } | 255 } |
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1343 new base::StringValue("value")); | 1340 new base::StringValue("value")); |
1344 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); | 1341 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); |
1345 } | 1342 } |
1346 | 1343 |
1347 // Test dots in keys going to sync. | 1344 // Test dots in keys going to sync. |
1348 { | 1345 { |
1349 std::unique_ptr<base::Value> string_value(new base::StringValue("spot")); | 1346 std::unique_ptr<base::Value> string_value(new base::StringValue("spot")); |
1350 storage->Set(DEFAULTS, "key.with.spot", *string_value); | 1347 storage->Set(DEFAULTS, "key.with.spot", *string_value); |
1351 | 1348 |
1352 ASSERT_EQ(1u, sync_processor_->changes().size()); | 1349 ASSERT_EQ(1u, sync_processor_->changes().size()); |
1353 SettingSyncData* sync_data = sync_processor_->changes()[0]; | 1350 SettingSyncData* sync_data = sync_processor_->changes()[0].get(); |
1354 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); | 1351 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); |
1355 EXPECT_EQ("ext", sync_data->extension_id()); | 1352 EXPECT_EQ("ext", sync_data->extension_id()); |
1356 EXPECT_EQ("key.with.spot", sync_data->key()); | 1353 EXPECT_EQ("key.with.spot", sync_data->key()); |
1357 EXPECT_TRUE(sync_data->value().Equals(string_value.get())); | 1354 EXPECT_TRUE(sync_data->value().Equals(string_value.get())); |
1358 } | 1355 } |
1359 } | 1356 } |
1360 | 1357 |
1361 // In other (frontend) tests, we assume that the result of GetStorage | 1358 // In other (frontend) tests, we assume that the result of GetStorage |
1362 // is a pointer to the a Storage owned by a Frontend object, but for | 1359 // is a pointer to the a Storage owned by a Frontend object, but for |
1363 // the unlimitedStorage case, this might not be true. So, write the | 1360 // the unlimitedStorage case, this might not be true. So, write the |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1411 settings_namespace::SYNC, | 1408 settings_namespace::SYNC, |
1412 base::Bind(&UnlimitedSyncStorageTestCallback)); | 1409 base::Bind(&UnlimitedSyncStorageTestCallback)); |
1413 frontend_->RunWithStorage(extension, | 1410 frontend_->RunWithStorage(extension, |
1414 settings_namespace::LOCAL, | 1411 settings_namespace::LOCAL, |
1415 base::Bind(&UnlimitedLocalStorageTestCallback)); | 1412 base::Bind(&UnlimitedLocalStorageTestCallback)); |
1416 | 1413 |
1417 base::RunLoop().RunUntilIdle(); | 1414 base::RunLoop().RunUntilIdle(); |
1418 } | 1415 } |
1419 | 1416 |
1420 } // namespace extensions | 1417 } // namespace extensions |
OLD | NEW |