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

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

Issue 294073007: [fsp] Let extensions decide about the file system id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 7 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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/files/file.h" 8 #include "base/files/file.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/string_number_conversions.h"
11 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system .h" 12 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system .h"
12 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" 13 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
13 #include "chrome/browser/chromeos/file_system_provider/observer.h" 14 #include "chrome/browser/chromeos/file_system_provider/observer.h"
14 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h" 15 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h"
15 #include "chrome/browser/chromeos/file_system_provider/service.h" 16 #include "chrome/browser/chromeos/file_system_provider/service.h"
16 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" 17 #include "chrome/browser/chromeos/login/users/fake_user_manager.h"
17 #include "chrome/test/base/testing_profile.h" 18 #include "chrome/test/base/testing_profile.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "extensions/browser/extension_registry.h" 20 #include "extensions/browser/extension_registry.h"
20 #include "extensions/common/extension.h" 21 #include "extensions/common/extension.h"
21 #include "extensions/common/manifest_constants.h" 22 #include "extensions/common/manifest_constants.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 #include "webkit/browser/fileapi/external_mount_points.h" 24 #include "webkit/browser/fileapi/external_mount_points.h"
24 25
25 namespace chromeos { 26 namespace chromeos {
26 namespace file_system_provider { 27 namespace file_system_provider {
27 namespace { 28 namespace {
28 29
29 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 30 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
31 const char kFileSystemId[] = "camera/pictures/id !@#$%^&*()_+";
30 const char kFileSystemName[] = "Camera Pictures"; 32 const char kFileSystemName[] = "Camera Pictures";
31 33
32 // Utility observer, logging events from file_system_provider::Service. 34 // Utility observer, logging events from file_system_provider::Service.
33 class LoggingObserver : public Observer { 35 class LoggingObserver : public Observer {
34 public: 36 public:
35 class Event { 37 class Event {
36 public: 38 public:
37 Event(const ProvidedFileSystemInfo& file_system_info, 39 Event(const ProvidedFileSystemInfo& file_system_info,
38 base::File::Error error) 40 base::File::Error error)
39 : file_system_info_(file_system_info), error_(error) {} 41 : file_system_info_(file_system_info), error_(error) {}
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 113 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
112 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 114 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
113 scoped_ptr<Service> file_system_provider_service_; 115 scoped_ptr<Service> file_system_provider_service_;
114 scoped_refptr<extensions::Extension> extension_; 116 scoped_refptr<extensions::Extension> extension_;
115 }; 117 };
116 118
117 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 119 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
118 LoggingObserver observer; 120 LoggingObserver observer;
119 file_system_provider_service_->AddObserver(&observer); 121 file_system_provider_service_->AddObserver(&observer);
120 122
121 int file_system_id = file_system_provider_service_->MountFileSystem( 123 const bool result = file_system_provider_service_->MountFileSystem(
122 kExtensionId, kFileSystemName); 124 kExtensionId, kFileSystemId, kFileSystemName);
125 EXPECT_TRUE(result);
123 126
124 EXPECT_LT(0, file_system_id);
125 ASSERT_EQ(1u, observer.mounts.size()); 127 ASSERT_EQ(1u, observer.mounts.size());
126 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 128 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
127 EXPECT_EQ(1, observer.mounts[0].file_system_info().file_system_id()); 129 EXPECT_EQ(kFileSystemId,
130 observer.mounts[0].file_system_info().file_system_id());
128 base::FilePath expected_mount_path = 131 base::FilePath expected_mount_path =
129 util::GetMountPath(profile_.get(), kExtensionId, file_system_id); 132 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
130 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), 133 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(),
131 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); 134 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe());
132 EXPECT_EQ(kFileSystemName, 135 EXPECT_EQ(kFileSystemName,
133 observer.mounts[0].file_system_info().file_system_name()); 136 observer.mounts[0].file_system_info().file_system_name());
134 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 137 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
135 ASSERT_EQ(0u, observer.unmounts.size()); 138 ASSERT_EQ(0u, observer.unmounts.size());
136 139
137 std::vector<ProvidedFileSystemInfo> file_system_info_list = 140 std::vector<ProvidedFileSystemInfo> file_system_info_list =
138 file_system_provider_service_->GetProvidedFileSystemInfoList(); 141 file_system_provider_service_->GetProvidedFileSystemInfoList();
139 ASSERT_EQ(1u, file_system_info_list.size()); 142 ASSERT_EQ(1u, file_system_info_list.size());
140 143
141 file_system_provider_service_->RemoveObserver(&observer); 144 file_system_provider_service_->RemoveObserver(&observer);
142 } 145 }
143 146
144 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { 147 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) {
145 LoggingObserver observer; 148 LoggingObserver observer;
146 file_system_provider_service_->AddObserver(&observer); 149 file_system_provider_service_->AddObserver(&observer);
147 150
148 int file_system_first_id = file_system_provider_service_->MountFileSystem( 151 const bool result = file_system_provider_service_->MountFileSystem(
149 kExtensionId, kFileSystemName); 152 kExtensionId, kFileSystemId, kFileSystemName);
150 EXPECT_LT(0, file_system_first_id); 153 EXPECT_TRUE(result);
151 154
152 int file_system_second_id = file_system_provider_service_->MountFileSystem( 155 const bool second_result = file_system_provider_service_->MountFileSystem(
153 kExtensionId, kFileSystemName); 156 kExtensionId, kFileSystemId, kFileSystemName);
154 EXPECT_LT(0, file_system_second_id); 157 EXPECT_FALSE(second_result);
155 158
156 EXPECT_NE(file_system_first_id, file_system_second_id);
157 ASSERT_EQ(2u, observer.mounts.size()); 159 ASSERT_EQ(2u, observer.mounts.size());
158 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 160 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
159 EXPECT_EQ(base::File::FILE_OK, observer.mounts[1].error()); 161 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error());
160 162
161 std::vector<ProvidedFileSystemInfo> file_system_info_list = 163 std::vector<ProvidedFileSystemInfo> file_system_info_list =
162 file_system_provider_service_->GetProvidedFileSystemInfoList(); 164 file_system_provider_service_->GetProvidedFileSystemInfoList();
163 ASSERT_EQ(2u, file_system_info_list.size()); 165 ASSERT_EQ(1u, file_system_info_list.size());
164 166
165 file_system_provider_service_->RemoveObserver(&observer); 167 file_system_provider_service_->RemoveObserver(&observer);
166 } 168 }
167 169
168 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { 170 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) {
169 LoggingObserver observer; 171 LoggingObserver observer;
170 file_system_provider_service_->AddObserver(&observer); 172 file_system_provider_service_->AddObserver(&observer);
171 173
172 const size_t kMaxFileSystems = 16; 174 const size_t kMaxFileSystems = 16;
173 for (size_t i = 0; i < kMaxFileSystems; ++i) { 175 for (size_t i = 0; i < kMaxFileSystems; ++i) {
174 int file_system_id = file_system_provider_service_->MountFileSystem( 176 const std::string file_system_id =
175 kExtensionId, kFileSystemName); 177 std::string("test-") + base::IntToString(i);
176 EXPECT_LT(0, file_system_id); 178 const bool result = file_system_provider_service_->MountFileSystem(
179 kExtensionId, file_system_id, kFileSystemName);
180 EXPECT_TRUE(result);
177 } 181 }
178 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); 182 ASSERT_EQ(kMaxFileSystems, observer.mounts.size());
179 183
180 // The next file system is out of limit, and registering it should fail. 184 // The next file system is out of limit, and registering it should fail.
181 int file_system_id = file_system_provider_service_->MountFileSystem( 185 const bool result = file_system_provider_service_->MountFileSystem(
182 kExtensionId, kFileSystemName); 186 kExtensionId, kFileSystemId, kFileSystemName);
183 EXPECT_EQ(0, file_system_id); 187 EXPECT_FALSE(result);
184 188
185 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); 189 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
186 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, 190 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
187 observer.mounts[kMaxFileSystems].error()); 191 observer.mounts[kMaxFileSystems].error());
188 192
189 std::vector<ProvidedFileSystemInfo> file_system_info_list = 193 std::vector<ProvidedFileSystemInfo> file_system_info_list =
190 file_system_provider_service_->GetProvidedFileSystemInfoList(); 194 file_system_provider_service_->GetProvidedFileSystemInfoList();
191 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); 195 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size());
192 196
193 file_system_provider_service_->RemoveObserver(&observer); 197 file_system_provider_service_->RemoveObserver(&observer);
194 } 198 }
195 199
196 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { 200 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) {
197 LoggingObserver observer; 201 LoggingObserver observer;
198 file_system_provider_service_->AddObserver(&observer); 202 file_system_provider_service_->AddObserver(&observer);
199 203
200 int file_system_id = file_system_provider_service_->MountFileSystem( 204 const bool result = file_system_provider_service_->MountFileSystem(
201 kExtensionId, kFileSystemName); 205 kExtensionId, kFileSystemId, kFileSystemName);
202 EXPECT_LT(0, file_system_id); 206 EXPECT_TRUE(result);
203 ASSERT_EQ(1u, observer.mounts.size()); 207 ASSERT_EQ(1u, observer.mounts.size());
204 208
205 const bool result = file_system_provider_service_->UnmountFileSystem( 209 const bool unmount_result = file_system_provider_service_->UnmountFileSystem(
206 kExtensionId, file_system_id); 210 kExtensionId, kFileSystemId);
207 EXPECT_TRUE(result); 211 EXPECT_TRUE(unmount_result);
208 ASSERT_EQ(1u, observer.unmounts.size()); 212 ASSERT_EQ(1u, observer.unmounts.size());
209 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 213 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
210 214
211 EXPECT_EQ(kExtensionId, 215 EXPECT_EQ(kExtensionId,
212 observer.unmounts[0].file_system_info().extension_id()); 216 observer.unmounts[0].file_system_info().extension_id());
213 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id()); 217 EXPECT_EQ(kFileSystemId,
214 base::FilePath expected_mount_path = 218 observer.unmounts[0].file_system_info().file_system_id());
215 util::GetMountPath(profile_.get(), kExtensionId, file_system_id);
216 EXPECT_EQ(
217 expected_mount_path.AsUTF8Unsafe(),
218 observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
219 EXPECT_EQ(kFileSystemName,
220 observer.unmounts[0].file_system_info().file_system_name());
221 219
222 std::vector<ProvidedFileSystemInfo> file_system_info_list = 220 std::vector<ProvidedFileSystemInfo> file_system_info_list =
223 file_system_provider_service_->GetProvidedFileSystemInfoList(); 221 file_system_provider_service_->GetProvidedFileSystemInfoList();
224 ASSERT_EQ(0u, file_system_info_list.size()); 222 ASSERT_EQ(0u, file_system_info_list.size());
225 223
226 file_system_provider_service_->RemoveObserver(&observer); 224 file_system_provider_service_->RemoveObserver(&observer);
227 } 225 }
228 226
229 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { 227 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
230 LoggingObserver observer; 228 LoggingObserver observer;
231 file_system_provider_service_->AddObserver(&observer); 229 file_system_provider_service_->AddObserver(&observer);
232 230
233 int file_system_id = file_system_provider_service_->MountFileSystem( 231 const bool result = file_system_provider_service_->MountFileSystem(
234 kExtensionId, kFileSystemName); 232 kExtensionId, kFileSystemId, kFileSystemName);
235 EXPECT_LT(0, file_system_id); 233 EXPECT_TRUE(result);
236 ASSERT_EQ(1u, observer.mounts.size()); 234 ASSERT_EQ(1u, observer.mounts.size());
237 235
238 // Directly call the observer's method. 236 // Directly call the observer's method.
239 file_system_provider_service_->OnExtensionUnloaded( 237 file_system_provider_service_->OnExtensionUnloaded(
240 profile_.get(), 238 profile_.get(),
241 extension_.get(), 239 extension_.get(),
242 extensions::UnloadedExtensionInfo::REASON_DISABLE); 240 extensions::UnloadedExtensionInfo::REASON_DISABLE);
243 241
244 ASSERT_EQ(1u, observer.unmounts.size()); 242 ASSERT_EQ(1u, observer.unmounts.size());
245 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 243 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
246 244
247 EXPECT_EQ(kExtensionId, 245 EXPECT_EQ(kExtensionId,
248 observer.unmounts[0].file_system_info().extension_id()); 246 observer.unmounts[0].file_system_info().extension_id());
249 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id()); 247 EXPECT_EQ(kFileSystemId,
250 base::FilePath expected_mount_path = 248 observer.unmounts[0].file_system_info().file_system_id());
251 util::GetMountPath(profile_.get(), kExtensionId, file_system_id);
252 EXPECT_EQ(
253 expected_mount_path.AsUTF8Unsafe(),
254 observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
255 EXPECT_EQ(kFileSystemName,
256 observer.unmounts[0].file_system_info().file_system_name());
257 249
258 std::vector<ProvidedFileSystemInfo> file_system_info_list = 250 std::vector<ProvidedFileSystemInfo> file_system_info_list =
259 file_system_provider_service_->GetProvidedFileSystemInfoList(); 251 file_system_provider_service_->GetProvidedFileSystemInfoList();
260 ASSERT_EQ(0u, file_system_info_list.size()); 252 ASSERT_EQ(0u, file_system_info_list.size());
261 253
262 file_system_provider_service_->RemoveObserver(&observer); 254 file_system_provider_service_->RemoveObserver(&observer);
263 } 255 }
264 256
265 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 257 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
266 LoggingObserver observer; 258 LoggingObserver observer;
267 file_system_provider_service_->AddObserver(&observer); 259 file_system_provider_service_->AddObserver(&observer);
268 260
269 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 261 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
270 262
271 int file_system_id = file_system_provider_service_->MountFileSystem( 263 const bool result = file_system_provider_service_->MountFileSystem(
272 kExtensionId, kFileSystemName); 264 kExtensionId, kFileSystemId, kFileSystemName);
273 EXPECT_LT(0, file_system_id); 265 EXPECT_TRUE(result);
274 ASSERT_EQ(1u, observer.mounts.size()); 266 ASSERT_EQ(1u, observer.mounts.size());
275 ASSERT_EQ( 267 ASSERT_EQ(
276 1u, 268 1u,
277 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); 269 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
278 270
279 const bool result = file_system_provider_service_->UnmountFileSystem( 271 const bool unmount_result = file_system_provider_service_->UnmountFileSystem(
280 kWrongExtensionId, file_system_id); 272 kWrongExtensionId, kFileSystemId);
281 EXPECT_FALSE(result); 273 EXPECT_FALSE(unmount_result);
282 ASSERT_EQ(1u, observer.unmounts.size()); 274 ASSERT_EQ(1u, observer.unmounts.size());
283 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); 275 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error());
284 ASSERT_EQ( 276 ASSERT_EQ(
285 1u, 277 1u,
286 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); 278 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
287 279
288 std::vector<ProvidedFileSystemInfo> file_system_info_list = 280 std::vector<ProvidedFileSystemInfo> file_system_info_list =
289 file_system_provider_service_->GetProvidedFileSystemInfoList(); 281 file_system_provider_service_->GetProvidedFileSystemInfoList();
290 ASSERT_EQ(1u, file_system_info_list.size()); 282 ASSERT_EQ(1u, file_system_info_list.size());
291 283
292 file_system_provider_service_->RemoveObserver(&observer); 284 file_system_provider_service_->RemoveObserver(&observer);
293 } 285 }
294 286
295 } // namespace file_system_provider 287 } // namespace file_system_provider
296 } // namespace chromeos 288 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service.cc ('k') | chrome/common/extensions/api/file_browser_private.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698