1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/callback_forward.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/files/file.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/content_export.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace net { 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class FileStream; 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage { 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ShareableFileReference; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace content { 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)typedef base::Callback<void(base::File::Error, 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<net::FileStream>, 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::ShareableFileReference*)> 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CreateTemporaryFileStreamCallback; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Creates a temporary file and asynchronously calls |callback| with a 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// net::FileStream and storage::ShareableFileReference. The file is deleted 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// when the storage::ShareableFileReference is deleted. Note it is the 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// consumer's responsibility to ensure the storage::ShareableFileReference 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// stays in scope until net::FileStream has finished closing the file. On error, 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |callback| is called with an error in the first parameter. 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This function may only be called on the IO thread. 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// TODO(davidben): Juggling the net::FileStream and 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// storage::ShareableFileReference lifetimes is a nuisance. The two should 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// be tied together so the consumer need not deal with it. 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)CONTENT_EXPORT void CreateTemporaryFileStream( 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CreateTemporaryFileStreamCallback& callback); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace content 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_ 46