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

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: 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";
30 const char kFileSystemName[] = "Camera Pictures"; 32 const char kFileSystemName[] = "Camera Pictures";
33 const int kIndex = 1;
31 34
32 // Utility observer, logging events from file_system_provider::Service. 35 // Utility observer, logging events from file_system_provider::Service.
33 class LoggingObserver : public Observer { 36 class LoggingObserver : public Observer {
34 public: 37 public:
35 class Event { 38 class Event {
36 public: 39 public:
37 Event(const ProvidedFileSystemInfo& file_system_info, 40 Event(const ProvidedFileSystemInfo& file_system_info,
38 base::File::Error error) 41 base::File::Error error)
39 : file_system_info_(file_system_info), error_(error) {} 42 : file_system_info_(file_system_info), error_(error) {}
40 ~Event() {} 43 ~Event() {}
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 114 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
112 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 115 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
113 scoped_ptr<Service> file_system_provider_service_; 116 scoped_ptr<Service> file_system_provider_service_;
114 scoped_refptr<extensions::Extension> extension_; 117 scoped_refptr<extensions::Extension> extension_;
115 }; 118 };
116 119
117 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 120 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
118 LoggingObserver observer; 121 LoggingObserver observer;
119 file_system_provider_service_->AddObserver(&observer); 122 file_system_provider_service_->AddObserver(&observer);
120 123
121 int file_system_id = file_system_provider_service_->MountFileSystem( 124 const bool result = file_system_provider_service_->MountFileSystem(
122 kExtensionId, kFileSystemName); 125 kExtensionId, kFileSystemId, kFileSystemName);
126 EXPECT_TRUE(result);
123 127
124 EXPECT_LT(0, file_system_id);
125 ASSERT_EQ(1u, observer.mounts.size()); 128 ASSERT_EQ(1u, observer.mounts.size());
126 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 129 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
127 EXPECT_EQ(1, observer.mounts[0].file_system_info().file_system_id()); 130 EXPECT_EQ(kFileSystemId,
131 observer.mounts[0].file_system_info().file_system_id());
128 base::FilePath expected_mount_path = 132 base::FilePath expected_mount_path =
129 util::GetMountPath(profile_.get(), kExtensionId, file_system_id); 133 util::GetMountPath(profile_.get(), kExtensionId, kIndex);
130 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), 134 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(),
131 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); 135 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe());
132 EXPECT_EQ(kFileSystemName, 136 EXPECT_EQ(kFileSystemName,
133 observer.mounts[0].file_system_info().file_system_name()); 137 observer.mounts[0].file_system_info().file_system_name());
134 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 138 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
135 ASSERT_EQ(0u, observer.unmounts.size()); 139 ASSERT_EQ(0u, observer.unmounts.size());
136 140
137 std::vector<ProvidedFileSystemInfo> file_system_info_list = 141 std::vector<ProvidedFileSystemInfo> file_system_info_list =
138 file_system_provider_service_->GetProvidedFileSystemInfoList(); 142 file_system_provider_service_->GetProvidedFileSystemInfoList();
139 ASSERT_EQ(1u, file_system_info_list.size()); 143 ASSERT_EQ(1u, file_system_info_list.size());
140 144
141 file_system_provider_service_->RemoveObserver(&observer); 145 file_system_provider_service_->RemoveObserver(&observer);
142 } 146 }
143 147
144 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { 148 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) {
145 LoggingObserver observer; 149 LoggingObserver observer;
146 file_system_provider_service_->AddObserver(&observer); 150 file_system_provider_service_->AddObserver(&observer);
147 151
148 int file_system_first_id = file_system_provider_service_->MountFileSystem( 152 const bool result = file_system_provider_service_->MountFileSystem(
149 kExtensionId, kFileSystemName); 153 kExtensionId, kFileSystemId, kFileSystemName);
150 EXPECT_LT(0, file_system_first_id); 154 EXPECT_TRUE(result);
151 155
152 int file_system_second_id = file_system_provider_service_->MountFileSystem( 156 const bool second_result = file_system_provider_service_->MountFileSystem(
153 kExtensionId, kFileSystemName); 157 kExtensionId, kFileSystemId, kFileSystemName);
154 EXPECT_LT(0, file_system_second_id); 158 EXPECT_FALSE(second_result);
155 159
156 EXPECT_NE(file_system_first_id, file_system_second_id);
157 ASSERT_EQ(2u, observer.mounts.size()); 160 ASSERT_EQ(2u, observer.mounts.size());
158 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 161 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
159 EXPECT_EQ(base::File::FILE_OK, observer.mounts[1].error()); 162 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error());
160 163
161 std::vector<ProvidedFileSystemInfo> file_system_info_list = 164 std::vector<ProvidedFileSystemInfo> file_system_info_list =
162 file_system_provider_service_->GetProvidedFileSystemInfoList(); 165 file_system_provider_service_->GetProvidedFileSystemInfoList();
163 ASSERT_EQ(2u, file_system_info_list.size()); 166 ASSERT_EQ(1u, file_system_info_list.size());
164 167
165 file_system_provider_service_->RemoveObserver(&observer); 168 file_system_provider_service_->RemoveObserver(&observer);
166 } 169 }
167 170
168 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { 171 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) {
169 LoggingObserver observer; 172 LoggingObserver observer;
170 file_system_provider_service_->AddObserver(&observer); 173 file_system_provider_service_->AddObserver(&observer);
171 174
172 const size_t kMaxFileSystems = 16; 175 const size_t kMaxFileSystems = 16;
173 for (size_t i = 0; i < kMaxFileSystems; ++i) { 176 for (size_t i = 0; i < kMaxFileSystems; ++i) {
174 int file_system_id = file_system_provider_service_->MountFileSystem( 177 const std::string file_system_id =
175 kExtensionId, kFileSystemName); 178 std::string("test-") + base::IntToString(i);
176 EXPECT_LT(0, file_system_id); 179 const bool result = file_system_provider_service_->MountFileSystem(
180 kExtensionId, file_system_id, kFileSystemName);
181 EXPECT_TRUE(result);
177 } 182 }
178 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); 183 ASSERT_EQ(kMaxFileSystems, observer.mounts.size());
179 184
180 // The next file system is out of limit, and registering it should fail. 185 // The next file system is out of limit, and registering it should fail.
181 int file_system_id = file_system_provider_service_->MountFileSystem( 186 const bool result = file_system_provider_service_->MountFileSystem(
182 kExtensionId, kFileSystemName); 187 kExtensionId, kFileSystemId, kFileSystemName);
183 EXPECT_EQ(0, file_system_id); 188 EXPECT_FALSE(result);
184 189
185 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); 190 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
186 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, 191 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
187 observer.mounts[kMaxFileSystems].error()); 192 observer.mounts[kMaxFileSystems].error());
188 193
189 std::vector<ProvidedFileSystemInfo> file_system_info_list = 194 std::vector<ProvidedFileSystemInfo> file_system_info_list =
190 file_system_provider_service_->GetProvidedFileSystemInfoList(); 195 file_system_provider_service_->GetProvidedFileSystemInfoList();
191 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); 196 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size());
192 197
193 file_system_provider_service_->RemoveObserver(&observer); 198 file_system_provider_service_->RemoveObserver(&observer);
194 } 199 }
195 200
196 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { 201 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) {
197 LoggingObserver observer; 202 LoggingObserver observer;
198 file_system_provider_service_->AddObserver(&observer); 203 file_system_provider_service_->AddObserver(&observer);
199 204
200 int file_system_id = file_system_provider_service_->MountFileSystem( 205 const bool result = file_system_provider_service_->MountFileSystem(
201 kExtensionId, kFileSystemName); 206 kExtensionId, kFileSystemId, kFileSystemName);
202 EXPECT_LT(0, file_system_id); 207 EXPECT_TRUE(result);
203 ASSERT_EQ(1u, observer.mounts.size()); 208 ASSERT_EQ(1u, observer.mounts.size());
204 209
205 const bool result = file_system_provider_service_->UnmountFileSystem( 210 const bool unmount_result = file_system_provider_service_->UnmountFileSystem(
206 kExtensionId, file_system_id); 211 kExtensionId, kFileSystemId);
207 EXPECT_TRUE(result); 212 EXPECT_TRUE(unmount_result);
208 ASSERT_EQ(1u, observer.unmounts.size()); 213 ASSERT_EQ(1u, observer.unmounts.size());
209 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 214 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
210 215
211 EXPECT_EQ(kExtensionId, 216 EXPECT_EQ(kExtensionId,
212 observer.unmounts[0].file_system_info().extension_id()); 217 observer.unmounts[0].file_system_info().extension_id());
213 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id()); 218 EXPECT_EQ(kFileSystemId,
214 base::FilePath expected_mount_path = 219 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 220
222 std::vector<ProvidedFileSystemInfo> file_system_info_list = 221 std::vector<ProvidedFileSystemInfo> file_system_info_list =
223 file_system_provider_service_->GetProvidedFileSystemInfoList(); 222 file_system_provider_service_->GetProvidedFileSystemInfoList();
224 ASSERT_EQ(0u, file_system_info_list.size()); 223 ASSERT_EQ(0u, file_system_info_list.size());
225 224
226 file_system_provider_service_->RemoveObserver(&observer); 225 file_system_provider_service_->RemoveObserver(&observer);
227 } 226 }
228 227
229 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { 228 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
230 LoggingObserver observer; 229 LoggingObserver observer;
231 file_system_provider_service_->AddObserver(&observer); 230 file_system_provider_service_->AddObserver(&observer);
232 231
233 int file_system_id = file_system_provider_service_->MountFileSystem( 232 const bool result = file_system_provider_service_->MountFileSystem(
234 kExtensionId, kFileSystemName); 233 kExtensionId, kFileSystemId, kFileSystemName);
235 EXPECT_LT(0, file_system_id); 234 EXPECT_TRUE(result);
236 ASSERT_EQ(1u, observer.mounts.size()); 235 ASSERT_EQ(1u, observer.mounts.size());
237 236
238 // Directly call the observer's method. 237 // Directly call the observer's method.
239 file_system_provider_service_->OnExtensionUnloaded( 238 file_system_provider_service_->OnExtensionUnloaded(
240 profile_.get(), 239 profile_.get(),
241 extension_.get(), 240 extension_.get(),
242 extensions::UnloadedExtensionInfo::REASON_DISABLE); 241 extensions::UnloadedExtensionInfo::REASON_DISABLE);
243 242
244 ASSERT_EQ(1u, observer.unmounts.size()); 243 ASSERT_EQ(1u, observer.unmounts.size());
245 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 244 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
246 245
247 EXPECT_EQ(kExtensionId, 246 EXPECT_EQ(kExtensionId,
248 observer.unmounts[0].file_system_info().extension_id()); 247 observer.unmounts[0].file_system_info().extension_id());
249 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id()); 248 EXPECT_EQ(kFileSystemId,
250 base::FilePath expected_mount_path = 249 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 250
258 std::vector<ProvidedFileSystemInfo> file_system_info_list = 251 std::vector<ProvidedFileSystemInfo> file_system_info_list =
259 file_system_provider_service_->GetProvidedFileSystemInfoList(); 252 file_system_provider_service_->GetProvidedFileSystemInfoList();
260 ASSERT_EQ(0u, file_system_info_list.size()); 253 ASSERT_EQ(0u, file_system_info_list.size());
261 254
262 file_system_provider_service_->RemoveObserver(&observer); 255 file_system_provider_service_->RemoveObserver(&observer);
263 } 256 }
264 257
265 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 258 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
266 LoggingObserver observer; 259 LoggingObserver observer;
267 file_system_provider_service_->AddObserver(&observer); 260 file_system_provider_service_->AddObserver(&observer);
268 261
269 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 262 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
270 263
271 int file_system_id = file_system_provider_service_->MountFileSystem( 264 const bool result = file_system_provider_service_->MountFileSystem(
272 kExtensionId, kFileSystemName); 265 kExtensionId, kFileSystemId, kFileSystemName);
273 EXPECT_LT(0, file_system_id); 266 EXPECT_TRUE(result);
274 ASSERT_EQ(1u, observer.mounts.size()); 267 ASSERT_EQ(1u, observer.mounts.size());
275 ASSERT_EQ( 268 ASSERT_EQ(
276 1u, 269 1u,
277 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); 270 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
278 271
279 const bool result = file_system_provider_service_->UnmountFileSystem( 272 const bool unmount_result = file_system_provider_service_->UnmountFileSystem(
280 kWrongExtensionId, file_system_id); 273 kWrongExtensionId, kFileSystemId);
281 EXPECT_FALSE(result); 274 EXPECT_FALSE(unmount_result);
282 ASSERT_EQ(1u, observer.unmounts.size()); 275 ASSERT_EQ(1u, observer.unmounts.size());
283 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); 276 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error());
284 ASSERT_EQ( 277 ASSERT_EQ(
285 1u, 278 1u,
286 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); 279 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
287 280
288 std::vector<ProvidedFileSystemInfo> file_system_info_list = 281 std::vector<ProvidedFileSystemInfo> file_system_info_list =
289 file_system_provider_service_->GetProvidedFileSystemInfoList(); 282 file_system_provider_service_->GetProvidedFileSystemInfoList();
290 ASSERT_EQ(1u, file_system_info_list.size()); 283 ASSERT_EQ(1u, file_system_info_list.size());
291 284
292 file_system_provider_service_->RemoveObserver(&observer); 285 file_system_provider_service_->RemoveObserver(&observer);
293 } 286 }
294 287
295 } // namespace file_system_provider 288 } // namespace file_system_provider
296 } // namespace chromeos 289 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698