fake_sync_worker.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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/fake_sync_worker.h"
6
7#include "base/values.h"
8#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
9#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
10#include "chrome/browser/sync_file_system/sync_status_code.h"
11
12namespace sync_file_system {
13namespace drive_backend {
14
15FakeSyncWorker::FakeSyncWorker()
16    : sync_enabled_(true),
17      has_refresh_token_(true),
18      network_available_(true) {
19  sequence_checker_.DetachFromSequence();
20}
21
22FakeSyncWorker::~FakeSyncWorker() {
23  observers_.Clear();
24}
25
26void FakeSyncWorker::Initialize(
27    scoped_ptr<SyncEngineContext> sync_engine_context) {
28  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
29
30  sync_engine_context_ = sync_engine_context.Pass();
31  status_map_.clear();
32  // TODO(peria): Set |status_map_| as a fake metadata database.
33}
34
35void FakeSyncWorker::RegisterOrigin(const GURL& origin,
36                                    const SyncStatusCallback& callback) {
37  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
38  // TODO(peria): Check how it should act on installing installed app?
39  status_map_[origin] = REGISTERED;
40  callback.Run(SYNC_STATUS_OK);
41}
42
43void FakeSyncWorker::EnableOrigin(const GURL& origin,
44                                  const SyncStatusCallback& callback) {
45  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
46  // TODO(peria): Check how it should act on enabling non-installed app?
47  status_map_[origin] = ENABLED;
48  callback.Run(SYNC_STATUS_OK);
49}
50
51void FakeSyncWorker::DisableOrigin(const GURL& origin,
52                                   const SyncStatusCallback& callback) {
53  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
54  // TODO(peria): Check how it should act on disabling non-installed app?
55  status_map_[origin] = DISABLED;
56  callback.Run(SYNC_STATUS_OK);
57}
58
59void FakeSyncWorker::UninstallOrigin(const GURL& origin,
60                                     RemoteFileSyncService::UninstallFlag flag,
61                                     const SyncStatusCallback& callback) {
62  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
63  // TODO(peria): Check how it should act on uninstalling non-installed app?
64  status_map_[origin] = UNINSTALLED;
65  callback.Run(SYNC_STATUS_OK);
66}
67
68void FakeSyncWorker::ProcessRemoteChange(
69    const SyncFileCallback& callback) {
70  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
71  callback.Run(SYNC_STATUS_OK, fileapi::FileSystemURL());
72}
73
74void FakeSyncWorker::SetRemoteChangeProcessor(
75    RemoteChangeProcessorOnWorker* remote_change_processor_on_worker) {
76  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
77}
78
79RemoteServiceState FakeSyncWorker::GetCurrentState() const {
80  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
81  return REMOTE_SERVICE_OK;
82}
83
84void FakeSyncWorker::GetOriginStatusMap(
85    const RemoteFileSyncService::StatusMapCallback& callback) {
86  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
87
88  scoped_ptr<RemoteFileSyncService::OriginStatusMap>
89      status_map(new RemoteFileSyncService::OriginStatusMap);
90  for (StatusMap::const_iterator itr = status_map_.begin();
91       itr != status_map_.end(); ++itr) {
92    switch (itr->second) {
93    case REGISTERED:
94      (*status_map)[itr->first] = "Registered";
95      break;
96    case ENABLED:
97      (*status_map)[itr->first] = "Enabled";
98      break;
99    case DISABLED:
100      (*status_map)[itr->first] = "Disabled";
101      break;
102    case UNINSTALLED:
103      (*status_map)[itr->first] = "Uninstalled";
104      break;
105    default:
106      (*status_map)[itr->first] = "Unknown";
107      break;
108    }
109  }
110  callback.Run(status_map.Pass());
111}
112
113scoped_ptr<base::ListValue> FakeSyncWorker::DumpFiles(const GURL& origin) {
114  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
115  return scoped_ptr<base::ListValue>();
116}
117
118scoped_ptr<base::ListValue> FakeSyncWorker::DumpDatabase() {
119  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
120  return scoped_ptr<base::ListValue>();
121}
122
123void FakeSyncWorker::SetSyncEnabled(bool enabled) {
124  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
125  sync_enabled_ = enabled;
126
127  if (enabled)
128    UpdateServiceState(REMOTE_SERVICE_OK, "Set FakeSyncWorker enabled.");
129  else
130    UpdateServiceState(REMOTE_SERVICE_DISABLED, "Disabled FakeSyncWorker.");
131}
132
133void FakeSyncWorker::PromoteDemotedChanges() {
134  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
135  FOR_EACH_OBSERVER(
136      Observer,
137      observers_,
138      OnPendingFileListUpdated(10));
139}
140
141void FakeSyncWorker::ApplyLocalChange(
142    const FileChange& local_change,
143    const base::FilePath& local_path,
144    const SyncFileMetadata& local_metadata,
145    const fileapi::FileSystemURL& url,
146    const SyncStatusCallback& callback) {
147  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
148  callback.Run(SYNC_STATUS_OK);
149}
150
151void FakeSyncWorker::OnNotificationReceived() {
152  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
153  UpdateServiceState(REMOTE_SERVICE_OK, "Got push notification for Drive.");
154}
155
156void FakeSyncWorker::OnReadyToSendRequests() {
157  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
158  has_refresh_token_ = true;
159  UpdateServiceState(REMOTE_SERVICE_OK, "ReadyToSendRequests");
160}
161
162void FakeSyncWorker::OnRefreshTokenInvalid() {
163  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
164  has_refresh_token_ = false;
165  UpdateServiceState(REMOTE_SERVICE_OK, "RefreshTokenInvalid");
166}
167
168void FakeSyncWorker::OnNetworkChanged(
169    net::NetworkChangeNotifier::ConnectionType type) {
170  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
171  bool new_network_availability =
172      type != net::NetworkChangeNotifier::CONNECTION_NONE;
173  if (network_available_ && !new_network_availability) {
174    UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, "Disconnected");
175  } else if (!network_available_ && new_network_availability) {
176    UpdateServiceState(REMOTE_SERVICE_OK, "Connected");
177  }
178  network_available_ = new_network_availability;
179}
180
181void FakeSyncWorker::DetachFromSequence() {
182  sequence_checker_.DetachFromSequence();
183}
184
185void FakeSyncWorker::AddObserver(Observer* observer) {
186  // This method is called on UI thread.
187  observers_.AddObserver(observer);
188}
189
190void FakeSyncWorker::SetHasRefreshToken(bool has_refresh_token) {
191  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
192  has_refresh_token_ = has_refresh_token;
193}
194
195void FakeSyncWorker::UpdateServiceState(RemoteServiceState state,
196                                        const std::string& description) {
197  DCHECK(sequence_checker_.CalledOnValidSequencedThread());
198
199  FOR_EACH_OBSERVER(
200      Observer, observers_,
201      UpdateServiceState(state, description));
202}
203
204}  // namespace drive_backend
205}  // namespace sync_file_system
206