Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(669)

Side by Side Diff: chrome/browser/sync_file_system/local/syncable_file_operation_runner.h

Issue 2129083002: Explicitly check various sync_file_system classes live on the IO thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests, remove unneeded check Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_H_ 5 #ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_H_
6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_H_ 6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <list> 10 #include <list>
11 #include <memory> 11 #include <memory>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "base/threading/non_thread_safe.h"
18 #include "chrome/browser/sync_file_system/local/local_file_sync_status.h" 17 #include "chrome/browser/sync_file_system/local/local_file_sync_status.h"
19 #include "storage/browser/fileapi/file_system_url.h" 18 #include "storage/browser/fileapi/file_system_url.h"
20 19
21 namespace storage { 20 namespace storage {
22 class FileSystemURL; 21 class FileSystemURL;
23 } 22 }
24 23
25 namespace sync_file_system { 24 namespace sync_file_system {
26 25
27 // This class must run only on IO thread. 26 // This class must run only on IO thread.
28 // Owned by LocalFileSyncContext. 27 // Owned by LocalFileSyncContext.
29 class SyncableFileOperationRunner 28 class SyncableFileOperationRunner
30 : public base::NonThreadSafe, 29 : public base::SupportsWeakPtr<SyncableFileOperationRunner>,
31 public base::SupportsWeakPtr<SyncableFileOperationRunner>,
32 public LocalFileSyncStatus::Observer { 30 public LocalFileSyncStatus::Observer {
33 public: 31 public:
34 // Represents an operation task (which usually wraps one FileSystemOperation). 32 // Represents an operation task (which usually wraps one FileSystemOperation).
35 class Task { 33 class Task {
36 public: 34 public:
37 Task() {} 35 Task() {}
38 virtual ~Task() {} 36 virtual ~Task() {}
39 37
40 // Only one of Run() or Cancel() is called. 38 // Only one of Run() or Cancel() is called.
41 virtual void Run() = 0; 39 virtual void Run() = 0;
42 virtual void Cancel() = 0; 40 virtual void Cancel() = 0;
43 41
44 protected: 42 protected:
45 // This is never called after Run() or Cancel() is called. 43 // This is never called after Run() or Cancel() is called.
46 virtual const std::vector<storage::FileSystemURL>& target_paths() const = 0; 44 virtual const std::vector<storage::FileSystemURL>& target_paths() const = 0;
47 45
48 private: 46 private:
49 friend class SyncableFileOperationRunner; 47 friend class SyncableFileOperationRunner;
50 bool IsRunnable(LocalFileSyncStatus* status) const; 48 bool IsRunnable(LocalFileSyncStatus* status) const;
51 void Start(LocalFileSyncStatus* status); 49 void Start(LocalFileSyncStatus* status);
52 static void CancelAndDelete(Task* task);
53 50
54 DISALLOW_COPY_AND_ASSIGN(Task); 51 DISALLOW_COPY_AND_ASSIGN(Task);
55 }; 52 };
56 53
57 SyncableFileOperationRunner(int64_t max_inflight_tasks, 54 SyncableFileOperationRunner(int64_t max_inflight_tasks,
58 LocalFileSyncStatus* sync_status); 55 LocalFileSyncStatus* sync_status);
59 ~SyncableFileOperationRunner() override; 56 ~SyncableFileOperationRunner() override;
60 57
61 // LocalFileSyncStatus::Observer overrides. 58 // LocalFileSyncStatus::Observer overrides.
62 void OnSyncEnabled(const storage::FileSystemURL& url) override; 59 void OnSyncEnabled(const storage::FileSystemURL& url) override;
(...skipping 21 matching lines...) Expand all
84 return static_cast<int64_t>(pending_tasks_.size()); 81 return static_cast<int64_t>(pending_tasks_.size());
85 } 82 }
86 83
87 int64_t num_inflight_tasks() const { return num_inflight_tasks_; } 84 int64_t num_inflight_tasks() const { return num_inflight_tasks_; }
88 85
89 private: 86 private:
90 // Returns true if we should start more tasks. 87 // Returns true if we should start more tasks.
91 bool ShouldStartMoreTasks() const; 88 bool ShouldStartMoreTasks() const;
92 89
93 // Keeps track of the writing/syncing status. Not owned. 90 // Keeps track of the writing/syncing status. Not owned.
94 LocalFileSyncStatus* sync_status_; 91 LocalFileSyncStatus* const sync_status_;
95 92
96 std::list<Task*> pending_tasks_; 93 std::list<std::unique_ptr<Task>> pending_tasks_;
97 94
98 const int64_t max_inflight_tasks_; 95 const int64_t max_inflight_tasks_;
99 int64_t num_inflight_tasks_; 96 int64_t num_inflight_tasks_;
100 97
101 DISALLOW_COPY_AND_ASSIGN(SyncableFileOperationRunner); 98 DISALLOW_COPY_AND_ASSIGN(SyncableFileOperationRunner);
102 }; 99 };
103 100
104 } // namespace sync_file_system 101 } // namespace sync_file_system
105 102
106 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_ H_ 103 #endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_LOCAL_SYNCABLE_FILE_OPERATION_RUNNER_ H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698