service.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_SERVICE_H_ 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_SERVICE_H_ 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <map> 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <string> 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <vector> 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/files/file.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/memory/scoped_ptr.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/memory/weak_ptr.h" 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/observer_list.h" 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/values.h" 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/file_system_provider/observer.h" 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/chromeos/file_system_provider/request_manager.h" 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h" 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/common/extensions/api/file_system_provider.h" 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/keyed_service/core/keyed_service.h" 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/browser/browser_context.h" 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace chromeos { 25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace file_system_provider { 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass ServiceFactory; 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Manages and registers the fileSystemProvider service. 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass Service : public KeyedService { 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch explicit Service(Profile* profile); 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~Service(); 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Mounts a file system provided by an extension with the |extension_id|. 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // For success, it returns a numeric file system id, which is an 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // auto-incremented non-zero value. For failures, it returns zero. 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int MountFileSystem(const std::string& extension_id, 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& file_system_name); 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Unmounts a file system with the specified |file_system_id| for the 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |extension_id|. For success returns true, otherwise false. 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool UnmountFileSystem(const std::string& extension_id, int file_system_id); 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns a list of currently mounted file systems. All items are copied. 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::vector<ProvidedFileSystem> GetMountedFileSystems(); 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Handles successful response for the |request_id|. If |has_next| is false, 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // then the request is disposed, after handling the |response|. On error, 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // returns false, and the request is disposed. 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool FulfillRequest(const std::string& extension_id, 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int file_system_id, 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int request_id, 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<base::DictionaryValue> result, 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool has_next); 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Handles error response for the |request_id|. If handling the error fails, 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // returns false. Always disposes the request. 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool RejectRequest(const std::string& extension_id, 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int file_system_id, 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int request_id, 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::File::Error error); 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Requests unmounting of a file system with the passed |file_system_id|. 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns true is unmounting has been requested. False, if the request is 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // invalid (eg. already unmounted). 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool RequestUnmount(int file_system_id); 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds and removes observers. 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void AddObserver(Observer* observer); 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void RemoveObserver(Observer* observer); 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Gets the singleton instance for the |context|. 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static Service* Get(content::BrowserContext* context); 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // BrowserContextKeyedService overrides. 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Shutdown() OVERRIDE; 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch typedef std::map<int, ProvidedFileSystem> FileSystemMap; 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when the providing extension calls the success callback for the 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // onUnmountRequested event. 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void OnRequestUnmountError(const ProvidedFileSystem& file_system, 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::File::Error error); 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RequestManager request_manager_; 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Profile* profile_; 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ObserverList<Observer> observers_; 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FileSystemMap file_systems_; 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int next_id_; 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::WeakPtrFactory<Service> weak_ptr_factory_; 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(Service); 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace file_system_provider 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace chromeos 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_SERVICE_H_ 101