OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/sync_engine.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 namespace { | 157 namespace { |
158 | 158 |
159 void DidRegisterOrigin(const base::TimeTicks& start_time, | 159 void DidRegisterOrigin(const base::TimeTicks& start_time, |
160 const SyncStatusCallback& callback, | 160 const SyncStatusCallback& callback, |
161 SyncStatusCode status) { | 161 SyncStatusCode status) { |
162 base::TimeDelta delta(base::TimeTicks::Now() - start_time); | 162 base::TimeDelta delta(base::TimeTicks::Now() - start_time); |
163 LOCAL_HISTOGRAM_TIMES("SyncFileSystem.RegisterOriginTime", delta); | 163 LOCAL_HISTOGRAM_TIMES("SyncFileSystem.RegisterOriginTime", delta); |
164 callback.Run(status); | 164 callback.Run(status); |
165 } | 165 } |
166 | 166 |
167 template <typename T> | |
168 void DeleteSoonHelper(scoped_ptr<T>) {} | |
169 | |
170 template <typename T> | |
171 void DeleteSoon(const tracked_objects::Location& from_here, | |
172 base::TaskRunner* task_runner, | |
173 scoped_ptr<T> obj) { | |
174 if (!obj) | |
175 return; | |
176 | |
177 T* obj_ptr = obj.get(); | |
178 base::Closure deleter = | |
179 base::Bind(&DeleteSoonHelper<T>, base::Passed(&obj)); | |
180 if (!task_runner->PostTask(from_here, deleter)) { | |
181 obj_ptr->DetachFromSequence(); | |
182 deleter.Run(); | |
183 } | |
184 } | |
185 | |
186 } // namespace | 167 } // namespace |
187 | 168 |
188 scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( | 169 scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( |
189 content::BrowserContext* context, | 170 content::BrowserContext* context, |
190 TaskLogger* task_logger) { | 171 TaskLogger* task_logger) { |
191 scoped_refptr<base::SequencedWorkerPool> worker_pool = | 172 scoped_refptr<base::SequencedWorkerPool> worker_pool = |
192 content::BrowserThread::GetBlockingPool(); | 173 content::BrowserThread::GetBlockingPool(); |
193 | 174 |
194 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = | 175 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = |
195 base::ThreadTaskRunnerHandle::Get(); | 176 base::ThreadTaskRunnerHandle::Get(); |
(...skipping 15 matching lines...) Expand all Loading... |
211 SigninManagerFactory::GetForProfile(profile); | 192 SigninManagerFactory::GetForProfile(profile); |
212 OAuth2TokenService* token_service = | 193 OAuth2TokenService* token_service = |
213 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 194 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
214 scoped_refptr<net::URLRequestContextGetter> request_context = | 195 scoped_refptr<net::URLRequestContextGetter> request_context = |
215 context->GetRequestContext(); | 196 context->GetRequestContext(); |
216 | 197 |
217 scoped_ptr<drive_backend::SyncEngine> sync_engine( | 198 scoped_ptr<drive_backend::SyncEngine> sync_engine( |
218 new SyncEngine(ui_task_runner.get(), | 199 new SyncEngine(ui_task_runner.get(), |
219 worker_task_runner.get(), | 200 worker_task_runner.get(), |
220 drive_task_runner.get(), | 201 drive_task_runner.get(), |
| 202 worker_pool.get(), |
221 GetSyncFileSystemDir(context->GetPath()), | 203 GetSyncFileSystemDir(context->GetPath()), |
222 task_logger, | 204 task_logger, |
223 notification_manager, | 205 notification_manager, |
224 extension_service, | 206 extension_service, |
225 signin_manager, | 207 signin_manager, |
226 token_service, | 208 token_service, |
227 request_context.get(), | 209 request_context.get(), |
228 make_scoped_ptr(new DriveServiceFactory()), | 210 make_scoped_ptr(new DriveServiceFactory()), |
229 nullptr /* env_override */)); | 211 nullptr /* env_override */)); |
230 | 212 |
(...skipping 18 matching lines...) Expand all Loading... |
249 if (signin_manager_) | 231 if (signin_manager_) |
250 signin_manager_->RemoveObserver(this); | 232 signin_manager_->RemoveObserver(this); |
251 if (notification_manager_) | 233 if (notification_manager_) |
252 notification_manager_->RemoveObserver(this); | 234 notification_manager_->RemoveObserver(this); |
253 } | 235 } |
254 | 236 |
255 void SyncEngine::Reset() { | 237 void SyncEngine::Reset() { |
256 if (drive_service_) | 238 if (drive_service_) |
257 drive_service_->RemoveObserver(this); | 239 drive_service_->RemoveObserver(this); |
258 | 240 |
259 DeleteSoon(FROM_HERE, worker_task_runner_.get(), sync_worker_.Pass()); | 241 worker_task_runner_->DeleteSoon(FROM_HERE, sync_worker_.release()); |
260 DeleteSoon(FROM_HERE, worker_task_runner_.get(), worker_observer_.Pass()); | 242 worker_task_runner_->DeleteSoon(FROM_HERE, worker_observer_.release()); |
261 DeleteSoon(FROM_HERE, | 243 worker_task_runner_->DeleteSoon(FROM_HERE, |
262 worker_task_runner_.get(), | 244 remote_change_processor_on_worker_.release()); |
263 remote_change_processor_on_worker_.Pass()); | |
264 | 245 |
265 drive_service_wrapper_.reset(); | 246 drive_service_wrapper_.reset(); |
266 drive_service_.reset(); | 247 drive_service_.reset(); |
267 drive_uploader_wrapper_.reset(); | 248 drive_uploader_wrapper_.reset(); |
268 drive_uploader_.reset(); | 249 drive_uploader_.reset(); |
269 remote_change_processor_wrapper_.reset(); | 250 remote_change_processor_wrapper_.reset(); |
270 callback_tracker_.AbortAll(); | 251 callback_tracker_.AbortAll(); |
271 } | 252 } |
272 | 253 |
273 void SyncEngine::Initialize() { | 254 void SyncEngine::Initialize() { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 worker_task_runner_.get())); | 300 worker_task_runner_.get())); |
320 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker( | 301 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker( |
321 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(), | 302 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(), |
322 ui_task_runner_.get(), | 303 ui_task_runner_.get(), |
323 worker_task_runner_.get())); | 304 worker_task_runner_.get())); |
324 scoped_ptr<SyncEngineContext> sync_engine_context( | 305 scoped_ptr<SyncEngineContext> sync_engine_context( |
325 new SyncEngineContext(drive_service_on_worker.Pass(), | 306 new SyncEngineContext(drive_service_on_worker.Pass(), |
326 drive_uploader_on_worker.Pass(), | 307 drive_uploader_on_worker.Pass(), |
327 task_logger_, | 308 task_logger_, |
328 ui_task_runner_.get(), | 309 ui_task_runner_.get(), |
329 worker_task_runner_.get())); | 310 worker_task_runner_.get(), |
| 311 worker_pool_.get())); |
330 | 312 |
331 worker_observer_.reset(new WorkerObserver(ui_task_runner_.get(), | 313 worker_observer_.reset(new WorkerObserver(ui_task_runner_.get(), |
332 weak_ptr_factory_.GetWeakPtr())); | 314 weak_ptr_factory_.GetWeakPtr())); |
333 | 315 |
334 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; | 316 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; |
335 if (extension_service_) | 317 if (extension_service_) |
336 extension_service_weak_ptr = extension_service_->AsWeakPtr(); | 318 extension_service_weak_ptr = extension_service_->AsWeakPtr(); |
337 | 319 |
338 if (!sync_worker) { | 320 if (!sync_worker) { |
339 sync_worker.reset(new SyncWorker( | 321 sync_worker.reset(new SyncWorker( |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
729 const std::string& username) { | 711 const std::string& username) { |
730 Reset(); | 712 Reset(); |
731 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, | 713 UpdateServiceState(REMOTE_SERVICE_AUTHENTICATION_REQUIRED, |
732 "User signed out."); | 714 "User signed out."); |
733 } | 715 } |
734 | 716 |
735 SyncEngine::SyncEngine( | 717 SyncEngine::SyncEngine( |
736 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, | 718 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, |
737 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, | 719 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, |
738 const scoped_refptr<base::SequencedTaskRunner>& drive_task_runner, | 720 const scoped_refptr<base::SequencedTaskRunner>& drive_task_runner, |
| 721 const scoped_refptr<base::SequencedWorkerPool>& worker_pool, |
739 const base::FilePath& sync_file_system_dir, | 722 const base::FilePath& sync_file_system_dir, |
740 TaskLogger* task_logger, | 723 TaskLogger* task_logger, |
741 drive::DriveNotificationManager* notification_manager, | 724 drive::DriveNotificationManager* notification_manager, |
742 ExtensionServiceInterface* extension_service, | 725 ExtensionServiceInterface* extension_service, |
743 SigninManagerBase* signin_manager, | 726 SigninManagerBase* signin_manager, |
744 OAuth2TokenService* token_service, | 727 OAuth2TokenService* token_service, |
745 net::URLRequestContextGetter* request_context, | 728 net::URLRequestContextGetter* request_context, |
746 scoped_ptr<DriveServiceFactory> drive_service_factory, | 729 scoped_ptr<DriveServiceFactory> drive_service_factory, |
747 leveldb::Env* env_override) | 730 leveldb::Env* env_override) |
748 : ui_task_runner_(ui_task_runner), | 731 : ui_task_runner_(ui_task_runner), |
749 worker_task_runner_(worker_task_runner), | 732 worker_task_runner_(worker_task_runner), |
750 drive_task_runner_(drive_task_runner), | 733 drive_task_runner_(drive_task_runner), |
| 734 worker_pool_(worker_pool), |
751 sync_file_system_dir_(sync_file_system_dir), | 735 sync_file_system_dir_(sync_file_system_dir), |
752 task_logger_(task_logger), | 736 task_logger_(task_logger), |
753 notification_manager_(notification_manager), | 737 notification_manager_(notification_manager), |
754 extension_service_(extension_service), | 738 extension_service_(extension_service), |
755 signin_manager_(signin_manager), | 739 signin_manager_(signin_manager), |
756 token_service_(token_service), | 740 token_service_(token_service), |
757 request_context_(request_context), | 741 request_context_(request_context), |
758 drive_service_factory_(drive_service_factory.Pass()), | 742 drive_service_factory_(drive_service_factory.Pass()), |
759 remote_change_processor_(nullptr), | 743 remote_change_processor_(nullptr), |
760 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), | 744 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 | 784 |
801 SyncStatusCallback SyncEngine::TrackCallback( | 785 SyncStatusCallback SyncEngine::TrackCallback( |
802 const SyncStatusCallback& callback) { | 786 const SyncStatusCallback& callback) { |
803 return callback_tracker_.Register( | 787 return callback_tracker_.Register( |
804 base::Bind(callback, SYNC_STATUS_ABORT), | 788 base::Bind(callback, SYNC_STATUS_ABORT), |
805 callback); | 789 callback); |
806 } | 790 } |
807 | 791 |
808 } // namespace drive_backend | 792 } // namespace drive_backend |
809 } // namespace sync_file_system | 793 } // namespace sync_file_system |
OLD | NEW |