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