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

Side by Side Diff: sync/internal_api/attachments/attachment_service_impl.cc

Issue 986743004: [Sync] Refactor AttachmentStore classes. Introduce concept of referrer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "sync/internal_api/public/attachments/attachment_service_impl.h" 5 #include "sync/internal_api/public/attachments/attachment_service_impl.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "base/time/time.h" 12 #include "base/time/time.h"
13 #include "sync/api/attachments/attachment.h" 13 #include "sync/api/attachments/attachment.h"
14 #include "sync/internal_api/public/attachments/attachment_store_frontend.h"
maniscalco 2015/03/06 23:15:03 Maybe I overlooked something, but is this include
pavely 2015/03/09 18:09:29 Done.
14 #include "sync/internal_api/public/attachments/fake_attachment_downloader.h" 15 #include "sync/internal_api/public/attachments/fake_attachment_downloader.h"
15 #include "sync/internal_api/public/attachments/fake_attachment_uploader.h" 16 #include "sync/internal_api/public/attachments/fake_attachment_uploader.h"
16 17
17 namespace syncer { 18 namespace syncer {
18 19
19 // GetOrDownloadAttachments starts multiple parallel DownloadAttachment calls. 20 // GetOrDownloadAttachments starts multiple parallel DownloadAttachment calls.
20 // GetOrDownloadState tracks completion of these calls and posts callback for 21 // GetOrDownloadState tracks completion of these calls and posts callback for
21 // consumer once all attachments are either retrieved or reported unavailable. 22 // consumer once all attachments are either retrieved or reported unavailable.
22 class AttachmentServiceImpl::GetOrDownloadState 23 class AttachmentServiceImpl::GetOrDownloadState
23 : public base::RefCounted<GetOrDownloadState>, 24 : public base::RefCounted<GetOrDownloadState>,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // All requests completed. Let's notify consumer. 104 // All requests completed. Let's notify consumer.
104 GetOrDownloadResult result = 105 GetOrDownloadResult result =
105 unavailable_attachments_.empty() ? GET_SUCCESS : GET_UNSPECIFIED_ERROR; 106 unavailable_attachments_.empty() ? GET_SUCCESS : GET_UNSPECIFIED_ERROR;
106 base::MessageLoop::current()->PostTask( 107 base::MessageLoop::current()->PostTask(
107 FROM_HERE, 108 FROM_HERE,
108 base::Bind(callback_, result, base::Passed(&retrieved_attachments_))); 109 base::Bind(callback_, result, base::Passed(&retrieved_attachments_)));
109 } 110 }
110 } 111 }
111 112
112 AttachmentServiceImpl::AttachmentServiceImpl( 113 AttachmentServiceImpl::AttachmentServiceImpl(
113 scoped_refptr<AttachmentStore> attachment_store, 114 scoped_ptr<AttachmentStore> attachment_store,
114 scoped_ptr<AttachmentUploader> attachment_uploader, 115 scoped_ptr<AttachmentUploader> attachment_uploader,
115 scoped_ptr<AttachmentDownloader> attachment_downloader, 116 scoped_ptr<AttachmentDownloader> attachment_downloader,
116 Delegate* delegate, 117 Delegate* delegate,
117 const base::TimeDelta& initial_backoff_delay, 118 const base::TimeDelta& initial_backoff_delay,
118 const base::TimeDelta& max_backoff_delay) 119 const base::TimeDelta& max_backoff_delay)
119 : attachment_store_(attachment_store), 120 : attachment_store_(attachment_store.Pass()),
120 attachment_uploader_(attachment_uploader.Pass()), 121 attachment_uploader_(attachment_uploader.Pass()),
121 attachment_downloader_(attachment_downloader.Pass()), 122 attachment_downloader_(attachment_downloader.Pass()),
122 delegate_(delegate), 123 delegate_(delegate),
123 weak_ptr_factory_(this) { 124 weak_ptr_factory_(this) {
124 DCHECK(CalledOnValidThread()); 125 DCHECK(CalledOnValidThread());
125 DCHECK(attachment_store_.get()); 126 DCHECK(attachment_store_.get());
126 127
127 // TODO(maniscalco): Observe network connectivity change events. When the 128 // TODO(maniscalco): Observe network connectivity change events. When the
128 // network becomes disconnected, consider suspending queue dispatch. When 129 // network becomes disconnected, consider suspending queue dispatch. When
129 // connectivity is restored, consider clearing any dispatch backoff (bug 130 // connectivity is restored, consider clearing any dispatch backoff (bug
130 // 411981). 131 // 411981).
131 upload_task_queue_.reset(new TaskQueue<AttachmentId>( 132 upload_task_queue_.reset(new TaskQueue<AttachmentId>(
132 base::Bind(&AttachmentServiceImpl::BeginUpload, 133 base::Bind(&AttachmentServiceImpl::BeginUpload,
133 weak_ptr_factory_.GetWeakPtr()), 134 weak_ptr_factory_.GetWeakPtr()),
134 initial_backoff_delay, 135 initial_backoff_delay,
135 max_backoff_delay)); 136 max_backoff_delay));
136 137
137 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 138 net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
138 } 139 }
139 140
140 AttachmentServiceImpl::~AttachmentServiceImpl() { 141 AttachmentServiceImpl::~AttachmentServiceImpl() {
141 DCHECK(CalledOnValidThread()); 142 DCHECK(CalledOnValidThread());
142 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 143 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
143 } 144 }
144 145
145 // Static. 146 // Static.
146 scoped_ptr<syncer::AttachmentService> AttachmentServiceImpl::CreateForTest() { 147 scoped_ptr<syncer::AttachmentService> AttachmentServiceImpl::CreateForTest() {
147 scoped_refptr<syncer::AttachmentStore> attachment_store = 148 scoped_ptr<syncer::AttachmentStore> attachment_store =
148 AttachmentStore::CreateInMemoryStore(); 149 AttachmentStore::CreateInMemoryStore();
149 scoped_ptr<AttachmentUploader> attachment_uploader( 150 scoped_ptr<AttachmentUploader> attachment_uploader(
150 new FakeAttachmentUploader); 151 new FakeAttachmentUploader);
151 scoped_ptr<AttachmentDownloader> attachment_downloader( 152 scoped_ptr<AttachmentDownloader> attachment_downloader(
152 new FakeAttachmentDownloader()); 153 new FakeAttachmentDownloader());
153 scoped_ptr<syncer::AttachmentService> attachment_service( 154 scoped_ptr<syncer::AttachmentService> attachment_service(
154 new syncer::AttachmentServiceImpl(attachment_store, 155 new syncer::AttachmentServiceImpl(attachment_store.Pass(),
155 attachment_uploader.Pass(), 156 attachment_uploader.Pass(),
156 attachment_downloader.Pass(), 157 attachment_downloader.Pass(),
157 NULL, 158 NULL,
158 base::TimeDelta(), 159 base::TimeDelta(),
159 base::TimeDelta())); 160 base::TimeDelta()));
160 return attachment_service.Pass(); 161 return attachment_service.Pass();
161 } 162 }
162 163
163 AttachmentStore* AttachmentServiceImpl::GetStore() {
164 return attachment_store_.get();
165 }
166
167 void AttachmentServiceImpl::GetOrDownloadAttachments( 164 void AttachmentServiceImpl::GetOrDownloadAttachments(
168 const AttachmentIdList& attachment_ids, 165 const AttachmentIdList& attachment_ids,
169 const GetOrDownloadCallback& callback) { 166 const GetOrDownloadCallback& callback) {
170 DCHECK(CalledOnValidThread()); 167 DCHECK(CalledOnValidThread());
171 scoped_refptr<GetOrDownloadState> state( 168 scoped_refptr<GetOrDownloadState> state(
172 new GetOrDownloadState(attachment_ids, callback)); 169 new GetOrDownloadState(attachment_ids, callback));
173 attachment_store_->Read(attachment_ids, 170 attachment_store_->Read(attachment_ids,
174 base::Bind(&AttachmentServiceImpl::ReadDone, 171 base::Bind(&AttachmentServiceImpl::ReadDone,
175 weak_ptr_factory_.GetWeakPtr(), 172 weak_ptr_factory_.GetWeakPtr(), state));
176 state));
177 } 173 }
178 174
179 void AttachmentServiceImpl::ReadDone( 175 void AttachmentServiceImpl::ReadDone(
180 const scoped_refptr<GetOrDownloadState>& state, 176 const scoped_refptr<GetOrDownloadState>& state,
181 const AttachmentStore::Result& result, 177 const AttachmentStore::Result& result,
182 scoped_ptr<AttachmentMap> attachments, 178 scoped_ptr<AttachmentMap> attachments,
183 scoped_ptr<AttachmentIdList> unavailable_attachment_ids) { 179 scoped_ptr<AttachmentIdList> unavailable_attachment_ids) {
184 // Add read attachments to result. 180 // Add read attachments to result.
185 for (AttachmentMap::const_iterator iter = attachments->begin(); 181 for (AttachmentMap::const_iterator iter = attachments->begin();
186 iter != attachments->end(); 182 iter != attachments->end();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 base::Bind(&AttachmentServiceImpl::UploadDone, 316 base::Bind(&AttachmentServiceImpl::UploadDone,
321 weak_ptr_factory_.GetWeakPtr())); 317 weak_ptr_factory_.GetWeakPtr()));
322 } 318 }
323 } 319 }
324 320
325 void AttachmentServiceImpl::SetTimerForTest(scoped_ptr<base::Timer> timer) { 321 void AttachmentServiceImpl::SetTimerForTest(scoped_ptr<base::Timer> timer) {
326 upload_task_queue_->SetTimerForTest(timer.Pass()); 322 upload_task_queue_->SetTimerForTest(timer.Pass());
327 } 323 }
328 324
329 } // namespace syncer 325 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698