| 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 2b7e896ad8845ec1738072f502d63e1d723e9755..6c36dda61b1a1bf9ffedcddbc1998cdacae52483 100644
|
| --- a/ios/chrome/browser/reading_list/reading_list_model.cc
|
| +++ b/ios/chrome/browser/reading_list/reading_list_model.cc
|
| @@ -4,7 +4,11 @@
|
|
|
| #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() {
|
| for (auto& observer : observers_) {
|
| observer.ReadingListModelBeingDeleted(this);
|
| @@ -13,6 +17,7 @@ ReadingListModel::~ReadingListModel() {
|
|
|
| // Observer methods.
|
| void ReadingListModel::AddObserver(ReadingListModelObserver* observer) {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| DCHECK(observer);
|
| observers_.AddObserver(observer);
|
| if (loaded()) {
|
| @@ -21,32 +26,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 (auto& observer : observers_)
|
| - observer.ReadingListModelBeganBatchUpdates(this);
|
| + EnteringBatchUpdates();
|
| }
|
| return token;
|
| }
|
|
|
| +void ReadingListModel::EnteringBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| + for (auto& observer : observers_)
|
| + observer.ReadingListModelBeganBatchUpdates(this);
|
| +}
|
| +
|
| void ReadingListModel::EndBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| DCHECK(IsPerformingBatchUpdates());
|
| --current_batch_updates_count_;
|
| if (current_batch_updates_count_ == 0) {
|
| - for (auto& observer : observers_)
|
| - observer.ReadingListModelCompletedBatchUpdates(this);
|
| + LeavingBatchUpdates();
|
| }
|
| }
|
| +
|
| +void ReadingListModel::LeavingBatchUpdates() {
|
| + DCHECK_CURRENTLY_ON(web::WebThread::UI);
|
| + for (auto& observer : observers_)
|
| + observer.ReadingListModelCompletedBatchUpdates(this);
|
| +}
|
|
|