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

Side by Side Diff: chrome/browser/sync_file_system/sync_file_system_service.cc

Issue 377563002: [SyncFS] Eliminate SyncFileSystemService dependency from SyncProcessRunner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/sync_file_system_service.h" 5 #include "chrome/browser/sync_file_system/sync_file_system_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 class LocalSyncRunner : public SyncProcessRunner, 140 class LocalSyncRunner : public SyncProcessRunner,
141 public LocalFileSyncService::Observer { 141 public LocalFileSyncService::Observer {
142 public: 142 public:
143 LocalSyncRunner(const std::string& name, 143 LocalSyncRunner(const std::string& name,
144 SyncFileSystemService* sync_service) 144 SyncFileSystemService* sync_service)
145 : SyncProcessRunner(name, sync_service, 145 : SyncProcessRunner(name, sync_service,
146 scoped_ptr<SyncProcessRunner::TimerHelper>(), 1), 146 scoped_ptr<SyncProcessRunner::TimerHelper>(), 1),
147 factory_(this) {} 147 factory_(this) {}
148 148
149 virtual void StartSync(const SyncStatusCallback& callback) OVERRIDE { 149 virtual void StartSync(const SyncStatusCallback& callback) OVERRIDE {
150 sync_service()->local_service_->ProcessLocalChange( 150 GetSyncService()->local_service_->ProcessLocalChange(
151 base::Bind(&LocalSyncRunner::DidProcessLocalChange, 151 base::Bind(&LocalSyncRunner::DidProcessLocalChange,
152 factory_.GetWeakPtr(), callback)); 152 factory_.GetWeakPtr(), callback));
153 } 153 }
154 154
155 // LocalFileSyncService::Observer overrides. 155 // LocalFileSyncService::Observer overrides.
156 virtual void OnLocalChangeAvailable(int64 pending_changes) OVERRIDE { 156 virtual void OnLocalChangeAvailable(int64 pending_changes) OVERRIDE {
157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
158 158
159 OnChangesUpdated(pending_changes); 159 OnChangesUpdated(pending_changes);
160 160
161 // Kick other sync runners just in case they're not running. 161 // Kick other sync runners just in case they're not running.
162 sync_service()->RunForEachSyncRunners( 162 GetSyncService()->RunForEachSyncRunners(
163 &SyncProcessRunner::ScheduleIfNotRunning); 163 &SyncProcessRunner::ScheduleIfNotRunning);
164 } 164 }
165 165
166 private: 166 private:
167 void DidProcessLocalChange( 167 void DidProcessLocalChange(
168 const SyncStatusCallback& callback, 168 const SyncStatusCallback& callback,
169 SyncStatusCode status, 169 SyncStatusCode status,
170 const FileSystemURL& url) { 170 const FileSystemURL& url) {
171 util::Log(logging::LOG_VERBOSE, FROM_HERE, 171 util::Log(logging::LOG_VERBOSE, FROM_HERE,
172 "ProcessLocalChange finished with status=%d (%s) for url=%s", 172 "ProcessLocalChange finished with status=%d (%s) for url=%s",
(...skipping 29 matching lines...) Expand all
202 return RemoteStateToSyncServiceState(last_state_); 202 return RemoteStateToSyncServiceState(last_state_);
203 } 203 }
204 204
205 // RemoteFileSyncService::Observer overrides. 205 // RemoteFileSyncService::Observer overrides.
206 virtual void OnRemoteChangeQueueUpdated(int64 pending_changes) OVERRIDE { 206 virtual void OnRemoteChangeQueueUpdated(int64 pending_changes) OVERRIDE {
207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
208 208
209 OnChangesUpdated(pending_changes); 209 OnChangesUpdated(pending_changes);
210 210
211 // Kick other sync runners just in case they're not running. 211 // Kick other sync runners just in case they're not running.
212 sync_service()->RunForEachSyncRunners( 212 GetSyncService()->RunForEachSyncRunners(
213 &SyncProcessRunner::ScheduleIfNotRunning); 213 &SyncProcessRunner::ScheduleIfNotRunning);
214 } 214 }
215 215
216 virtual void OnRemoteServiceStateUpdated( 216 virtual void OnRemoteServiceStateUpdated(
217 RemoteServiceState state, 217 RemoteServiceState state,
218 const std::string& description) OVERRIDE { 218 const std::string& description) OVERRIDE {
219 // Just forward to SyncFileSystemService. 219 // Just forward to SyncFileSystemService.
220 sync_service()->OnRemoteServiceStateUpdated(state, description); 220 GetSyncService()->OnRemoteServiceStateUpdated(state, description);
221 last_state_ = state; 221 last_state_ = state;
222 } 222 }
223 223
224 private: 224 private:
225 void DidProcessRemoteChange( 225 void DidProcessRemoteChange(
226 const SyncStatusCallback& callback, 226 const SyncStatusCallback& callback,
227 SyncStatusCode status, 227 SyncStatusCode status,
228 const FileSystemURL& url) { 228 const FileSystemURL& url) {
229 util::Log(logging::LOG_VERBOSE, FROM_HERE, 229 util::Log(logging::LOG_VERBOSE, FROM_HERE,
230 "ProcessRemoteChange finished with status=%d (%s) for url=%s", 230 "ProcessRemoteChange finished with status=%d (%s) for url=%s",
231 status, SyncStatusCodeToString(status), 231 status, SyncStatusCodeToString(status),
232 url.DebugString().c_str()); 232 url.DebugString().c_str());
233 233
234 if (status == SYNC_STATUS_FILE_BUSY) { 234 if (status == SYNC_STATUS_FILE_BUSY) {
235 sync_service()->local_service_->RegisterURLForWaitingSync( 235 GetSyncService()->local_service_->RegisterURLForWaitingSync(
236 url, base::Bind(&RemoteSyncRunner::Schedule, 236 url, base::Bind(&RemoteSyncRunner::Schedule,
237 factory_.GetWeakPtr())); 237 factory_.GetWeakPtr()));
238 } 238 }
239 callback.Run(status); 239 callback.Run(status);
240 } 240 }
241 241
242 RemoteFileSyncService* remote_service_; 242 RemoteFileSyncService* remote_service_;
243 RemoteServiceState last_state_; 243 RemoteServiceState last_state_;
244 base::WeakPtrFactory<RemoteSyncRunner> factory_; 244 base::WeakPtrFactory<RemoteSyncRunner> factory_;
245 DISALLOW_COPY_AND_ASSIGN(RemoteSyncRunner); 245 DISALLOW_COPY_AND_ASSIGN(RemoteSyncRunner);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 282
283 util::Log(logging::LOG_VERBOSE, FROM_HERE, 283 util::Log(logging::LOG_VERBOSE, FROM_HERE,
284 "Initializing for App: %s", app_origin.spec().c_str()); 284 "Initializing for App: %s", app_origin.spec().c_str());
285 285
286 local_service_->MaybeInitializeFileSystemContext( 286 local_service_->MaybeInitializeFileSystemContext(
287 app_origin, file_system_context, 287 app_origin, file_system_context,
288 base::Bind(&SyncFileSystemService::DidInitializeFileSystem, 288 base::Bind(&SyncFileSystemService::DidInitializeFileSystem,
289 AsWeakPtr(), app_origin, callback)); 289 AsWeakPtr(), app_origin, callback));
290 } 290 }
291 291
292 SyncServiceState SyncFileSystemService::GetSyncServiceState() {
293 // For now we always query the state from the main RemoteFileSyncService.
294 return RemoteStateToSyncServiceState(remote_service_->GetCurrentState());
295 }
296
297 void SyncFileSystemService::GetExtensionStatusMap( 292 void SyncFileSystemService::GetExtensionStatusMap(
298 const ExtensionStatusMapCallback& callback) { 293 const ExtensionStatusMapCallback& callback) {
299 remote_service_->GetOriginStatusMap( 294 remote_service_->GetOriginStatusMap(
300 base::Bind(&SyncFileSystemService::DidGetExtensionStatusMap, 295 base::Bind(&SyncFileSystemService::DidGetExtensionStatusMap,
301 AsWeakPtr(), callback)); 296 AsWeakPtr(), callback));
302 } 297 }
303 298
304 void SyncFileSystemService::DumpFiles(const GURL& origin, 299 void SyncFileSystemService::DumpFiles(const GURL& origin,
305 const DumpFilesCallback& callback) { 300 const DumpFilesCallback& callback) {
306 DCHECK(!origin.is_empty()); 301 DCHECK(!origin.is_empty());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 void SyncFileSystemService::RemoveSyncEventObserver( 344 void SyncFileSystemService::RemoveSyncEventObserver(
350 SyncEventObserver* observer) { 345 SyncEventObserver* observer) {
351 observers_.RemoveObserver(observer); 346 observers_.RemoveObserver(observer);
352 } 347 }
353 348
354 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor( 349 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor(
355 const GURL& origin) { 350 const GURL& origin) {
356 return GetRemoteService(origin)->GetLocalChangeProcessor(); 351 return GetRemoteService(origin)->GetLocalChangeProcessor();
357 } 352 }
358 353
354 void SyncFileSystemService::OnSyncIdle() {
355 int64 remote_changes = 0;
356 for (ScopedVector<SyncProcessRunner>::iterator iter =
357 remote_sync_runners_.begin();
358 iter != remote_sync_runners_.end(); ++iter)
359 remote_changes += (*iter)->pending_changes();
360 if (remote_changes == 0)
361 local_service_->PromoteDemotedChanges();
362
363 int64 local_changes = 0;
364 for (ScopedVector<SyncProcessRunner>::iterator iter =
365 local_sync_runners_.begin();
366 iter != local_sync_runners_.end(); ++iter)
367 local_changes += (*iter)->pending_changes();
368 if (local_changes == 0 && v2_remote_service_)
369 v2_remote_service_->PromoteDemotedChanges();
370 }
371
372 SyncServiceState SyncFileSystemService::GetSyncServiceState() {
373 // For now we always query the state from the main RemoteFileSyncService.
374 return RemoteStateToSyncServiceState(remote_service_->GetCurrentState());
375 }
376
377 SyncFileSystemService* SyncFileSystemService::GetSyncService() {
378 return this;
379 }
380
359 SyncFileSystemService::SyncFileSystemService(Profile* profile) 381 SyncFileSystemService::SyncFileSystemService(Profile* profile)
360 : profile_(profile), 382 : profile_(profile),
361 sync_enabled_(true) { 383 sync_enabled_(true) {
362 } 384 }
363 385
364 void SyncFileSystemService::Initialize( 386 void SyncFileSystemService::Initialize(
365 scoped_ptr<LocalFileSyncService> local_service, 387 scoped_ptr<LocalFileSyncService> local_service,
366 scoped_ptr<RemoteFileSyncService> remote_service) { 388 scoped_ptr<RemoteFileSyncService> remote_service) {
367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 389 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
368 DCHECK(local_service); 390 DCHECK(local_service);
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 void SyncFileSystemService::DidGetLocalChangeStatus( 594 void SyncFileSystemService::DidGetLocalChangeStatus(
573 const SyncFileStatusCallback& callback, 595 const SyncFileStatusCallback& callback,
574 SyncStatusCode status, 596 SyncStatusCode status,
575 bool has_pending_local_changes) { 597 bool has_pending_local_changes) {
576 callback.Run( 598 callback.Run(
577 status, 599 status,
578 has_pending_local_changes ? 600 has_pending_local_changes ?
579 SYNC_FILE_STATUS_HAS_PENDING_CHANGES : SYNC_FILE_STATUS_SYNCED); 601 SYNC_FILE_STATUS_HAS_PENDING_CHANGES : SYNC_FILE_STATUS_SYNCED);
580 } 602 }
581 603
582 void SyncFileSystemService::OnSyncIdle() {
583 int64 remote_changes = 0;
584 for (ScopedVector<SyncProcessRunner>::iterator iter =
585 remote_sync_runners_.begin();
586 iter != remote_sync_runners_.end(); ++iter)
587 remote_changes += (*iter)->pending_changes();
588 if (remote_changes == 0)
589 local_service_->PromoteDemotedChanges();
590
591 int64 local_changes = 0;
592 for (ScopedVector<SyncProcessRunner>::iterator iter =
593 local_sync_runners_.begin();
594 iter != local_sync_runners_.end(); ++iter)
595 local_changes += (*iter)->pending_changes();
596 if (local_changes == 0 && v2_remote_service_)
597 v2_remote_service_->PromoteDemotedChanges();
598 }
599
600 void SyncFileSystemService::OnRemoteServiceStateUpdated( 604 void SyncFileSystemService::OnRemoteServiceStateUpdated(
601 RemoteServiceState state, 605 RemoteServiceState state,
602 const std::string& description) { 606 const std::string& description) {
603 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 607 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
604 util::Log(logging::LOG_VERBOSE, FROM_HERE, 608 util::Log(logging::LOG_VERBOSE, FROM_HERE,
605 "OnRemoteServiceStateChanged: %d %s", state, description.c_str()); 609 "OnRemoteServiceStateChanged: %d %s", state, description.c_str());
606 610
607 FOR_EACH_OBSERVER( 611 FOR_EACH_OBSERVER(
608 SyncEventObserver, observers_, 612 SyncEventObserver, observers_,
609 OnSyncStateUpdated(GURL(), 613 OnSyncStateUpdated(GURL(),
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 v2_remote_service_->AddServiceObserver(v2_remote_syncer.get()); 748 v2_remote_service_->AddServiceObserver(v2_remote_syncer.get());
745 v2_remote_service_->AddFileStatusObserver(this); 749 v2_remote_service_->AddFileStatusObserver(this);
746 v2_remote_service_->SetRemoteChangeProcessor(local_service_.get()); 750 v2_remote_service_->SetRemoteChangeProcessor(local_service_.get());
747 v2_remote_service_->SetSyncEnabled(sync_enabled_); 751 v2_remote_service_->SetSyncEnabled(sync_enabled_);
748 remote_sync_runners_.push_back(v2_remote_syncer.release()); 752 remote_sync_runners_.push_back(v2_remote_syncer.release());
749 } 753 }
750 return v2_remote_service_.get(); 754 return v2_remote_service_.get();
751 } 755 }
752 756
753 } // namespace sync_file_system 757 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/sync_file_system_service.h ('k') | chrome/browser/sync_file_system/sync_process_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698