1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/bind.h" 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/sync_file_system/drive_backend/sync_task_manager.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_task_token.h" 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/sync_file_system/drive_backend/task_dependency_manager.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace sync_file_system { 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace drive_backend { 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace { 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid CallRunExclusive(const base::WeakPtr<ExclusiveTask>& task, 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch scoped_ptr<SyncTaskToken> token) { 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (task) 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch task->RunExclusive(SyncTaskToken::WrapToCallback(token.Pass())); 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochExclusiveTask::ExclusiveTask() : weak_ptr_factory_(this) {} 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochExclusiveTask::~ExclusiveTask() {} 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid ExclusiveTask::RunPreflight(scoped_ptr<SyncTaskToken> token) { 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TaskBlocker> task_blocker(new TaskBlocker); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci task_blocker->exclusive = true; 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SyncTaskManager::UpdateTaskBlocker( 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci token.Pass(), task_blocker.Pass(), 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::Bind(&CallRunExclusive, weak_ptr_factory_.GetWeakPtr())); 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace drive_backend 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace sync_file_system 39