summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync
diff options
context:
space:
mode:
authortim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-07 01:00:33 +0000
committertim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-07 01:00:33 +0000
commitf3a30a9cd0456fdc6c4969dfc7e42b82f98c117b (patch)
tree0e995cbc8ac3d62100571c1eb645caad8e9bc6fc /chrome/browser/sync
parentbda9556c63579835dd14055a048f4e2094e7b3f5 (diff)
downloadchromium_src-f3a30a9cd0456fdc6c4969dfc7e42b82f98c117b.zip
chromium_src-f3a30a9cd0456fdc6c4969dfc7e42b82f98c117b.tar.gz
chromium_src-f3a30a9cd0456fdc6c4969dfc7e42b82f98c117b.tar.bz2
Fix for sync bug 31566. Return const& rather than a copy from
syncable Blob accessor to avoid danger with assigning the return value _address_ to a pointer (which was done by r34993). BUG=31566 TEST=SyncableDirectoryTest.TestSimpleFieldsPreservedDuringSaveChanges Review URL: http://codereview.chromium.org/527014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35676 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync')
-rwxr-xr-xchrome/browser/sync/syncable/syncable.h8
-rwxr-xr-xchrome/browser/sync/syncable/syncable_unittest.cc18
2 files changed, 22 insertions, 4 deletions
diff --git a/chrome/browser/sync/syncable/syncable.h b/chrome/browser/sync/syncable/syncable.h
index 6665bf7..d0562f5 100755
--- a/chrome/browser/sync/syncable/syncable.h
+++ b/chrome/browser/sync/syncable/syncable.h
@@ -237,11 +237,11 @@ struct EntryKernel {
inline void mark_dirty() {
dirty_ = true;
}
-
+
inline void clear_dirty() {
dirty_ = false;
}
-
+
inline bool is_dirty() const {
return dirty_;
}
@@ -302,13 +302,13 @@ struct EntryKernel {
inline const std::string& ref(StringField field) const {
return string_fields[field - STRING_FIELDS_BEGIN];
}
- inline Blob ref(BlobField field) const {
+ inline const Blob& ref(BlobField field) const {
return blob_fields[field - BLOB_FIELDS_BEGIN];
}
inline bool ref(BitTemp field) const {
return bit_temps[field - BIT_TEMPS_BEGIN];
}
-
+
private:
// Tracks whether this entry needs to be saved to the database.
bool dirty_;
diff --git a/chrome/browser/sync/syncable/syncable_unittest.cc b/chrome/browser/sync/syncable/syncable_unittest.cc
index 7012142..9d7b07b 100755
--- a/chrome/browser/sync/syncable/syncable_unittest.cc
+++ b/chrome/browser/sync/syncable/syncable_unittest.cc
@@ -627,6 +627,7 @@ TEST_F(SyncableDirectoryTest, TestSimpleFieldsPreservedDuringSaveChanges) {
EntryKernel create_pre_save, update_pre_save;
EntryKernel create_post_save, update_post_save;
string create_name = "Create";
+ string favicon_bytes = "PNG";
{
WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__);
@@ -634,11 +635,20 @@ TEST_F(SyncableDirectoryTest, TestSimpleFieldsPreservedDuringSaveChanges) {
MutableEntry update(&trans, CREATE_NEW_UPDATE_ITEM, update_id);
create.Put(IS_UNSYNCED, true);
update.Put(IS_UNAPPLIED_UPDATE, true);
+ syncable::Blob fav(favicon_bytes.data(),
+ favicon_bytes.data() + favicon_bytes.size());
+ create.Put(BOOKMARK_FAVICON, fav);
+ update.Put(BOOKMARK_FAVICON, fav);
create_pre_save = create.GetKernelCopy();
update_pre_save = update.GetKernelCopy();
create_id = create.Get(ID);
}
+
dir_->SaveChanges();
+ dir_.reset(new Directory());
+ ASSERT_TRUE(dir_.get());
+ ASSERT_TRUE(OPENED == dir_->Open(file_path_, kName));
+ ASSERT_TRUE(dir_->good());
{
ReadTransaction trans(dir_.get(), __FILE__, __LINE__);
@@ -681,6 +691,14 @@ TEST_F(SyncableDirectoryTest, TestSimpleFieldsPreservedDuringSaveChanges) {
update_post_save.ref((StringField)i))
<< "String field #" << i << " changed during save/load";
}
+ for ( ; i < BLOB_FIELDS_END; ++i) {
+ EXPECT_EQ(create_pre_save.ref((BlobField)i),
+ create_post_save.ref((BlobField)i))
+ << "Blob field #" << i << " changed during save/load";
+ EXPECT_EQ(update_pre_save.ref((BlobField)i),
+ update_post_save.ref((BlobField)i))
+ << "Blob field #" << i << " changed during save/load";
+ }
}
TEST_F(SyncableDirectoryTest, TestSaveChangesFailure) {