touch_operation.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_TOUCH_OPERATION_H_
6#define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_TOUCH_OPERATION_H_
7
8#include "base/basictypes.h"
9#include "base/memory/ref_counted.h"
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/chromeos/drive/file_errors.h"
13#include "chrome/browser/google_apis/gdata_errorcode.h"
14
15namespace base {
16class FilePath;
17class SequencedTaskRunner;
18class Time;
19}  // namespace base
20
21namespace google_apis {
22class ResourceEntry;
23}  // namespace google_apis
24
25namespace drive {
26namespace internal {
27class ResourceMetadata;
28}  // namespace internal
29
30class JobScheduler;
31class ResourceEntry;
32
33namespace file_system {
34
35class OperationObserver;
36
37class TouchOperation {
38 public:
39  TouchOperation(base::SequencedTaskRunner* blocking_task_runner,
40                 OperationObserver* observer,
41                 JobScheduler* scheduler,
42                 internal::ResourceMetadata* metadata);
43  ~TouchOperation();
44
45  // Touches the file by updating last access time and last modified time.
46  // Upon completion, invokes |callback|.
47  // |last_access_time|, |last_modified_time| and |callback| must not be null.
48  void TouchFile(const base::FilePath& file_path,
49                 const base::Time& last_access_time,
50                 const base::Time& last_modified_time,
51                 const FileOperationCallback& callback);
52
53 private:
54  // Part of TouchFile(). Runs after GetResourceEntry is completed.
55  void TouchFileAfterGetResourceEntry(const base::FilePath& file_path,
56                                      const base::Time& last_access_time,
57                                      const base::Time& last_modified_time,
58                                      const FileOperationCallback& callback,
59                                      ResourceEntry* entry,
60                                      FileError error);
61
62  // Part of TouchFile(). Runs after the server side update for last access time
63  // and last modified time is completed.
64  void TouchFileAfterServerTimeStampUpdated(
65      const base::FilePath& file_path,
66      const FileOperationCallback& callback,
67      google_apis::GDataErrorCode gdata_error,
68      scoped_ptr<google_apis::ResourceEntry> resource_entry);
69
70  // Part of TouchFile(). Runs after refreshing the local metadata is completed.
71  void TouchFileAfterRefreshMetadata(const base::FilePath& file_path,
72                                     const FileOperationCallback& callback,
73                                     FileError error);
74
75  scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
76  OperationObserver* observer_;
77  JobScheduler* scheduler_;
78  internal::ResourceMetadata* metadata_;
79
80  // Note: This should remain the last member so it'll be destroyed and
81  // invalidate the weak pointers before any other members are destroyed.
82  base::WeakPtrFactory<TouchOperation> weak_ptr_factory_;
83  DISALLOW_COPY_AND_ASSIGN(TouchOperation);
84};
85
86}  // namespace file_system
87}  // namespace drive
88
89#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_TOUCH_OPERATION_H_
90