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
3// found in the LICENSE file.
4
5#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
6
7#include "base/basictypes.h"
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/sequenced_task_runner.h"
11#include "base/single_thread_task_runner.h"
12#include "chrome/browser/drive/drive_service_interface.h"
13#include "chrome/browser/drive/drive_uploader.h"
14#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
15#include "chrome/browser/sync_file_system/remote_change_processor.h"
16#include "chrome/browser/sync_file_system/task_logger.h"
17
18namespace sync_file_system {
19namespace drive_backend {
20
21SyncEngineContext::SyncEngineContext(
22    scoped_ptr<drive::DriveServiceInterface> drive_service,
23    scoped_ptr<drive::DriveUploaderInterface> drive_uploader,
24    TaskLogger* task_logger,
25    const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
26    const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner)
27    : drive_service_(drive_service.Pass()),
28      drive_uploader_(drive_uploader.Pass()),
29      task_logger_(task_logger ? task_logger->AsWeakPtr()
30                               : base::WeakPtr<TaskLogger>()),
31      remote_change_processor_(NULL),
32      ui_task_runner_(ui_task_runner),
33      worker_task_runner_(worker_task_runner) {
34  sequence_checker_.DetachFromSequence();
35}
36
37SyncEngineContext::~SyncEngineContext() {
38  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
39}
40
41drive::DriveServiceInterface* SyncEngineContext::GetDriveService() {
42  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
43  return drive_service_.get();
44}
45
46drive::DriveUploaderInterface* SyncEngineContext::GetDriveUploader() {
47  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
48  return drive_uploader_.get();
49}
50
51base::WeakPtr<TaskLogger> SyncEngineContext::GetTaskLogger() {
52  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
53  return task_logger_;
54}
55
56MetadataDatabase* SyncEngineContext::GetMetadataDatabase() {
57  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
58  return metadata_database_.get();
59}
60
61scoped_ptr<MetadataDatabase> SyncEngineContext::PassMetadataDatabase() {
62  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
63  return metadata_database_.Pass();
64}
65
66RemoteChangeProcessor* SyncEngineContext::GetRemoteChangeProcessor() {
67  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
68  return remote_change_processor_;
69}
70
71base::SingleThreadTaskRunner* SyncEngineContext::GetUITaskRunner() {
72  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
73  return ui_task_runner_.get();
74}
75
76base::SequencedTaskRunner* SyncEngineContext::GetWorkerTaskRunner() {
77  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
78  return worker_task_runner_.get();
79}
80
81void SyncEngineContext::SetMetadataDatabase(
82    scoped_ptr<MetadataDatabase> metadata_database) {
83  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
84  if (metadata_database)
85    metadata_database_ = metadata_database.Pass();
86}
87
88void SyncEngineContext::SetRemoteChangeProcessor(
89    RemoteChangeProcessor* remote_change_processor) {
90  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
91  DCHECK(remote_change_processor);
92  remote_change_processor_ = remote_change_processor;
93}
94
95void SyncEngineContext::DetachFromSequence() {
96  sequence_checker_.DetachFromSequence();
97}
98
99}  // namespace drive_backend
100}  // namespace sync_file_system
101