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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_ 6 #define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_ 7 8 #include <string> 9 10 #include "base/files/file.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" 13 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" 14 #include "webkit/browser/fileapi/async_file_util.h" 15 16 namespace base { 17 class DictionaryValue; 18 } // namespace base 19 20 namespace extensions { 21 struct Event; 22 class EventRouter; 23 } // namespace extensions 24 25 namespace chromeos { 26 namespace file_system_provider { 27 namespace operations { 28 29 // Base class for operation bridges between fileapi and providing extensions. 30 class Operation : public RequestManager::HandlerInterface { 31 public: 32 typedef base::Callback<bool(scoped_ptr<extensions::Event> event)> 33 DispatchEventImplCallback; 34 35 Operation(extensions::EventRouter* event_router, 36 const ProvidedFileSystemInfo& file_system_info); 37 virtual ~Operation(); 38 39 // RequestManager::HandlerInterface overrides. 40 virtual bool Execute(int request_id) OVERRIDE = 0; 41 virtual void OnSuccess(int request_id, 42 scoped_ptr<RequestValue> result, 43 bool has_more) OVERRIDE = 0; 44 virtual void OnError(int request_id, base::File::Error error) OVERRIDE = 0; 45 46 // Sets custom dispatchign event implementation for tests. 47 void SetDispatchEventImplForTesting( 48 const DispatchEventImplCallback& callback); 49 50 protected: 51 // Sends an event to the providing extension. Automatically adds the file 52 // system id and the request id fields. Returns false, if the providing 53 // extension does not handle the |event_name| event. 54 bool SendEvent(int request_id, 55 const std::string& event_name, 56 scoped_ptr<base::DictionaryValue> options); 57 58 ProvidedFileSystemInfo file_system_info_; 59 60 private: 61 DispatchEventImplCallback dispatch_event_impl_; 62 DISALLOW_COPY_AND_ASSIGN(Operation); 63 }; 64 65 } // namespace operations 66 } // namespace file_system_provider 67 } // namespace chromeos 68 69 #endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_ 70