Commit adec76ae authored by Matt Menke's avatar Matt Menke Committed by Commit Bot

Remove content/browser/loader/temporary_file_stream.cc

The one caller was removed in
https://chromium-review.googlesource.com/c/chromium/src/+/1064798,
but this class was accidentally not removed.

Bug: 791702
Change-Id: I311a12aed9bddfc114bcd66856310ac8fc415673
Reviewed-on: https://chromium-review.googlesource.com/1124762Reviewed-by: default avatarMarijn Kruisselbrink <mek@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Matt Menke <mmenke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572460}
parent 201fbf94
......@@ -1037,8 +1037,6 @@ jumbo_source_set("browser") {
"loader/stream_resource_handler.h",
"loader/stream_writer.cc",
"loader/stream_writer.h",
"loader/temporary_file_stream.cc",
"loader/temporary_file_stream.h",
"loader/throttling_resource_handler.cc",
"loader/throttling_resource_handler.h",
"loader/upload_data_stream_builder.cc",
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/loader/temporary_file_stream.h"
#include <utility>
#include "base/bind.h"
#include "base/callback.h"
#include "base/files/file_proxy.h"
#include "base/memory/ref_counted.h"
#include "base/sequenced_task_runner.h"
#include "base/task_scheduler/post_task.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/file_stream.h"
#include "storage/browser/blob/shareable_file_reference.h"
using storage::ShareableFileReference;
namespace content {
namespace {
void DidCreateTemporaryFile(
const CreateTemporaryFileStreamCallback& callback,
std::unique_ptr<base::FileProxy> file_proxy,
scoped_refptr<base::SequencedTaskRunner> task_runner,
base::File::Error error_code,
const base::FilePath& file_path) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (!file_proxy->IsValid()) {
callback.Run(error_code, std::unique_ptr<net::FileStream>(), NULL);
return;
}
// Cancelled or not, create the deletable_file so the temporary is cleaned up.
scoped_refptr<ShareableFileReference> deletable_file =
ShareableFileReference::GetOrCreate(
file_path,
ShareableFileReference::DELETE_ON_FINAL_RELEASE,
task_runner.get());
std::unique_ptr<net::FileStream> file_stream(
new net::FileStream(file_proxy->TakeFile(), task_runner));
callback.Run(error_code, std::move(file_stream), deletable_file.get());
}
} // namespace
void CreateTemporaryFileStream(
const CreateTemporaryFileStreamCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
scoped_refptr<base::SequencedTaskRunner> task_runner =
base::CreateSequencedTaskRunnerWithTraits(
{base::MayBlock(), base::TaskPriority::USER_VISIBLE,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN});
std::unique_ptr<base::FileProxy> file_proxy(
new base::FileProxy(task_runner.get()));
base::FileProxy* proxy = file_proxy.get();
proxy->CreateTemporary(
base::File::FLAG_ASYNC,
base::BindOnce(&DidCreateTemporaryFile, callback, std::move(file_proxy),
std::move(task_runner)));
}
} // namespace content
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_
#define CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_
#include <memory>
#include "base/callback_forward.h"
#include "base/files/file.h"
#include "content/common/content_export.h"
namespace net {
class FileStream;
}
namespace storage {
class ShareableFileReference;
}
namespace content {
typedef base::Callback<void(base::File::Error,
std::unique_ptr<net::FileStream>,
storage::ShareableFileReference*)>
CreateTemporaryFileStreamCallback;
// Creates a temporary file and asynchronously calls |callback| with a
// net::FileStream and storage::ShareableFileReference. The file is deleted
// when the storage::ShareableFileReference is deleted. Note it is the
// consumer's responsibility to ensure the storage::ShareableFileReference
// stays in scope until net::FileStream has finished closing the file. On error,
// |callback| is called with an error in the first parameter.
//
// This function may only be called on the IO thread.
//
// TODO(davidben): Juggling the net::FileStream and
// storage::ShareableFileReference lifetimes is a nuisance. The two should
// be tied together so the consumer need not deal with it.
CONTENT_EXPORT void CreateTemporaryFileStream(
const CreateTemporaryFileStreamCallback& callback);
} // namespace content
#endif // CONTENT_BROWSER_LOADER_TEMPORARY_FILE_STREAM_H_
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/loader/temporary_file_stream.h"
#include <string.h>
#include <string>
#include <utility>
#include "base/bind.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/macros.h"
#include "base/run_loop.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_utils.h"
#include "net/base/file_stream.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/base/test_completion_callback.h"
#include "storage/browser/blob/shareable_file_reference.h"
#include "testing/gtest/include/gtest/gtest.h"
using storage::ShareableFileReference;
namespace content {
namespace {
const char kTestData[] = "0123456789";
const int kTestDataSize = arraysize(kTestData) - 1;
class WaitForFileStream {
public:
base::File::Error error() const { return error_; }
net::FileStream* file_stream() const { return file_stream_.get(); }
ShareableFileReference* deletable_file() const {
return deletable_file_.get();
}
void OnFileStreamCreated(base::File::Error error,
std::unique_ptr<net::FileStream> file_stream,
ShareableFileReference* deletable_file) {
error_ = error;
file_stream_ = std::move(file_stream);
deletable_file_ = deletable_file;
loop_.Quit();
}
void Wait() {
loop_.Run();
}
void Release() {
file_stream_.reset(nullptr);
deletable_file_ = nullptr;
}
private:
base::RunLoop loop_;
base::File::Error error_;
std::unique_ptr<net::FileStream> file_stream_;
scoped_refptr<ShareableFileReference> deletable_file_;
};
} // namespace
TEST(TemporaryFileStreamTest, Basic) {
TestBrowserThreadBundle thread_bundle(TestBrowserThreadBundle::IO_MAINLOOP);
// Create a temporary.
WaitForFileStream file_stream_waiter;
CreateTemporaryFileStream(base::Bind(&WaitForFileStream::OnFileStreamCreated,
base::Unretained(&file_stream_waiter)));
file_stream_waiter.Wait();
// The temporary should exist.
EXPECT_EQ(base::File::FILE_OK, file_stream_waiter.error());
base::FilePath file_path = file_stream_waiter.deletable_file()->path();
EXPECT_TRUE(base::PathExists(file_path));
// Write some data to the temporary.
int bytes_written = 0;
scoped_refptr<net::IOBufferWithSize> buf =
new net::IOBufferWithSize(kTestDataSize);
memcpy(buf->data(), kTestData, kTestDataSize);
scoped_refptr<net::DrainableIOBuffer> drainable =
new net::DrainableIOBuffer(buf.get(), buf->size());
while (bytes_written != kTestDataSize) {
net::TestCompletionCallback write_callback;
int rv = file_stream_waiter.file_stream()->Write(
drainable.get(), drainable->BytesRemaining(),
write_callback.callback());
if (rv == net::ERR_IO_PENDING)
rv = write_callback.WaitForResult();
ASSERT_LT(0, rv);
drainable->DidConsume(rv);
bytes_written += rv;
}
// Verify the data matches.
std::string contents;
ASSERT_TRUE(base::ReadFileToString(file_path, &contents));
EXPECT_EQ(kTestData, contents);
// Close the file.
net::TestCompletionCallback close_callback;
int rv = file_stream_waiter.file_stream()->Close(close_callback.callback());
if (rv == net::ERR_IO_PENDING)
rv = close_callback.WaitForResult();
EXPECT_EQ(net::OK, rv);
// Release everything. The file should be gone now.
file_stream_waiter.Release();
content::RunAllTasksUntilIdle();
// The temporary should be gone now.
EXPECT_FALSE(base::PathExists(file_path));
}
} // content
......@@ -1383,7 +1383,6 @@ test("content_unittests") {
"../browser/loader/resource_dispatcher_host_unittest.cc",
"../browser/loader/resource_loader_unittest.cc",
"../browser/loader/source_stream_to_data_pipe_unittest.cc",
"../browser/loader/temporary_file_stream_unittest.cc",
"../browser/loader/test_resource_handler.cc",
"../browser/loader/test_resource_handler.h",
"../browser/loader/throttling_resource_handler_unittest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment