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

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

Issue 389243002: Revert 282900 "Revert 282890 "[fsp] Add an option for mounting i..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 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 | 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/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/prefs/scoped_user_pref_update.h" 9 #include "base/prefs/scoped_user_pref_update.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 21 matching lines...) Expand all
32 Profile* profile, 32 Profile* profile,
33 const ProvidedFileSystemInfo& file_system_info) { 33 const ProvidedFileSystemInfo& file_system_info) {
34 DCHECK(profile); 34 DCHECK(profile);
35 return new ProvidedFileSystem(profile, file_system_info); 35 return new ProvidedFileSystem(profile, file_system_info);
36 } 36 }
37 37
38 } // namespace 38 } // namespace
39 39
40 const char kPrefKeyFileSystemId[] = "file-system-id"; 40 const char kPrefKeyFileSystemId[] = "file-system-id";
41 const char kPrefKeyDisplayName[] = "display-name"; 41 const char kPrefKeyDisplayName[] = "display-name";
42 const char kPrefKeyWritable[] = "writable";
42 43
43 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { 44 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
44 registry->RegisterDictionaryPref( 45 registry->RegisterDictionaryPref(
45 prefs::kFileSystemProviderMounted, 46 prefs::kFileSystemProviderMounted,
46 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 47 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
47 } 48 }
48 49
49 Service::Service(Profile* profile, 50 Service::Service(Profile* profile,
50 extensions::ExtensionRegistry* extension_registry) 51 extensions::ExtensionRegistry* extension_registry)
51 : profile_(profile), 52 : profile_(profile),
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } 95 }
95 96
96 void Service::SetFileSystemFactoryForTesting( 97 void Service::SetFileSystemFactoryForTesting(
97 const FileSystemFactoryCallback& factory_callback) { 98 const FileSystemFactoryCallback& factory_callback) {
98 DCHECK(!factory_callback.is_null()); 99 DCHECK(!factory_callback.is_null());
99 file_system_factory_ = factory_callback; 100 file_system_factory_ = factory_callback;
100 } 101 }
101 102
102 bool Service::MountFileSystem(const std::string& extension_id, 103 bool Service::MountFileSystem(const std::string& extension_id,
103 const std::string& file_system_id, 104 const std::string& file_system_id,
104 const std::string& display_name) { 105 const std::string& display_name,
106 bool writable) {
105 DCHECK(thread_checker_.CalledOnValidThread()); 107 DCHECK(thread_checker_.CalledOnValidThread());
106 108
107 // If already exists a file system provided by the same extension with this 109 // If already exists a file system provided by the same extension with this
108 // id, then abort. 110 // id, then abort.
109 if (GetProvidedFileSystem(extension_id, file_system_id)) { 111 if (GetProvidedFileSystem(extension_id, file_system_id)) {
110 FOR_EACH_OBSERVER(Observer, 112 FOR_EACH_OBSERVER(Observer,
111 observers_, 113 observers_,
112 OnProvidedFileSystemMount(ProvidedFileSystemInfo(), 114 OnProvidedFileSystemMount(ProvidedFileSystemInfo(),
113 base::File::FILE_ERROR_EXISTS)); 115 base::File::FILE_ERROR_EXISTS));
114 return false; 116 return false;
(...skipping 27 matching lines...) Expand all
142 Observer, 144 Observer,
143 observers_, 145 observers_,
144 OnProvidedFileSystemMount(ProvidedFileSystemInfo(), 146 OnProvidedFileSystemMount(ProvidedFileSystemInfo(),
145 base::File::FILE_ERROR_INVALID_OPERATION)); 147 base::File::FILE_ERROR_INVALID_OPERATION));
146 return false; 148 return false;
147 } 149 }
148 150
149 // Store the file system descriptor. Use the mount point name as the file 151 // Store the file system descriptor. Use the mount point name as the file
150 // system provider file system id. 152 // system provider file system id.
151 // Examples: 153 // Examples:
152 // file_system_id = 41 154 // file_system_id = hello_world
153 // mount_point_name = b33f1337-41-5aa5 155 // mount_point_name = b33f1337-hello_world-5aa5
154 // mount_path = /provided/b33f1337-41-5aa5 156 // writable = false
157 // mount_path = /provided/b33f1337-hello_world-5aa5
155 ProvidedFileSystemInfo file_system_info( 158 ProvidedFileSystemInfo file_system_info(
156 extension_id, file_system_id, display_name, mount_path); 159 extension_id, file_system_id, display_name, writable, mount_path);
157 160
158 ProvidedFileSystemInterface* file_system = 161 ProvidedFileSystemInterface* file_system =
159 file_system_factory_.Run(profile_, file_system_info); 162 file_system_factory_.Run(profile_, file_system_info);
160 DCHECK(file_system); 163 DCHECK(file_system);
161 file_system_map_[FileSystemKey(extension_id, file_system_id)] = file_system; 164 file_system_map_[FileSystemKey(extension_id, file_system_id)] = file_system;
162 mount_point_name_to_key_map_[mount_point_name] = 165 mount_point_name_to_key_map_[mount_point_name] =
163 FileSystemKey(extension_id, file_system_id); 166 FileSystemKey(extension_id, file_system_id);
164 RememberFileSystem(file_system_info); 167 RememberFileSystem(file_system_info);
165 168
166 FOR_EACH_OBSERVER( 169 FOR_EACH_OBSERVER(
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 } 327 }
325 } 328 }
326 329
327 void Service::RememberFileSystem( 330 void Service::RememberFileSystem(
328 const ProvidedFileSystemInfo& file_system_info) { 331 const ProvidedFileSystemInfo& file_system_info) {
329 base::DictionaryValue* file_system = new base::DictionaryValue(); 332 base::DictionaryValue* file_system = new base::DictionaryValue();
330 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, 333 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId,
331 file_system_info.file_system_id()); 334 file_system_info.file_system_id());
332 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, 335 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName,
333 file_system_info.display_name()); 336 file_system_info.display_name());
337 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable,
338 file_system_info.writable());
334 339
335 PrefService* const pref_service = profile_->GetPrefs(); 340 PrefService* const pref_service = profile_->GetPrefs();
336 DCHECK(pref_service); 341 DCHECK(pref_service);
337 342
338 DictionaryPrefUpdate dict_update(pref_service, 343 DictionaryPrefUpdate dict_update(pref_service,
339 prefs::kFileSystemProviderMounted); 344 prefs::kFileSystemProviderMounted);
340 345
341 base::DictionaryValue* file_systems_per_extension = NULL; 346 base::DictionaryValue* file_systems_per_extension = NULL;
342 if (!dict_update->GetDictionaryWithoutPathExpansion( 347 if (!dict_update->GetDictionaryWithoutPathExpansion(
343 file_system_info.extension_id(), &file_systems_per_extension)) { 348 file_system_info.extension_id(), &file_systems_per_extension)) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 !it.IsAtEnd(); 395 !it.IsAtEnd();
391 it.Advance()) { 396 it.Advance()) {
392 const base::Value* file_system_value = NULL; 397 const base::Value* file_system_value = NULL;
393 const base::DictionaryValue* file_system = NULL; 398 const base::DictionaryValue* file_system = NULL;
394 file_systems_per_extension_copy->GetWithoutPathExpansion( 399 file_systems_per_extension_copy->GetWithoutPathExpansion(
395 it.key(), &file_system_value); 400 it.key(), &file_system_value);
396 DCHECK(file_system_value); 401 DCHECK(file_system_value);
397 402
398 std::string file_system_id; 403 std::string file_system_id;
399 std::string display_name; 404 std::string display_name;
400 if (file_system_value->GetAsDictionary(&file_system)) { 405 bool writable;
401 file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId,
402 &file_system_id);
403 file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName,
404 &display_name);
405 }
406 406
407 if (file_system_id.empty() || display_name.empty()) { 407 if (!file_system_value->GetAsDictionary(&file_system) ||
408 !file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId,
409 &file_system_id) ||
410 !file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName,
411 &display_name) ||
412 !file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable,
413 &writable) ||
414 file_system_id.empty() || display_name.empty()) {
408 LOG(ERROR) 415 LOG(ERROR)
409 << "Malformed provided file system information in preferences."; 416 << "Malformed provided file system information in preferences.";
410 continue; 417 continue;
411 } 418 }
412 419
413 const bool result = 420 const bool result =
414 MountFileSystem(extension_id, file_system_id, display_name); 421 MountFileSystem(extension_id, file_system_id, display_name, writable);
415 if (!result) { 422 if (!result) {
416 LOG(ERROR) << "Failed to restore a provided file system from " 423 LOG(ERROR) << "Failed to restore a provided file system from "
417 << "preferences: " << extension_id << ", " << file_system_id 424 << "preferences: " << extension_id << ", " << file_system_id
418 << ", " << display_name << "."; 425 << ", " << display_name << ".";
419 // Since remounting of the file system failed, then remove it from 426 // Since remounting of the file system failed, then remove it from
420 // preferences to avoid remounting it over and over again with a failure. 427 // preferences to avoid remounting it over and over again with a failure.
421 ForgetFileSystem(extension_id, file_system_id); 428 ForgetFileSystem(extension_id, file_system_id);
422 } 429 }
423 } 430 }
424 } 431 }
425 432
426 } // namespace file_system_provider 433 } // namespace file_system_provider
427 } // namespace chromeos 434 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698