diff options
author | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-07 01:00:33 +0000 |
---|---|---|
committer | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-07 01:00:33 +0000 |
commit | f3a30a9cd0456fdc6c4969dfc7e42b82f98c117b (patch) | |
tree | 0e995cbc8ac3d62100571c1eb645caad8e9bc6fc /chrome/browser/sync | |
parent | bda9556c63579835dd14055a048f4e2094e7b3f5 (diff) | |
download | chromium_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-x | chrome/browser/sync/syncable/syncable.h | 8 | ||||
-rwxr-xr-x | chrome/browser/sync/syncable/syncable_unittest.cc | 18 |
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) { |