Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: ios/chrome/browser/reading_list/reading_list_model.cc

Issue 2451843002: Add Store+Sync to reading list. (Closed)
Patch Set: fix xcode clang Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ios/chrome/browser/reading_list/reading_list_model.h" 5 #include "ios/chrome/browser/reading_list/reading_list_model.h"
6 6
7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h"
9
7 ReadingListModel::ReadingListModel() : current_batch_updates_count_(0) {} 10 ReadingListModel::ReadingListModel() : current_batch_updates_count_(0) {}
11
8 ReadingListModel::~ReadingListModel() { 12 ReadingListModel::~ReadingListModel() {
9 for (auto& observer : observers_) { 13 for (auto& observer : observers_) {
10 observer.ReadingListModelBeingDeleted(this); 14 observer.ReadingListModelBeingDeleted(this);
11 } 15 }
12 } 16 }
13 17
14 // Observer methods. 18 // Observer methods.
15 void ReadingListModel::AddObserver(ReadingListModelObserver* observer) { 19 void ReadingListModel::AddObserver(ReadingListModelObserver* observer) {
20 DCHECK(CalledOnValidThread());
16 DCHECK(observer); 21 DCHECK(observer);
17 observers_.AddObserver(observer); 22 observers_.AddObserver(observer);
18 if (loaded()) { 23 if (loaded()) {
19 observer->ReadingListModelLoaded(this); 24 observer->ReadingListModelLoaded(this);
20 } 25 }
21 } 26 }
22 27
23 void ReadingListModel::RemoveObserver(ReadingListModelObserver* observer) { 28 void ReadingListModel::RemoveObserver(ReadingListModelObserver* observer) {
29 DCHECK(CalledOnValidThread());
24 observers_.RemoveObserver(observer); 30 observers_.RemoveObserver(observer);
25 } 31 }
26 32
27 // Batch update methods. 33 // Batch update methods.
28 bool ReadingListModel::IsPerformingBatchUpdates() const { 34 bool ReadingListModel::IsPerformingBatchUpdates() const {
35 DCHECK(CalledOnValidThread());
29 return current_batch_updates_count_ > 0; 36 return current_batch_updates_count_ > 0;
30 } 37 }
31 38
32 std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate> 39 std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate>
40 ReadingListModel::CreateBatchToken() {
41 return base::MakeUnique<ReadingListModel::ScopedReadingListBatchUpdate>(this);
42 }
43
44 std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate>
33 ReadingListModel::BeginBatchUpdates() { 45 ReadingListModel::BeginBatchUpdates() {
34 std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate> token( 46 DCHECK(CalledOnValidThread());
35 new ReadingListModel::ScopedReadingListBatchUpdate(this)); 47 auto token = CreateBatchToken();
36 48
37 ++current_batch_updates_count_; 49 ++current_batch_updates_count_;
38 if (current_batch_updates_count_ == 1) { 50 if (current_batch_updates_count_ == 1) {
39 for (auto& observer : observers_) 51 EnteringBatchUpdates();
40 observer.ReadingListModelBeganBatchUpdates(this);
41 } 52 }
42 return token; 53 return token;
43 } 54 }
44 55
56 void ReadingListModel::EnteringBatchUpdates() {
57 DCHECK(CalledOnValidThread());
58 for (auto& observer : observers_)
59 observer.ReadingListModelBeganBatchUpdates(this);
60 }
61
45 void ReadingListModel::EndBatchUpdates() { 62 void ReadingListModel::EndBatchUpdates() {
63 DCHECK(CalledOnValidThread());
46 DCHECK(IsPerformingBatchUpdates()); 64 DCHECK(IsPerformingBatchUpdates());
65 DCHECK(current_batch_updates_count_ > 0);
47 --current_batch_updates_count_; 66 --current_batch_updates_count_;
48 if (current_batch_updates_count_ == 0) { 67 if (current_batch_updates_count_ == 0) {
49 for (auto& observer : observers_) 68 LeavingBatchUpdates();
50 observer.ReadingListModelCompletedBatchUpdates(this);
51 } 69 }
52 } 70 }
71
72 void ReadingListModel::LeavingBatchUpdates() {
73 DCHECK(CalledOnValidThread());
74 for (auto& observer : observers_)
75 observer.ReadingListModelCompletedBatchUpdates(this);
76 }
77
78 ReadingListModel::ScopedReadingListBatchUpdate::
79 ~ScopedReadingListBatchUpdate() {
80 model_->EndBatchUpdates();
81 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698