15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_FILEAPI_FILEAPI_MESSAGE_FILTER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_FILEAPI_FILEAPI_MESSAGE_FILTER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_util_proxy.h"
152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "base/memory/ref_counted.h"
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/shared_memory.h"
172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/browser/streams/stream.h"
182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "content/browser/streams/stream_context.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/common/content_export.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_context.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_operation_runner.h"
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/blob/blob_data.h"
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/fileapi/file_system_types.h"
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_types.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Time;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FileSystemURL;
36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochclass FileSystemOperationRunner;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)struct DirectoryEntry;
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)struct FileSystemInfo;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContext;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContextGetter;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace content {
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class BlobStorageHost;
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShareableFileReference;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class ChildProcessSecurityPolicyImpl;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeBlobStorageContext;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// TODO(tyoshino): Factor out code except for IPC gluing from
592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch// FileAPIMessageFilter into separate classes. See crbug.com/263741.
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CONTENT_EXPORT FileAPIMessageFilter : public BrowserMessageFilter {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used by the renderer process host on the UI thread.
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  FileAPIMessageFilter(int process_id,
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       net::URLRequestContextGetter* request_context_getter,
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       storage::FileSystemContext* file_system_context,
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       ChromeBlobStorageContext* blob_storage_context,
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       StreamContext* stream_context);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used by the worker process host on the IO thread.
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  FileAPIMessageFilter(int process_id,
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       net::URLRequestContext* request_context,
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       storage::FileSystemContext* file_system_context,
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       ChromeBlobStorageContext* blob_storage_context,
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                       StreamContext* stream_context);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BrowserMessageFilter implementation.
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnChannelClosing() OVERRIDE;
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual base::TaskRunner* OverrideTaskRunnerForMessage(
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const IPC::Message& message) OVERRIDE;
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~FileAPIMessageFilter();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void BadMessageReceived() OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  typedef storage::FileSystemOperationRunner::OperationID OperationID;
89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void OnOpenFileSystem(int request_id,
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                        const GURL& origin_url,
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                        storage::FileSystemType type);
9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void OnResolveURL(int request_id,
9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    const GURL& filesystem_url);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDeleteFileSystem(int request_id,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const GURL& origin_url,
9703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                          storage::FileSystemType type);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnMove(int request_id,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              const GURL& src_path,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              const GURL& dest_path);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnCopy(int request_id,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              const GURL& src_path,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              const GURL& dest_path);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRemove(int request_id, const GURL& path, bool recursive);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnReadMetadata(int request_id, const GURL& path);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnCreate(int request_id,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const GURL& path,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool exclusive,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool is_directory,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool recursive);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnExists(int request_id, const GURL& path, bool is_directory);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnReadDirectory(int request_id, const GURL& path);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnWrite(int request_id,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               const GURL& path,
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)               const std::string& blob_uuid,
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)               int64 offset);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnTruncate(int request_id, const GURL& path, int64 length);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnTouchFile(int request_id,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const GURL& path,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const base::Time& last_access_time,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const base::Time& last_modified_time);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnCancel(int request_id, int request_to_cancel);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnSyncGetPlatformPath(const GURL& path,
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             base::FilePath* platform_path);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnCreateSnapshotFile(int request_id,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const GURL& path);
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnDidReceiveSnapshotFile(int request_id);
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1292385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Handlers for BlobHostMsg_ family messages.
1302385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnStartBuildingBlob(const std::string& uuid);
13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnAppendBlobDataItemToBlob(const std::string& uuid,
13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                  const storage::BlobData::Item& item);
13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnAppendSharedMemoryToBlob(const std::string& uuid,
13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                  base::SharedMemoryHandle handle,
13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                  size_t buffer_size);
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnFinishBuildingBlob(const std::string& uuid,
13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             const std::string& content_type);
13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnIncrementBlobRefCount(const std::string& uuid);
14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnDecrementBlobRefCount(const std::string& uuid);
14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnRegisterPublicBlobURL(const GURL& public_url, const std::string& uuid);
14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void OnRevokePublicBlobURL(const GURL& public_url);
14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1442385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Handlers for StreamHostMsg_ family messages.
1452385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  //
1462385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // TODO(tyoshino): Consider renaming BlobData to more generic one as it's now
1472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // used for Stream.
1482385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1492385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Currently |content_type| is ignored.
1502385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  //
1512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // TODO(tyoshino): Set |content_type| to the stream.
1522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void OnStartBuildingStream(const GURL& url, const std::string& content_type);
15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void OnAppendBlobDataItemToStream(const GURL& url,
15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                    const storage::BlobData::Item& item);
1552385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void OnAppendSharedMemoryToStream(
1562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch      const GURL& url, base::SharedMemoryHandle handle, size_t buffer_size);
1572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void OnFinishBuildingStream(const GURL& url);
158424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void OnAbortBuildingStream(const GURL& url);
1592385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void OnCloneStream(const GURL& url, const GURL& src_url);
1602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  void OnRemoveStream(const GURL& url);
1612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback functions to be used when each file operation is finished.
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DidFinish(int request_id, base::File::Error result);
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidGetMetadata(int request_id,
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      base::File::Error result,
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      const base::File::Info& info);
167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void DidGetMetadataForStreaming(int request_id,
168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                  base::File::Error result,
169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                  const base::File::Info& info);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidReadDirectory(int request_id,
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        base::File::Error result,
17203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                        const std::vector<storage::DirectoryEntry>& entries,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        bool has_more);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidWrite(int request_id,
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::File::Error result,
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                int64 bytes,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                bool complete);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidOpenFileSystem(int request_id,
1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                         const GURL& root,
18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                         const std::string& filesystem_name,
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                         base::File::Error result);
18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void DidResolveURL(int request_id,
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     base::File::Error result,
18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     const storage::FileSystemInfo& info,
18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                     const base::FilePath& file_path,
18603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                     storage::FileSystemContext::ResolvedEntryType type);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidDeleteFileSystem(int request_id,
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           base::File::Error result);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidCreateSnapshot(
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int request_id,
19103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const storage::FileSystemURL& url,
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::File::Error result,
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::File::Info& info,
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& platform_path,
19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      const scoped_refptr<storage::ShareableFileReference>& file_ref);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Sends a FileSystemMsg_DidFail and returns false if |url| is invalid.
19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool ValidateFileSystemURL(int request_id, const storage::FileSystemURL& url);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Retrieves the Stream object for |url| from |stream_context_|. Returns unset
2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // scoped_refptr when there's no Stream instance for the given |url|
2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // registered with stream_context_->registry().
2032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  scoped_refptr<Stream> GetStreamForURL(const GURL& url);
2042385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  storage::FileSystemOperationRunner* operation_runner() {
206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    return operation_runner_.get();
207bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  }
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int process_id_;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  storage::FileSystemContext* context_;
212d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ChildProcessSecurityPolicyImpl* security_policy_;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Keeps map from request_id to OperationID for ongoing operations.
215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // (Primarily for Cancel operation)
216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  typedef std::map<int, OperationID> OperationsMap;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OperationsMap operations_;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // The getter holds the context until OnChannelConnected() can be called from
220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // the IO thread, which will extract the net::URLRequestContext from it.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::URLRequestContext* request_context_;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
2252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  scoped_refptr<StreamContext> stream_context_;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<storage::FileSystemOperationRunner> operation_runner_;
228bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Keeps track of blobs used in this process and cleans up
23058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // when the renderer process dies.
231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  scoped_ptr<BlobStorageHost> blob_storage_host_;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2332385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Keep track of stream URLs registered in this process. Need to unregister
2342385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // all of them when the renderer process dies.
2352385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  base::hash_set<std::string> stream_urls_;
2362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Used to keep snapshot files alive while a DidCreateSnapshot
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is being sent to the renderer.
23903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::map<int, scoped_refptr<storage::ShareableFileReference> >
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      in_transit_snapshot_files_;
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FileAPIMessageFilter);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_FILEAPI_FILEAPI_MESSAGE_FILTER_H_
248