| Index: ios/chrome/browser/reading_list/reading_list_model.cc
|
| diff --git a/ios/chrome/browser/reading_list/reading_list_model.cc b/ios/chrome/browser/reading_list/reading_list_model.cc
|
| index 073ec3b759bcd874dbe77596632d27bf012f54d7..98244e9013cdfd1f2def4a625da16174debb424c 100644
|
| --- a/ios/chrome/browser/reading_list/reading_list_model.cc
|
| +++ b/ios/chrome/browser/reading_list/reading_list_model.cc
|
| @@ -4,11 +4,16 @@
|
|
|
| #include "ios/chrome/browser/reading_list/reading_list_model.h"
|
|
|
| +#include "base/logging.h"
|
| +#include "ios/web/public/web_thread.h"
|
| +
|
| ReadingListModel::ReadingListModel() : current_batch_updates_count_(0) {}
|
| +
|
| ReadingListModel::~ReadingListModel() {}
|
|
|
| // Observer methods.
|
| void ReadingListModel::AddObserver(ReadingListModelObserver* observer) {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| DCHECK(observer);
|
| observers_.AddObserver(observer);
|
| if (loaded()) {
|
| @@ -17,32 +22,46 @@ void ReadingListModel::AddObserver(ReadingListModelObserver* observer) {
|
| }
|
|
|
| void ReadingListModel::RemoveObserver(ReadingListModelObserver* observer) {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| observers_.RemoveObserver(observer);
|
| }
|
|
|
| // Batch update methods.
|
| bool ReadingListModel::IsPerformingBatchUpdates() const {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| return current_batch_updates_count_ > 0;
|
| }
|
|
|
| std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate>
|
| ReadingListModel::BeginBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate> token(
|
| new ReadingListModel::ScopedReadingListBatchUpdate(this));
|
|
|
| ++current_batch_updates_count_;
|
| if (current_batch_updates_count_ == 1) {
|
| - FOR_EACH_OBSERVER(ReadingListModelObserver, observers_,
|
| - ReadingListModelBeganBatchUpdates(this));
|
| + EnteringBatchUpdates();
|
| }
|
| return token;
|
| }
|
|
|
| +void ReadingListModel::EnteringBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| + FOR_EACH_OBSERVER(ReadingListModelObserver, observers_,
|
| + ReadingListModelBeganBatchUpdates(this));
|
| +}
|
| +
|
| void ReadingListModel::EndBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| DCHECK(IsPerformingBatchUpdates());
|
| --current_batch_updates_count_;
|
| if (current_batch_updates_count_ == 0) {
|
| - FOR_EACH_OBSERVER(ReadingListModelObserver, observers_,
|
| - ReadingListModelCompletedBatchUpdates(this));
|
| + LeavingBatchUpdates();
|
| }
|
| }
|
| +
|
| +void ReadingListModel::LeavingBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| + FOR_EACH_OBSERVER(ReadingListModelObserver, observers_,
|
| + ReadingListModelCompletedBatchUpdates(this));
|
| +}
|
|
|