15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be
35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file.
45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_
65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string>
95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/files/file.h"
115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/memory/scoped_ptr.h"
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/file_system_provider/request_manager.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/async_file_util.h"
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace base {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ListValue;
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace base
195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace extensions {
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustruct Event;
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass EventRouter;
235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace extensions
245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace chromeos {
265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace file_system_provider {
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace operations {
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Base class for operation bridges between fileapi and providing extensions.
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass Operation : public RequestManager::HandlerInterface {
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public:
325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  typedef base::Callback<bool(scoped_ptr<extensions::Event> event)>
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      DispatchEventImplCallback;
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  Operation(extensions::EventRouter* event_router,
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            const ProvidedFileSystemInfo& file_system_info);
375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual ~Operation();
385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // RequestManager::HandlerInterface overrides.
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual bool Execute(int request_id) OVERRIDE = 0;
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void OnSuccess(int request_id,
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                         scoped_ptr<RequestValue> result,
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                         bool has_more) OVERRIDE = 0;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnError(int request_id,
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       scoped_ptr<RequestValue> result,
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       base::File::Error error) OVERRIDE = 0;
475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Sets custom dispatchign event implementation for tests.
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void SetDispatchEventImplForTesting(
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      const DispatchEventImplCallback& callback);
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected:
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Sends an event to the providing extension. Returns false, if the providing
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // extension does not handle the |event_name| event.
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool SendEvent(int request_id,
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 const std::string& event_name,
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 scoped_ptr<base::ListValue> event_args);
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ProvidedFileSystemInfo file_system_info_;
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private:
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DispatchEventImplCallback dispatch_event_impl_;
635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DISALLOW_COPY_AND_ASSIGN(Operation);
645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu};
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace operations
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace file_system_provider
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace chromeos
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_OPERATIONS_OPERATION_H_
71