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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/service.cc

Issue 239993002: [fsp] Create a RequestManager per a ProvidedFileSystem instance. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/chromeos/file_system_provider/service.h" 5 #include "chrome/browser/chromeos/file_system_provider/service.h"
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" 9 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
10 #include "chrome/browser/chromeos/file_system_provider/observer.h" 10 #include "chrome/browser/chromeos/file_system_provider/observer.h"
11 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h" 11 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h" 12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h"
13 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte rface.h" 13 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte rface.h"
14 #include "chrome/browser/chromeos/file_system_provider/service_factory.h" 14 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "extensions/browser/extension_system.h" 16 #include "extensions/browser/extension_system.h"
17 #include "webkit/browser/fileapi/external_mount_points.h" 17 #include "webkit/browser/fileapi/external_mount_points.h"
18 18
19 namespace chromeos { 19 namespace chromeos {
20 namespace file_system_provider { 20 namespace file_system_provider {
21 namespace { 21 namespace {
22 22
23 // Maximum number of file systems to be mounted in the same time, per profile. 23 // Maximum number of file systems to be mounted in the same time, per profile.
24 const size_t kMaxFileSystems = 16; 24 const size_t kMaxFileSystems = 16;
25 25
26 // Default factory for provided file systems. The |event_router| nor the 26 // Default factory for provided file systems. The |event_router| must not be
27 // |request_manager| arguments must not be NULL. 27 // NULL.
28 ProvidedFileSystemInterface* CreateProvidedFileSystem( 28 ProvidedFileSystemInterface* CreateProvidedFileSystem(
29 extensions::EventRouter* event_router, 29 extensions::EventRouter* event_router,
30 RequestManager* request_manager,
31 const ProvidedFileSystemInfo& file_system_info) { 30 const ProvidedFileSystemInfo& file_system_info) {
32 DCHECK(event_router); 31 DCHECK(event_router);
33 DCHECK(request_manager); 32 return new ProvidedFileSystem(event_router, file_system_info);
34 return new ProvidedFileSystem(
35 event_router, request_manager, file_system_info);
36 } 33 }
37 34
38 } // namespace 35 } // namespace
39 36
40 Service::Service(Profile* profile) 37 Service::Service(Profile* profile)
41 : profile_(profile), 38 : profile_(profile),
42 file_system_factory_(base::Bind(CreateProvidedFileSystem)), 39 file_system_factory_(base::Bind(CreateProvidedFileSystem)),
43 next_id_(1), 40 next_id_(1),
44 weak_ptr_factory_(this) { 41 weak_ptr_factory_(this) {}
45 AddObserver(&request_manager_);
46 }
47 42
48 Service::~Service() { STLDeleteValues(&file_system_map_); } 43 Service::~Service() {}
hashimoto 2014/04/16 04:14:13 Does this mean file_system_map_ will leak if Shutd
mtomasz 2014/04/16 05:08:10 That's a good point. In tests, it would leak. I th
49 44
50 // static 45 // static
51 Service* Service::Get(content::BrowserContext* context) { 46 Service* Service::Get(content::BrowserContext* context) {
52 return ServiceFactory::Get(context); 47 return ServiceFactory::Get(context);
53 } 48 }
54 49
55 void Service::AddObserver(Observer* observer) { 50 void Service::AddObserver(Observer* observer) {
56 DCHECK(observer); 51 DCHECK(observer);
57 observers_.AddObserver(observer); 52 observers_.AddObserver(observer);
58 } 53 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // file_system_id = 41 109 // file_system_id = 41
115 // mount_point_name = file_system_id = b33f1337-41-5aa5 110 // mount_point_name = file_system_id = b33f1337-41-5aa5
116 // mount_point_path = /provided/b33f1337-41-5aa5 111 // mount_point_path = /provided/b33f1337-41-5aa5
117 ProvidedFileSystemInfo file_system_info( 112 ProvidedFileSystemInfo file_system_info(
118 extension_id, file_system_id, file_system_name, mount_point_path); 113 extension_id, file_system_id, file_system_name, mount_point_path);
119 114
120 // The event router may be NULL for unit tests. 115 // The event router may be NULL for unit tests.
121 extensions::EventRouter* event_router = 116 extensions::EventRouter* event_router =
122 extensions::ExtensionSystem::Get(profile_)->event_router(); 117 extensions::ExtensionSystem::Get(profile_)->event_router();
123 118
124 ProvidedFileSystemInterface* file_system = file_system_factory_.Run( 119 ProvidedFileSystemInterface* file_system =
125 event_router, &request_manager_, file_system_info); 120 file_system_factory_.Run(event_router, file_system_info);
126 DCHECK(file_system); 121 DCHECK(file_system);
127 file_system_map_[file_system_id] = file_system; 122 file_system_map_[file_system_id] = file_system;
128 123
129 FOR_EACH_OBSERVER( 124 FOR_EACH_OBSERVER(
130 Observer, 125 Observer,
131 observers_, 126 observers_,
132 OnProvidedFileSystemMount(file_system_info, base::File::FILE_OK)); 127 OnProvidedFileSystemMount(file_system_info, base::File::FILE_OK));
133 128
134 next_id_++; 129 next_id_++;
135 return file_system_id; 130 return file_system_id;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 file_system_map_.find(file_system_id); 211 file_system_map_.find(file_system_id);
217 if (file_system_it == file_system_map_.end() || 212 if (file_system_it == file_system_map_.end() ||
218 file_system_it->second->GetFileSystemInfo().extension_id() != 213 file_system_it->second->GetFileSystemInfo().extension_id() !=
219 extension_id) { 214 extension_id) {
220 return NULL; 215 return NULL;
221 } 216 }
222 217
223 return file_system_it->second; 218 return file_system_it->second;
224 } 219 }
225 220
226 void Service::Shutdown() { RemoveObserver(&request_manager_); } 221 void Service::Shutdown() { STLDeleteValues(&file_system_map_); }
227 222
228 void Service::OnRequestUnmountStatus( 223 void Service::OnRequestUnmountStatus(
229 const ProvidedFileSystemInfo& file_system_info, 224 const ProvidedFileSystemInfo& file_system_info,
230 base::File::Error error) { 225 base::File::Error error) {
231 // Notify observers about failure in unmounting, since mount() will not be 226 // Notify observers about failure in unmounting, since mount() will not be
232 // called by the provided file system. In case of success mount() will be 227 // called by the provided file system. In case of success mount() will be
233 // invoked, and observers notified, so there is no need to call them now. 228 // invoked, and observers notified, so there is no need to call them now.
234 if (error != base::File::FILE_OK) { 229 if (error != base::File::FILE_OK) {
235 FOR_EACH_OBSERVER(Observer, 230 FOR_EACH_OBSERVER(Observer,
236 observers_, 231 observers_,
237 OnProvidedFileSystemUnmount(file_system_info, error)); 232 OnProvidedFileSystemUnmount(file_system_info, error));
238 } 233 }
239 } 234 }
240 235
241 } // namespace file_system_provider 236 } // namespace file_system_provider
242 } // namespace chromeos 237 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698