146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/callback_tracker_internal.h"
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/callback_tracker.h"
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace sync_file_system {
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace drive_backend {
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace internal {
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)AbortHelper::AbortHelper(CallbackTracker* tracker)
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    : tracker_(tracker), weak_ptr_factory_(this) {
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)AbortHelper::~AbortHelper() {}
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)base::WeakPtr<AbortHelper> AbortHelper::AsWeakPtr() {
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return weak_ptr_factory_.GetWeakPtr();
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// static
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)scoped_ptr<AbortHelper> AbortHelper::TakeOwnership(
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const base::WeakPtr<AbortHelper>& abort_helper) {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (!abort_helper)
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return scoped_ptr<AbortHelper>();
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<AbortHelper> result =
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      abort_helper->tracker_->PassAbortHelper(abort_helper.get());
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  abort_helper->weak_ptr_factory_.InvalidateWeakPtrs();
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return result.Pass();
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace internal
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace drive_backend
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace sync_file_system
37