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/drive_uploader_on_worker.h"
65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string>
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h"
105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/location.h"
115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/single_thread_task_runner.h"
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/sync_file_system/drive_backend/drive_uploader_wrapper.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "google_apis/drive/drive_api_parser.h"
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace sync_file_system {
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace drive_backend {
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuDriveUploaderOnWorker::DriveUploaderOnWorker(
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const base::WeakPtr<DriveUploaderWrapper>& 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)  sequece_checker_.DetachFromSequence();
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuDriveUploaderOnWorker::~DriveUploaderOnWorker() {}
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugoogle_apis::CancelCallback DriveUploaderOnWorker::UploadNewFile(
325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& parent_resource_id,
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const base::FilePath& local_file_path,
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& title,
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& content_type,
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const UploadNewFileOptions& options,
375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const drive::UploadCompletionCallback& callback,
385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const google_apis::ProgressCallback& progress_callback) {
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DCHECK(sequece_checker_.CalledOnValidSequencedThread());
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ui_task_runner_->PostTask(
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      FROM_HERE,
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::Bind(&DriveUploaderWrapper::UploadNewFile,
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 wrapper_,
455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 parent_resource_id,
465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 local_file_path,
475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 title,
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 content_type,
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 options,
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 RelayCallbackToTaskRunner(
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     worker_task_runner_.get(), FROM_HERE, callback)));
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return google_apis::CancelCallback();
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugoogle_apis::CancelCallback DriveUploaderOnWorker::UploadExistingFile(
575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& resource_id,
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const base::FilePath& local_file_path,
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& content_type,
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const UploadExistingFileOptions& options,
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const drive::UploadCompletionCallback& callback,
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const google_apis::ProgressCallback& progress_callback) {
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DCHECK(sequece_checker_.CalledOnValidSequencedThread());
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ui_task_runner_->PostTask(
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      FROM_HERE,
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::Bind(&DriveUploaderWrapper::UploadExistingFile,
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 wrapper_,
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 resource_id,
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 local_file_path,
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 content_type,
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 options,
735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 RelayCallbackToTaskRunner(
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     worker_task_runner_.get(), FROM_HERE, callback)));
755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return google_apis::CancelCallback();
775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugoogle_apis::CancelCallback DriveUploaderOnWorker::ResumeUploadFile(
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const GURL& upload_location,
815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const base::FilePath& local_file_path,
825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const std::string& content_type,
835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const drive::UploadCompletionCallback& callback,
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const google_apis::ProgressCallback& progress_callback) {
855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  NOTREACHED();
865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return google_apis::CancelCallback();
875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace drive_backend
905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace sync_file_system
91