Index: chrome/browser/chromeos/file_system_provider/provided_file_system.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/provided_file_system.cc b/chrome/browser/chromeos/file_system_provider/provided_file_system.cc |
index bd248e7a657d2c152b49dbe77ee6c2ac4da704d9..7dc8189caa07e345d79a2f6c7f1ca52be03fa036 100644 |
--- a/chrome/browser/chromeos/file_system_provider/provided_file_system.cc |
+++ b/chrome/browser/chromeos/file_system_provider/provided_file_system.cc |
@@ -8,6 +8,7 @@ |
#include "base/files/file.h" |
#include "base/trace_event/trace_event.h" |
+#include "chrome/browser/chromeos/file_system_provider/file_system_plugin/plugin_operation_router.h" |
#include "chrome/browser/chromeos/file_system_provider/notification_manager.h" |
#include "chrome/browser/chromeos/file_system_provider/operations/abort.h" |
#include "chrome/browser/chromeos/file_system_provider/operations/add_watcher.h" |
@@ -37,6 +38,17 @@ class IOBuffer; |
namespace chromeos { |
namespace file_system_provider { |
+ |
+ |
+typename ExtensionDestination::EventRouterType* |
+ExtensionDestination::Get(Profile *profile) { |
+ return extensions::EventRouter::Get(profile); |
+} |
+ |
+PluginDestination::EventRouterType* PluginDestination::Get(Profile *) { |
+ return chromeos::file_system_provider::PluginOperationRouter::GetInstance(); |
+} |
+ |
namespace { |
// Discards the result of Abort() when called from the destructor. |
@@ -71,8 +83,8 @@ AutoUpdater::~AutoUpdater() { |
else if (pending_callbacks_) |
LOG(ERROR) << "Not all callbacks called. This may happen on shutdown."; |
} |
- |
-struct ProvidedFileSystem::AddWatcherInQueueArgs { |
+template <class DestinationPolicy> |
+struct ProvidedFileSystem<DestinationPolicy>::AddWatcherInQueueArgs { |
AddWatcherInQueueArgs(size_t token, |
const GURL& origin, |
const base::FilePath& entry_path, |
@@ -99,7 +111,8 @@ struct ProvidedFileSystem::AddWatcherInQueueArgs { |
const storage::WatcherManager::NotificationCallback notification_callback; |
}; |
-struct ProvidedFileSystem::NotifyInQueueArgs { |
+template <class DestinationPolicy> |
+struct ProvidedFileSystem<DestinationPolicy>::NotifyInQueueArgs { |
NotifyInQueueArgs(size_t token, |
const base::FilePath& entry_path, |
bool recursive, |
@@ -128,11 +141,12 @@ struct ProvidedFileSystem::NotifyInQueueArgs { |
DISALLOW_COPY_AND_ASSIGN(NotifyInQueueArgs); |
}; |
-ProvidedFileSystem::ProvidedFileSystem( |
+template <class DestinationPolicy> |
+ProvidedFileSystem<DestinationPolicy>::ProvidedFileSystem( |
Profile* profile, |
const ProvidedFileSystemInfo& file_system_info) |
: profile_(profile), |
- event_router_(extensions::EventRouter::Get(profile)), // May be NULL. |
+ event_router_(DestinationPolicy::Get(profile)), // May be NULL. |
file_system_info_(file_system_info), |
notification_manager_( |
new NotificationManager(profile_, file_system_info_)), |
@@ -142,66 +156,72 @@ ProvidedFileSystem::ProvidedFileSystem( |
watcher_queue_(1), |
weak_ptr_factory_(this) { |
} |
- |
-ProvidedFileSystem::~ProvidedFileSystem() { |
+template <class DestinationPolicy> |
+ProvidedFileSystem<DestinationPolicy>::~ProvidedFileSystem() { |
const std::vector<int> request_ids = request_manager_->GetActiveRequestIds(); |
for (size_t i = 0; i < request_ids.size(); ++i) { |
Abort(request_ids[i]); |
} |
} |
- |
-void ProvidedFileSystem::SetEventRouterForTesting( |
- extensions::EventRouter* event_router) { |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::SetEventRouterForTesting( |
+ typename DestinationPolicy::EventRouterType* event_router) { |
event_router_ = event_router; |
} |
-void ProvidedFileSystem::SetNotificationManagerForTesting( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::SetNotificationManagerForTesting( |
scoped_ptr<NotificationManagerInterface> notification_manager) { |
notification_manager_ = notification_manager.Pass(); |
request_manager_.reset(new RequestManager( |
profile_, file_system_info_.extension_id(), notification_manager_.get())); |
} |
-AbortCallback ProvidedFileSystem::RequestUnmount( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::RequestUnmount( |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- REQUEST_UNMOUNT, |
- scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::Unmount(event_router_, file_system_info_, callback))); |
+ REQUEST_UNMOUNT, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::Unmount<DestinationPolicy>( |
+ event_router_, file_system_info_, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::GetMetadata( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::GetMetadata( |
const base::FilePath& entry_path, |
MetadataFieldMask fields, |
const GetMetadataCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
GET_METADATA, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::GetMetadata( |
- event_router_, file_system_info_, entry_path, fields, callback))); |
+ scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::GetMetadata<DestinationPolicy>( |
+ event_router_, file_system_info_, |
+ entry_path, fields, callback))); |
if (!request_id) { |
callback.Run(make_scoped_ptr<EntryMetadata>(NULL), |
base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::ReadDirectory( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::ReadDirectory( |
const base::FilePath& directory_path, |
const storage::AsyncFileUtil::ReadDirectoryCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
READ_DIRECTORY, |
scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::ReadDirectory( |
+ new operations::ReadDirectory<DestinationPolicy>( |
event_router_, file_system_info_, directory_path, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY, |
@@ -210,11 +230,12 @@ AbortCallback ProvidedFileSystem::ReadDirectory( |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::ReadFile( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::ReadFile( |
int file_handle, |
net::IOBuffer* buffer, |
int64 offset, |
@@ -223,15 +244,10 @@ AbortCallback ProvidedFileSystem::ReadFile( |
TRACE_EVENT1( |
"file_system_provider", "ProvidedFileSystem::ReadFile", "length", length); |
const int request_id = request_manager_->CreateRequest( |
- READ_FILE, |
- make_scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::ReadFile(event_router_, |
- file_system_info_, |
- file_handle, |
- buffer, |
- offset, |
- length, |
- callback))); |
+ READ_FILE, make_scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::ReadFile<DestinationPolicy>( |
+ event_router_, file_system_info_, file_handle, buffer, |
+ offset, length, callback))); |
if (!request_id) { |
callback.Run(0 /* chunk_length */, |
false /* has_more */, |
@@ -239,123 +255,131 @@ AbortCallback ProvidedFileSystem::ReadFile( |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::OpenFile(const base::FilePath& file_path, |
- OpenFileMode mode, |
- const OpenFileCallback& callback) { |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::OpenFile( |
+ const base::FilePath& file_path, |
+ OpenFileMode mode, |
+ const OpenFileCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- OPEN_FILE, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::OpenFile( |
- event_router_, file_system_info_, file_path, mode, |
- base::Bind(&ProvidedFileSystem::OnOpenFileCompleted, |
- weak_ptr_factory_.GetWeakPtr(), file_path, mode, |
- callback)))); |
+ OPEN_FILE, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::OpenFile<DestinationPolicy>( |
+ event_router_, file_system_info_, file_path, mode, |
+ base::Bind(&ProvidedFileSystem::OnOpenFileCompleted, |
+ weak_ptr_factory_.GetWeakPtr(), file_path, |
+ mode, callback)))); |
if (!request_id) { |
callback.Run(0 /* file_handle */, base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::CloseFile( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::CloseFile( |
int file_handle, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
CLOSE_FILE, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::CloseFile( |
- event_router_, file_system_info_, file_handle, |
- base::Bind(&ProvidedFileSystem::OnCloseFileCompleted, |
- weak_ptr_factory_.GetWeakPtr(), file_handle, callback)))); |
+ scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::CloseFile<DestinationPolicy>( |
+ event_router_, file_system_info_, file_handle, |
+ base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>::OnCloseFileCompleted, |
+ weak_ptr_factory_.GetWeakPtr(), file_handle, |
+ callback)))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::CreateDirectory( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::CreateDirectory( |
const base::FilePath& directory_path, |
bool recursive, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- CREATE_DIRECTORY, |
- scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::CreateDirectory(event_router_, |
- file_system_info_, |
- directory_path, |
- recursive, |
- callback))); |
+ CREATE_DIRECTORY, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::CreateDirectory<DestinationPolicy>( |
+ event_router_, file_system_info_, |
+ directory_path, recursive, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::DeleteEntry( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::DeleteEntry( |
const base::FilePath& entry_path, |
bool recursive, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- DELETE_ENTRY, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::DeleteEntry( |
- event_router_, file_system_info_, entry_path, recursive, callback))); |
+ DELETE_ENTRY, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::DeleteEntry<DestinationPolicy>( |
+ event_router_, file_system_info_, entry_path, |
+ recursive, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::CreateFile( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::CreateFile( |
const base::FilePath& file_path, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
CREATE_FILE, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::CreateFile( |
- event_router_, file_system_info_, file_path, callback))); |
+ scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::CreateFile<DestinationPolicy>( |
+ event_router_, file_system_info_, |
+ file_path, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::CopyEntry( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::CopyEntry( |
const base::FilePath& source_path, |
const base::FilePath& target_path, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- COPY_ENTRY, |
- scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::CopyEntry(event_router_, |
- file_system_info_, |
- source_path, |
- target_path, |
- callback))); |
+ COPY_ENTRY, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::CopyEntry<DestinationPolicy>( |
+ event_router_, file_system_info_, source_path, |
+ target_path, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::WriteFile( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::WriteFile( |
int file_handle, |
net::IOBuffer* buffer, |
int64 offset, |
@@ -368,61 +392,59 @@ AbortCallback ProvidedFileSystem::WriteFile( |
const int request_id = request_manager_->CreateRequest( |
WRITE_FILE, |
make_scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::WriteFile(event_router_, |
- file_system_info_, |
- file_handle, |
- make_scoped_refptr(buffer), |
- offset, |
- length, |
- callback))); |
+ new operations::WriteFile<DestinationPolicy>( |
+ event_router_, file_system_info_, file_handle, |
+ make_scoped_refptr(buffer), offset, length, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::MoveEntry( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::MoveEntry( |
const base::FilePath& source_path, |
const base::FilePath& target_path, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- MOVE_ENTRY, |
- scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::MoveEntry(event_router_, |
- file_system_info_, |
- source_path, |
- target_path, |
- callback))); |
+ MOVE_ENTRY, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::MoveEntry<DestinationPolicy>( |
+ event_router_, file_system_info_, source_path, |
+ target_path, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::Truncate( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::Truncate( |
const base::FilePath& file_path, |
int64 length, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
TRUNCATE, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::Truncate( |
- event_router_, file_system_info_, file_path, length, callback))); |
+ scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::Truncate<DestinationPolicy>( |
+ event_router_, file_system_info_, |
+ file_path, length, callback))); |
if (!request_id) { |
callback.Run(base::File::FILE_ERROR_SECURITY); |
return AbortCallback(); |
} |
- return base::Bind( |
- &ProvidedFileSystem::Abort, weak_ptr_factory_.GetWeakPtr(), request_id); |
+ return base::Bind(&ProvidedFileSystem<DestinationPolicy>::Abort, |
+ weak_ptr_factory_.GetWeakPtr(), request_id); |
} |
-AbortCallback ProvidedFileSystem::AddWatcher( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::AddWatcher( |
const GURL& origin, |
const base::FilePath& entry_path, |
bool recursive, |
@@ -432,53 +454,67 @@ AbortCallback ProvidedFileSystem::AddWatcher( |
notification_callback) { |
const size_t token = watcher_queue_.NewToken(); |
watcher_queue_.Enqueue( |
- token, base::Bind(&ProvidedFileSystem::AddWatcherInQueue, |
- base::Unretained(this), // Outlived by the queue. |
- AddWatcherInQueueArgs(token, origin, entry_path, |
- recursive, persistent, callback, |
- notification_callback))); |
+ token, base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>::AddWatcherInQueue, |
+ base::Unretained(this), // Outlived by the queue. |
+ AddWatcherInQueueArgs(token, origin, entry_path, |
+ recursive, persistent, callback, |
+ notification_callback))); |
return AbortCallback(); |
} |
-void ProvidedFileSystem::RemoveWatcher( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::RemoveWatcher( |
const GURL& origin, |
const base::FilePath& entry_path, |
bool recursive, |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const size_t token = watcher_queue_.NewToken(); |
watcher_queue_.Enqueue( |
- token, base::Bind(&ProvidedFileSystem::RemoveWatcherInQueue, |
- base::Unretained(this), // Outlived by the queue. |
- token, origin, entry_path, recursive, callback)); |
+ token, base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>::RemoveWatcherInQueue, |
+ base::Unretained(this), // Outlived by the queue. |
+ token, origin, entry_path, recursive, callback)); |
} |
-const ProvidedFileSystemInfo& ProvidedFileSystem::GetFileSystemInfo() const { |
+template <class DestinationPolicy> |
+const ProvidedFileSystemInfo& |
+ProvidedFileSystem<DestinationPolicy>::GetFileSystemInfo() const { |
return file_system_info_; |
} |
-RequestManager* ProvidedFileSystem::GetRequestManager() { |
+template <class DestinationPolicy> |
+RequestManager* ProvidedFileSystem<DestinationPolicy>::GetRequestManager() { |
return request_manager_.get(); |
} |
-Watchers* ProvidedFileSystem::GetWatchers() { |
+template <class DestinationPolicy> |
+Watchers* ProvidedFileSystem<DestinationPolicy>::GetWatchers() { |
return &watchers_; |
} |
-const OpenedFiles& ProvidedFileSystem::GetOpenedFiles() const { |
+template <class DestinationPolicy> |
+const OpenedFiles& |
+ProvidedFileSystem<DestinationPolicy>::GetOpenedFiles() const { |
return opened_files_; |
} |
-void ProvidedFileSystem::AddObserver(ProvidedFileSystemObserver* observer) { |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::AddObserver( |
+ ProvidedFileSystemObserver* observer) { |
DCHECK(observer); |
observers_.AddObserver(observer); |
} |
-void ProvidedFileSystem::RemoveObserver(ProvidedFileSystemObserver* observer) { |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::RemoveObserver( |
+ ProvidedFileSystemObserver* observer) { |
DCHECK(observer); |
observers_.RemoveObserver(observer); |
} |
-void ProvidedFileSystem::Notify( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::Notify( |
const base::FilePath& entry_path, |
bool recursive, |
storage::WatcherManager::ChangeType change_type, |
@@ -487,37 +523,40 @@ void ProvidedFileSystem::Notify( |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const size_t token = watcher_queue_.NewToken(); |
watcher_queue_.Enqueue( |
- token, base::Bind(&ProvidedFileSystem::NotifyInQueue, |
+ token, base::Bind(&ProvidedFileSystem<DestinationPolicy>::NotifyInQueue, |
base::Unretained(this), // Outlived by the queue. |
base::Passed(make_scoped_ptr(new NotifyInQueueArgs( |
token, entry_path, recursive, change_type, |
changes.Pass(), tag, callback))))); |
} |
-void ProvidedFileSystem::Configure( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::Configure( |
const storage::AsyncFileUtil::StatusCallback& callback) { |
const int request_id = request_manager_->CreateRequest( |
- CONFIGURE, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::Configure( |
- event_router_, file_system_info_, callback))); |
+ CONFIGURE, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::Configure<DestinationPolicy>( |
+ event_router_, file_system_info_, callback))); |
if (!request_id) |
callback.Run(base::File::FILE_ERROR_SECURITY); |
} |
-void ProvidedFileSystem::Abort(int operation_request_id) { |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::Abort(int operation_request_id) { |
request_manager_->RejectRequest(operation_request_id, |
make_scoped_ptr(new RequestValue()), |
base::File::FILE_ERROR_ABORT); |
if (!request_manager_->CreateRequest( |
- ABORT, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::Abort( |
- event_router_, file_system_info_, operation_request_id, |
- base::Bind(&EmptyStatusCallback))))) { |
+ ABORT, scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::Abort<DestinationPolicy>( |
+ event_router_, file_system_info_, operation_request_id, |
+ base::Bind(&EmptyStatusCallback))))) { |
LOG(ERROR) << "Failed to create an abort request."; |
} |
} |
-AbortCallback ProvidedFileSystem::AddWatcherInQueue( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::AddWatcherInQueue( |
const AddWatcherInQueueArgs& args) { |
if (args.persistent && (!file_system_info_.supports_notify_tag() || |
!args.notification_callback.is_null())) { |
@@ -547,12 +586,14 @@ AbortCallback ProvidedFileSystem::AddWatcherInQueue( |
const int request_id = request_manager_->CreateRequest( |
ADD_WATCHER, |
- scoped_ptr<RequestManager::HandlerInterface>(new operations::AddWatcher( |
- event_router_, file_system_info_, args.entry_path, args.recursive, |
- base::Bind(&ProvidedFileSystem::OnAddWatcherInQueueCompleted, |
- weak_ptr_factory_.GetWeakPtr(), args.token, |
- args.entry_path, args.recursive, subscriber, |
- args.callback)))); |
+ scoped_ptr<RequestManager::HandlerInterface>( |
+ new operations::AddWatcher<DestinationPolicy>( |
+ event_router_, file_system_info_, args.entry_path, args.recursive, |
+ base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>:: |
+ OnAddWatcherInQueueCompleted, |
+ weak_ptr_factory_.GetWeakPtr(), args.token, args.entry_path, |
+ args.recursive, subscriber, args.callback)))); |
if (!request_id) { |
OnAddWatcherInQueueCompleted(args.token, args.entry_path, args.recursive, |
@@ -563,7 +604,8 @@ AbortCallback ProvidedFileSystem::AddWatcherInQueue( |
return AbortCallback(); |
} |
-AbortCallback ProvidedFileSystem::RemoveWatcherInQueue( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::RemoveWatcherInQueue( |
size_t token, |
const GURL& origin, |
const base::FilePath& entry_path, |
@@ -592,16 +634,19 @@ AbortCallback ProvidedFileSystem::RemoveWatcherInQueue( |
request_manager_->CreateRequest( |
REMOVE_WATCHER, |
scoped_ptr<RequestManager::HandlerInterface>( |
- new operations::RemoveWatcher( |
+ new operations::RemoveWatcher<DestinationPolicy>( |
event_router_, file_system_info_, entry_path, recursive, |
- base::Bind(&ProvidedFileSystem::OnRemoveWatcherInQueueCompleted, |
- weak_ptr_factory_.GetWeakPtr(), token, origin, key, |
- callback, true /* extension_response */)))); |
+ base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>:: |
+ OnRemoveWatcherInQueueCompleted, |
+ weak_ptr_factory_.GetWeakPtr(), token, origin, key, callback, |
+ true /* extension_response */)))); |
return AbortCallback(); |
} |
-AbortCallback ProvidedFileSystem::NotifyInQueue( |
+template <class DestinationPolicy> |
+AbortCallback ProvidedFileSystem<DestinationPolicy>::NotifyInQueue( |
scoped_ptr<NotifyInQueueArgs> args) { |
const WatcherKey key(args->entry_path, args->recursive); |
const auto& watcher_it = watchers_.find(key); |
@@ -629,10 +674,11 @@ AbortCallback ProvidedFileSystem::NotifyInQueue( |
const ProvidedFileSystemObserver::Changes& changes_ref = *args->changes.get(); |
const storage::WatcherManager::ChangeType change_type = args->change_type; |
- scoped_refptr<AutoUpdater> auto_updater( |
- new AutoUpdater(base::Bind(&ProvidedFileSystem::OnNotifyInQueueCompleted, |
- weak_ptr_factory_.GetWeakPtr(), |
- base::Passed(&args), base::File::FILE_OK))); |
+ scoped_refptr<AutoUpdater> auto_updater(new AutoUpdater( |
+ base::Bind( |
+ &ProvidedFileSystem<DestinationPolicy>::OnNotifyInQueueCompleted, |
+ weak_ptr_factory_.GetWeakPtr(), base::Passed(&args), |
+ base::File::FILE_OK))); |
// Call all notification callbacks (if any). |
for (const auto& subscriber_it : watcher_it->second.subscribers) { |
@@ -654,11 +700,14 @@ AbortCallback ProvidedFileSystem::NotifyInQueue( |
return AbortCallback(); |
} |
-base::WeakPtr<ProvidedFileSystemInterface> ProvidedFileSystem::GetWeakPtr() { |
+template <class DestinationPolicy> |
+base::WeakPtr<ProvidedFileSystemInterface> |
+ProvidedFileSystem<DestinationPolicy>::GetWeakPtr() { |
return weak_ptr_factory_.GetWeakPtr(); |
} |
-void ProvidedFileSystem::OnAddWatcherInQueueCompleted( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::OnAddWatcherInQueueCompleted( |
size_t token, |
const base::FilePath& entry_path, |
bool recursive, |
@@ -692,7 +741,8 @@ void ProvidedFileSystem::OnAddWatcherInQueueCompleted( |
watcher_queue_.Complete(token); |
} |
-void ProvidedFileSystem::OnRemoveWatcherInQueueCompleted( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::OnRemoveWatcherInQueueCompleted( |
size_t token, |
const GURL& origin, |
const WatcherKey& key, |
@@ -724,7 +774,8 @@ void ProvidedFileSystem::OnRemoveWatcherInQueueCompleted( |
watcher_queue_.Complete(token); |
} |
-void ProvidedFileSystem::OnNotifyInQueueCompleted( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::OnNotifyInQueueCompleted( |
scoped_ptr<NotifyInQueueArgs> args, |
base::File::Error result) { |
if (result != base::File::FILE_OK) { |
@@ -763,11 +814,13 @@ void ProvidedFileSystem::OnNotifyInQueueCompleted( |
watcher_queue_.Complete(args->token); |
} |
-void ProvidedFileSystem::OnOpenFileCompleted(const base::FilePath& file_path, |
- OpenFileMode mode, |
- const OpenFileCallback& callback, |
- int file_handle, |
- base::File::Error result) { |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::OnOpenFileCompleted( |
+ const base::FilePath& file_path, |
+ OpenFileMode mode, |
+ const OpenFileCallback& callback, |
+ int file_handle, |
+ base::File::Error result) { |
if (result != base::File::FILE_OK) { |
callback.Run(file_handle, result); |
return; |
@@ -777,7 +830,8 @@ void ProvidedFileSystem::OnOpenFileCompleted(const base::FilePath& file_path, |
callback.Run(file_handle, base::File::FILE_OK); |
} |
-void ProvidedFileSystem::OnCloseFileCompleted( |
+template <class DestinationPolicy> |
+void ProvidedFileSystem<DestinationPolicy>::OnCloseFileCompleted( |
int file_handle, |
const storage::AsyncFileUtil::StatusCallback& callback, |
base::File::Error result) { |
@@ -787,5 +841,7 @@ void ProvidedFileSystem::OnCloseFileCompleted( |
callback.Run(result); |
} |
+FOR_EACH_DESTINATION_SPECIALIZE(ProvidedFileSystem) |
+ |
} // namespace file_system_provider |
} // namespace chromeos |