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