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