OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "services/file/file_service.h" | 5 #include "services/file/file_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
10 #include "components/filesystem/lock_table.h" | 10 #include "components/filesystem/lock_table.h" |
11 #include "components/leveldb/leveldb_service_impl.h" | 11 #include "components/leveldb/leveldb_service_impl.h" |
12 #include "services/file/file_system.h" | 12 #include "services/file/file_system.h" |
13 #include "services/file/user_id_map.h" | 13 #include "services/file/user_id_map.h" |
14 #include "services/service_manager/public/cpp/connection.h" | 14 #include "services/service_manager/public/cpp/connection.h" |
15 | 15 |
16 namespace file { | 16 namespace file { |
17 | 17 |
18 class FileService::FileSystemObjects | 18 class FileService::FileSystemObjects |
19 : public base::SupportsWeakPtr<FileSystemObjects> { | 19 : public base::SupportsWeakPtr<FileSystemObjects> { |
20 public: | 20 public: |
21 // Created on the main thread. | 21 // Created on the main thread. |
22 FileSystemObjects(base::FilePath user_dir) : user_dir_(user_dir) {} | 22 FileSystemObjects(base::FilePath user_dir) : user_dir_(user_dir) {} |
23 | 23 |
24 // Destroyed on the |file_service_runner_|. | 24 // Destroyed on the |file_service_runner_|. |
25 ~FileSystemObjects() {} | 25 ~FileSystemObjects() {} |
26 | 26 |
27 // Called on the |file_service_runner_|. | 27 // Called on the |file_service_runner_|. |
28 void OnFileSystemRequest(const shell::Identity& remote_identity, | 28 void OnFileSystemRequest(const service_manager::Identity& remote_identity, |
29 mojom::FileSystemRequest request) { | 29 mojom::FileSystemRequest request) { |
30 if (!lock_table_) | 30 if (!lock_table_) |
31 lock_table_ = new filesystem::LockTable; | 31 lock_table_ = new filesystem::LockTable; |
32 file_system_bindings_.AddBinding(new FileSystem(user_dir_, lock_table_), | 32 file_system_bindings_.AddBinding(new FileSystem(user_dir_, lock_table_), |
33 std::move(request)); | 33 std::move(request)); |
34 } | 34 } |
35 | 35 |
36 private: | 36 private: |
37 mojo::BindingSet<mojom::FileSystem> file_system_bindings_; | 37 mojo::BindingSet<mojom::FileSystem> file_system_bindings_; |
38 scoped_refptr<filesystem::LockTable> lock_table_; | 38 scoped_refptr<filesystem::LockTable> lock_table_; |
39 base::FilePath user_dir_; | 39 base::FilePath user_dir_; |
40 | 40 |
41 DISALLOW_COPY_AND_ASSIGN(FileSystemObjects); | 41 DISALLOW_COPY_AND_ASSIGN(FileSystemObjects); |
42 }; | 42 }; |
43 | 43 |
44 class FileService::LevelDBServiceObjects | 44 class FileService::LevelDBServiceObjects |
45 : public base::SupportsWeakPtr<LevelDBServiceObjects> { | 45 : public base::SupportsWeakPtr<LevelDBServiceObjects> { |
46 public: | 46 public: |
47 // Created on the main thread. | 47 // Created on the main thread. |
48 LevelDBServiceObjects(scoped_refptr<base::SingleThreadTaskRunner> task_runner) | 48 LevelDBServiceObjects(scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
49 : task_runner_(std::move(task_runner)) {} | 49 : task_runner_(std::move(task_runner)) {} |
50 | 50 |
51 // Destroyed on the |leveldb_service_runner_|. | 51 // Destroyed on the |leveldb_service_runner_|. |
52 ~LevelDBServiceObjects() {} | 52 ~LevelDBServiceObjects() {} |
53 | 53 |
54 // Called on the |leveldb_service_runner_|. | 54 // Called on the |leveldb_service_runner_|. |
55 void OnLevelDBServiceRequest(const shell::Identity& remote_identity, | 55 void OnLevelDBServiceRequest(const service_manager::Identity& remote_identity, |
56 leveldb::mojom::LevelDBServiceRequest request) { | 56 leveldb::mojom::LevelDBServiceRequest request) { |
57 if (!leveldb_service_) | 57 if (!leveldb_service_) |
58 leveldb_service_.reset(new leveldb::LevelDBServiceImpl(task_runner_)); | 58 leveldb_service_.reset(new leveldb::LevelDBServiceImpl(task_runner_)); |
59 leveldb_bindings_.AddBinding(leveldb_service_.get(), std::move(request)); | 59 leveldb_bindings_.AddBinding(leveldb_service_.get(), std::move(request)); |
60 } | 60 } |
61 | 61 |
62 private: | 62 private: |
63 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 63 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
64 | 64 |
65 // Variables that are only accessible on the |leveldb_service_runner_| thread. | 65 // Variables that are only accessible on the |leveldb_service_runner_| thread. |
66 std::unique_ptr<leveldb::mojom::LevelDBService> leveldb_service_; | 66 std::unique_ptr<leveldb::mojom::LevelDBService> leveldb_service_; |
67 mojo::BindingSet<leveldb::mojom::LevelDBService> leveldb_bindings_; | 67 mojo::BindingSet<leveldb::mojom::LevelDBService> leveldb_bindings_; |
68 | 68 |
69 DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects); | 69 DISALLOW_COPY_AND_ASSIGN(LevelDBServiceObjects); |
70 }; | 70 }; |
71 | 71 |
72 std::unique_ptr<shell::Service> CreateFileService( | 72 std::unique_ptr<service_manager::Service> CreateFileService( |
73 scoped_refptr<base::SingleThreadTaskRunner> file_service_runner, | 73 scoped_refptr<base::SingleThreadTaskRunner> file_service_runner, |
74 scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner, | 74 scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner, |
75 const base::Closure& quit_closure) { | 75 const base::Closure& quit_closure) { |
76 return base::MakeUnique<FileService>(std::move(file_service_runner), | 76 return base::MakeUnique<FileService>(std::move(file_service_runner), |
77 std::move(leveldb_service_runner)); | 77 std::move(leveldb_service_runner)); |
78 } | 78 } |
79 | 79 |
80 FileService::FileService( | 80 FileService::FileService( |
81 scoped_refptr<base::SingleThreadTaskRunner> file_service_runner, | 81 scoped_refptr<base::SingleThreadTaskRunner> file_service_runner, |
82 scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) | 82 scoped_refptr<base::SingleThreadTaskRunner> leveldb_service_runner) |
83 : file_service_runner_(std::move(file_service_runner)), | 83 : file_service_runner_(std::move(file_service_runner)), |
84 leveldb_service_runner_(std::move(leveldb_service_runner)) {} | 84 leveldb_service_runner_(std::move(leveldb_service_runner)) {} |
85 | 85 |
86 FileService::~FileService() { | 86 FileService::~FileService() { |
87 file_service_runner_->DeleteSoon(FROM_HERE, file_system_objects_.release()); | 87 file_service_runner_->DeleteSoon(FROM_HERE, file_system_objects_.release()); |
88 leveldb_service_runner_->DeleteSoon(FROM_HERE, leveldb_objects_.release()); | 88 leveldb_service_runner_->DeleteSoon(FROM_HERE, leveldb_objects_.release()); |
89 } | 89 } |
90 | 90 |
91 void FileService::OnStart(const shell::Identity& identity) { | 91 void FileService::OnStart(const service_manager::Identity& identity) { |
92 file_system_objects_.reset(new FileService::FileSystemObjects( | 92 file_system_objects_.reset(new FileService::FileSystemObjects( |
93 GetUserDirForUserId(identity.user_id()))); | 93 GetUserDirForUserId(identity.user_id()))); |
94 leveldb_objects_.reset( | 94 leveldb_objects_.reset( |
95 new FileService::LevelDBServiceObjects(leveldb_service_runner_)); | 95 new FileService::LevelDBServiceObjects(leveldb_service_runner_)); |
96 } | 96 } |
97 | 97 |
98 bool FileService::OnConnect(const shell::Identity& remote_identity, | 98 bool FileService::OnConnect(const service_manager::Identity& remote_identity, |
99 shell::InterfaceRegistry* registry) { | 99 service_manager::InterfaceRegistry* registry) { |
100 registry->AddInterface<leveldb::mojom::LevelDBService>(this); | 100 registry->AddInterface<leveldb::mojom::LevelDBService>(this); |
101 registry->AddInterface<mojom::FileSystem>(this); | 101 registry->AddInterface<mojom::FileSystem>(this); |
102 return true; | 102 return true; |
103 } | 103 } |
104 | 104 |
105 void FileService::Create(const shell::Identity& remote_identity, | 105 void FileService::Create(const service_manager::Identity& remote_identity, |
106 mojom::FileSystemRequest request) { | 106 mojom::FileSystemRequest request) { |
107 file_service_runner_->PostTask( | 107 file_service_runner_->PostTask( |
108 FROM_HERE, | 108 FROM_HERE, |
109 base::Bind(&FileService::FileSystemObjects::OnFileSystemRequest, | 109 base::Bind(&FileService::FileSystemObjects::OnFileSystemRequest, |
110 file_system_objects_->AsWeakPtr(), remote_identity, | 110 file_system_objects_->AsWeakPtr(), remote_identity, |
111 base::Passed(&request))); | 111 base::Passed(&request))); |
112 } | 112 } |
113 | 113 |
114 void FileService::Create(const shell::Identity& remote_identity, | 114 void FileService::Create(const service_manager::Identity& remote_identity, |
115 leveldb::mojom::LevelDBServiceRequest request) { | 115 leveldb::mojom::LevelDBServiceRequest request) { |
116 leveldb_service_runner_->PostTask( | 116 leveldb_service_runner_->PostTask( |
117 FROM_HERE, | 117 FROM_HERE, |
118 base::Bind( | 118 base::Bind( |
119 &FileService::LevelDBServiceObjects::OnLevelDBServiceRequest, | 119 &FileService::LevelDBServiceObjects::OnLevelDBServiceRequest, |
120 leveldb_objects_->AsWeakPtr(), remote_identity, | 120 leveldb_objects_->AsWeakPtr(), remote_identity, |
121 base::Passed(&request))); | 121 base::Passed(&request))); |
122 } | 122 } |
123 | 123 |
124 } // namespace user_service | 124 } // namespace user_service |
OLD | NEW |