15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/drive_backend/remote_change_processor_on_worker.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h" 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/location.h" 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/weak_ptr.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/single_thread_task_runner.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/drive_backend/remote_change_processor_wrapper.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/file_change.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/sync_file_metadata.h" 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace sync_file_system { 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace drive_backend { 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuRemoteChangeProcessorOnWorker::RemoteChangeProcessorOnWorker( 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::WeakPtr<RemoteChangeProcessorWrapper>& wrapper, 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::SingleThreadTaskRunner* ui_task_runner, 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::SequencedTaskRunner* worker_task_runner) 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : wrapper_(wrapper), 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui_task_runner_(ui_task_runner), 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) worker_task_runner_(worker_task_runner) { 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) sequence_checker_.DetachFromSequence(); 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)RemoteChangeProcessorOnWorker::~RemoteChangeProcessorOnWorker() { 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RemoteChangeProcessorOnWorker::PrepareForProcessRemoteChange( 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url, 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const PrepareChangeCallback& callback) { 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui_task_runner_->PostTask( 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FROM_HERE, 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&RemoteChangeProcessorWrapper::PrepareForProcessRemoteChange, 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wrapper_, 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url, 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RelayCallbackToTaskRunner( 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci worker_task_runner_.get(), FROM_HERE, callback))); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RemoteChangeProcessorOnWorker::ApplyRemoteChange( 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const FileChange& change, 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::FilePath& local_path, 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url, 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const SyncStatusCallback& callback) { 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui_task_runner_->PostTask( 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FROM_HERE, 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&RemoteChangeProcessorWrapper::ApplyRemoteChange, 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wrapper_, 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change, 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu local_path, 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url, 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RelayCallbackToTaskRunner( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci worker_task_runner_.get(), FROM_HERE, callback))); 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RemoteChangeProcessorOnWorker::FinalizeRemoteSync( 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url, 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool clear_local_changes, 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::Closure& completion_callback) { 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui_task_runner_->PostTask( 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FROM_HERE, 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &RemoteChangeProcessorWrapper::FinalizeRemoteSync, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wrapper_, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci clear_local_changes, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RelayCallbackToTaskRunner( 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci worker_task_runner_.get(), FROM_HERE, completion_callback))); 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid RemoteChangeProcessorOnWorker::RecordFakeLocalChange( 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const storage::FileSystemURL& url, 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const FileChange& change, 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const SyncStatusCallback& callback) { 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui_task_runner_->PostTask( 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu FROM_HERE, 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&RemoteChangeProcessorWrapper::RecordFakeLocalChange, 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wrapper_, 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu url, 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu change, 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RelayCallbackToTaskRunner( 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci worker_task_runner_.get(), FROM_HERE, callback))); 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void RemoteChangeProcessorOnWorker::DetachFromSequence() { 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sequence_checker_.DetachFromSequence(); 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace drive_backend 1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace sync_file_system 104