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