Home | History | Annotate | Download | only in operations
      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