Index: chrome/browser/sync/syncable/syncable.cc |
diff --git a/chrome/browser/sync/syncable/syncable.cc b/chrome/browser/sync/syncable/syncable.cc |
index 747e6bc2a5668947aafea4ef9faefd67b3835209..b1548f0d8d4611b01650e277d4a5599526033238 100644 |
--- a/chrome/browser/sync/syncable/syncable.cc |
+++ b/chrome/browser/sync/syncable/syncable.cc |
@@ -349,10 +349,14 @@ DictionaryValue* EntryKernel::ToValue() const { |
/////////////////////////////////////////////////////////////////////////// |
// Directory |
-void Directory::InitKernel(const std::string& name, |
- DirectoryChangeDelegate* delegate) { |
- DCHECK(kernel_ == NULL); |
- kernel_ = new Kernel(FilePath(), name, KernelLoadInfo(), delegate); |
+void Directory::InitKernelForTest( |
+ const std::string& name, |
+ DirectoryChangeDelegate* delegate, |
+ const browser_sync::WeakHandle<TransactionObserver>& |
+ transaction_observer) { |
+ DCHECK(!kernel_); |
+ kernel_ = new Kernel(FilePath(), name, KernelLoadInfo(), |
+ delegate, transaction_observer); |
} |
Directory::PersistedKernelInfo::PersistedKernelInfo() |
@@ -378,10 +382,11 @@ Directory::SaveChangesSnapshot::SaveChangesSnapshot() |
Directory::SaveChangesSnapshot::~SaveChangesSnapshot() {} |
-Directory::Kernel::Kernel(const FilePath& db_path, |
- const string& name, |
- const KernelLoadInfo& info, |
- DirectoryChangeDelegate* delegate) |
+Directory::Kernel::Kernel( |
+ const FilePath& db_path, const string& name, |
+ const KernelLoadInfo& info, DirectoryChangeDelegate* delegate, |
+ const browser_sync::WeakHandle<TransactionObserver>& |
+ transaction_observer) |
: db_path(db_path), |
refcount(1), |
next_write_transaction_id(0), |
@@ -399,8 +404,9 @@ Directory::Kernel::Kernel(const FilePath& db_path, |
cache_guid(info.cache_guid), |
next_metahandle(info.max_metahandle + 1), |
delegate(delegate), |
- observers(new ObserverListThreadSafe<TransactionObserver>()) { |
+ transaction_observer(transaction_observer) { |
DCHECK(delegate); |
+ DCHECK(transaction_observer.IsInitialized()); |
} |
void Directory::Kernel::AddRef() { |
@@ -432,9 +438,13 @@ Directory::~Directory() { |
Close(); |
} |
-DirOpenResult Directory::Open(const FilePath& file_path, const string& name, |
- DirectoryChangeDelegate* delegate) { |
- const DirOpenResult result = OpenImpl(file_path, name, delegate); |
+DirOpenResult Directory::Open( |
+ const FilePath& file_path, const string& name, |
+ DirectoryChangeDelegate* delegate, |
+ const browser_sync::WeakHandle<TransactionObserver>& |
+ transaction_observer) { |
+ const DirOpenResult result = |
+ OpenImpl(file_path, name, delegate, transaction_observer); |
if (OPENED != result) |
Close(); |
return result; |
@@ -461,9 +471,12 @@ DirectoryBackingStore* Directory::CreateBackingStore( |
return new DirectoryBackingStore(dir_name, backing_filepath); |
} |
-DirOpenResult Directory::OpenImpl(const FilePath& file_path, |
- const string& name, |
- DirectoryChangeDelegate* delegate) { |
+DirOpenResult Directory::OpenImpl( |
+ const FilePath& file_path, |
+ const string& name, |
+ DirectoryChangeDelegate* delegate, |
+ const browser_sync::WeakHandle<TransactionObserver>& |
+ transaction_observer) { |
DCHECK_EQ(static_cast<DirectoryBackingStore*>(NULL), store_); |
FilePath db_path(file_path); |
file_util::AbsolutePath(&db_path); |
@@ -477,7 +490,7 @@ DirOpenResult Directory::OpenImpl(const FilePath& file_path, |
if (OPENED != result) |
return result; |
- kernel_ = new Kernel(db_path, name, info, delegate); |
+ kernel_ = new Kernel(db_path, name, info, delegate, transaction_observer); |
kernel_->metahandles_index->swap(metas_bucket); |
InitializeIndices(); |
return OPENED; |
@@ -1109,14 +1122,6 @@ void Directory::CheckTreeInvariants(syncable::BaseTransaction* trans, |
} |
} |
-void Directory::AddTransactionObserver(TransactionObserver* observer) { |
- kernel_->observers->AddObserver(observer); |
-} |
- |
-void Directory::RemoveTransactionObserver(TransactionObserver* observer) { |
- kernel_->observers->RemoveObserver(observer); |
-} |
- |
/////////////////////////////////////////////////////////////////////////////// |
// ScopedKernelLock |
@@ -1153,13 +1158,13 @@ BaseTransaction::BaseTransaction(const tracked_objects::Location& from_here, |
Directory* directory) |
: from_here_(from_here), name_(name), writer_(writer), |
directory_(directory), dirkernel_(directory->kernel_) { |
- dirkernel_->observers->Notify( |
+ dirkernel_->transaction_observer.Call(FROM_HERE, |
&TransactionObserver::OnTransactionStart, from_here_, writer_); |
} |
BaseTransaction::~BaseTransaction() { |
if (writer_ != INVALID) { |
- dirkernel_->observers->Notify( |
+ dirkernel_->transaction_observer.Call(FROM_HERE, |
&TransactionObserver::OnTransactionEnd, from_here_, writer_); |
} |
} |
@@ -1268,7 +1273,7 @@ ModelTypeBitSet WriteTransaction::NotifyTransactionChangingAndEnding( |
delegate->HandleTransactionEndingChangeEvent( |
immutable_write_transaction_info, this); |
- dirkernel_->observers->Notify( |
+ dirkernel_->transaction_observer.Call(FROM_HERE, |
&TransactionObserver::OnTransactionWrite, |
immutable_write_transaction_info, models_with_changes); |