| Index: chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc | 
| diff --git a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc | 
| index 0b5362f3f9374b0e825142694f54c1a5f3753544..10a5489b5c69b6818f9bb09429f7fc24789827b9 100644 | 
| --- a/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc | 
| +++ b/chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader_unittest.cc | 
| @@ -2,26 +2,28 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| +#include <string.h> | 
| + | 
| #include <memory> | 
| #include <string> | 
| #include <utility> | 
|  | 
| -#include "base/files/file_util.h" | 
| -#include "base/files/scoped_temp_dir.h" | 
| #include "base/location.h" | 
| #include "base/memory/ptr_util.h" | 
| #include "base/threading/thread_task_runner_handle.h" | 
| #include "chrome/browser/chromeos/arc/fileapi/arc_content_file_system_file_stream_reader.h" | 
| +#include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h" | 
| #include "components/arc/arc_bridge_service.h" | 
| #include "components/arc/arc_service_manager.h" | 
| -#include "components/arc/file_system/test/fake_arc_file_system_operation_runner.h" | 
| +#include "components/arc/test/fake_file_system_instance.h" | 
| #include "content/public/test/test_browser_thread_bundle.h" | 
| -#include "mojo/edk/embedder/embedder.h" | 
| #include "net/base/io_buffer.h" | 
| #include "net/base/test_completion_callback.h" | 
| #include "testing/gtest/include/gtest/gtest.h" | 
| #include "url/gurl.h" | 
|  | 
| +using FileSpec = arc::FakeFileSystemInstance::FileSpec; | 
| + | 
| namespace arc { | 
|  | 
| namespace { | 
| @@ -53,85 +55,6 @@ bool ReadData(ArcContentFileSystemFileStreamReader* reader, | 
| return true; | 
| } | 
|  | 
| -// TODO(crbug.com/683049): Use a generic FakeArcFileSystemOperationRunner. | 
| -class ArcFileSystemOperationRunnerForTest | 
| -    : public FakeArcFileSystemOperationRunner { | 
| - public: | 
| -  ArcFileSystemOperationRunnerForTest(ArcBridgeService* bridge_service, | 
| -                                      const base::FilePath& file_path) | 
| -      : FakeArcFileSystemOperationRunner(bridge_service), | 
| -        file_path_(file_path) {} | 
| -  ~ArcFileSystemOperationRunnerForTest() override = default; | 
| - | 
| -  void GetFileSize(const GURL& url, | 
| -                   const GetFileSizeCallback& callback) override { | 
| -    EXPECT_EQ(kArcUrlFile, url.spec()); | 
| -    base::File::Info info; | 
| -    EXPECT_TRUE(base::GetFileInfo(file_path_, &info)); | 
| -    base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| -        FROM_HERE, base::Bind(callback, info.size)); | 
| -  } | 
| - | 
| -  void OpenFileToRead(const GURL& url, | 
| -                      const OpenFileToReadCallback& callback) override { | 
| -    base::ScopedFD fd; | 
| -    if (url.spec() == kArcUrlFile) { | 
| -      fd = OpenRegularFileToRead(); | 
| -    } else if (url.spec() == kArcUrlPipe) { | 
| -      fd = OpenPipeToRead(); | 
| -    } else { | 
| -      LOG(ERROR) << "Unknown URL: " << url.spec(); | 
| -      base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| -          FROM_HERE, base::Bind(callback, base::Passed(mojo::ScopedHandle()))); | 
| -      return; | 
| -    } | 
| -    mojo::edk::ScopedPlatformHandle platform_handle( | 
| -        mojo::edk::PlatformHandle(fd.release())); | 
| -    MojoHandle wrapped_handle; | 
| -    EXPECT_EQ(MOJO_RESULT_OK, mojo::edk::CreatePlatformHandleWrapper( | 
| -                                  std::move(platform_handle), &wrapped_handle)); | 
| - | 
| -    mojo::ScopedHandle scoped_handle{mojo::Handle(wrapped_handle)}; | 
| -    base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| -        FROM_HERE, | 
| -        base::Bind(callback, base::Passed(std::move(scoped_handle)))); | 
| -  } | 
| - | 
| - private: | 
| -  // Returns a ScopedFD to read |file_path_|. | 
| -  base::ScopedFD OpenRegularFileToRead() { | 
| -    base::File file(file_path_, base::File::FLAG_OPEN | base::File::FLAG_READ); | 
| -    EXPECT_TRUE(file.IsValid()); | 
| -    return base::ScopedFD(file.TakePlatformFile()); | 
| -  } | 
| - | 
| -  // Returns a pipe's read end with |file_path_|'s contents written. | 
| -  base::ScopedFD OpenPipeToRead() { | 
| -    // Create a new pipe. | 
| -    int fds[2]; | 
| -    if (pipe(fds) != 0) { | 
| -      LOG(ERROR) << "pipe() failed."; | 
| -      return base::ScopedFD(); | 
| -    } | 
| -    base::ScopedFD fd_read(fds[0]); | 
| -    base::ScopedFD fd_write(fds[1]); | 
| -    // Put the file's contents to the pipe. | 
| -    std::string contents; | 
| -    if (!base::ReadFileToString(file_path_, &contents) || | 
| -        !base::WriteFileDescriptor(fd_write.get(), contents.data(), | 
| -                                   contents.length())) { | 
| -      LOG(ERROR) << "Failed to write the file contents to the pipe"; | 
| -      return base::ScopedFD(); | 
| -    } | 
| -    // Return the read end. | 
| -    return fd_read; | 
| -  } | 
| - | 
| -  base::FilePath file_path_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(ArcFileSystemOperationRunnerForTest); | 
| -}; | 
| - | 
| class ArcContentFileSystemFileStreamReaderTest : public testing::Test { | 
| public: | 
| ArcContentFileSystemFileStreamReaderTest() = default; | 
| @@ -139,20 +62,21 @@ class ArcContentFileSystemFileStreamReaderTest : public testing::Test { | 
| ~ArcContentFileSystemFileStreamReaderTest() override = default; | 
|  | 
| void SetUp() override { | 
| -    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 
| - | 
| -    base::FilePath path = temp_dir_.GetPath().AppendASCII("bar"); | 
| -    ASSERT_TRUE(base::WriteFile(path, kData, arraysize(kData))); | 
| +    fake_file_system_.AddFile(FileSpec{kArcUrlFile, kData, FileSpec::SEEKABLE}); | 
| +    fake_file_system_.AddFile( | 
| +        FileSpec{kArcUrlPipe, kData, FileSpec::NON_SEEKABLE}); | 
|  | 
| arc_service_manager_ = base::MakeUnique<ArcServiceManager>(nullptr); | 
| arc_service_manager_->AddService( | 
| -        base::MakeUnique<ArcFileSystemOperationRunnerForTest>( | 
| -            arc_service_manager_->arc_bridge_service(), path)); | 
| +        ArcFileSystemOperationRunner::CreateForTesting( | 
| +            arc_service_manager_->arc_bridge_service())); | 
| +    arc_service_manager_->arc_bridge_service()->file_system()->SetInstance( | 
| +        &fake_file_system_); | 
| } | 
|  | 
| private: | 
| -  base::ScopedTempDir temp_dir_; | 
| content::TestBrowserThreadBundle thread_bundle_; | 
| +  FakeFileSystemInstance fake_file_system_; | 
| std::unique_ptr<ArcServiceManager> arc_service_manager_; | 
|  | 
| DISALLOW_COPY_AND_ASSIGN(ArcContentFileSystemFileStreamReaderTest); | 
| @@ -162,9 +86,9 @@ class ArcContentFileSystemFileStreamReaderTest : public testing::Test { | 
|  | 
| TEST_F(ArcContentFileSystemFileStreamReaderTest, ReadRegularFile) { | 
| ArcContentFileSystemFileStreamReader reader(GURL(kArcUrlFile), 0); | 
| -  auto buffer = make_scoped_refptr(new net::IOBufferWithSize(arraysize(kData))); | 
| +  auto buffer = make_scoped_refptr(new net::IOBufferWithSize(strlen(kData))); | 
| EXPECT_TRUE(ReadData(&reader, buffer.get())); | 
| -  EXPECT_EQ(base::StringPiece(kData, arraysize(kData)), | 
| +  EXPECT_EQ(base::StringPiece(kData, strlen(kData)), | 
| base::StringPiece(buffer->data(), buffer->size())); | 
| } | 
|  | 
| @@ -172,17 +96,17 @@ TEST_F(ArcContentFileSystemFileStreamReaderTest, ReadRegularFileWithOffset) { | 
| constexpr size_t kOffset = 10; | 
| ArcContentFileSystemFileStreamReader reader(GURL(kArcUrlFile), kOffset); | 
| auto buffer = | 
| -      make_scoped_refptr(new net::IOBufferWithSize(arraysize(kData) - kOffset)); | 
| +      make_scoped_refptr(new net::IOBufferWithSize(strlen(kData) - kOffset)); | 
| EXPECT_TRUE(ReadData(&reader, buffer.get())); | 
| -  EXPECT_EQ(base::StringPiece(kData + kOffset, arraysize(kData) - kOffset), | 
| +  EXPECT_EQ(base::StringPiece(kData + kOffset, strlen(kData) - kOffset), | 
| base::StringPiece(buffer->data(), buffer->size())); | 
| } | 
|  | 
| TEST_F(ArcContentFileSystemFileStreamReaderTest, ReadPipe) { | 
| ArcContentFileSystemFileStreamReader reader(GURL(kArcUrlPipe), 0); | 
| -  auto buffer = make_scoped_refptr(new net::IOBufferWithSize(arraysize(kData))); | 
| +  auto buffer = make_scoped_refptr(new net::IOBufferWithSize(strlen(kData))); | 
| EXPECT_TRUE(ReadData(&reader, buffer.get())); | 
| -  EXPECT_EQ(base::StringPiece(kData, arraysize(kData)), | 
| +  EXPECT_EQ(base::StringPiece(kData, strlen(kData)), | 
| base::StringPiece(buffer->data(), buffer->size())); | 
| } | 
|  | 
| @@ -190,9 +114,9 @@ TEST_F(ArcContentFileSystemFileStreamReaderTest, ReadPipeWithOffset) { | 
| constexpr size_t kOffset = 10; | 
| ArcContentFileSystemFileStreamReader reader(GURL(kArcUrlPipe), kOffset); | 
| auto buffer = | 
| -      make_scoped_refptr(new net::IOBufferWithSize(arraysize(kData) - kOffset)); | 
| +      make_scoped_refptr(new net::IOBufferWithSize(strlen(kData) - kOffset)); | 
| EXPECT_TRUE(ReadData(&reader, buffer.get())); | 
| -  EXPECT_EQ(base::StringPiece(kData + kOffset, arraysize(kData) - kOffset), | 
| +  EXPECT_EQ(base::StringPiece(kData + kOffset, strlen(kData) - kOffset), | 
| base::StringPiece(buffer->data(), buffer->size())); | 
| } | 
|  | 
| @@ -200,7 +124,7 @@ TEST_F(ArcContentFileSystemFileStreamReaderTest, GetLength) { | 
| ArcContentFileSystemFileStreamReader reader(GURL(kArcUrlFile), 0); | 
|  | 
| net::TestInt64CompletionCallback callback; | 
| -  EXPECT_EQ(static_cast<int64_t>(arraysize(kData)), | 
| +  EXPECT_EQ(static_cast<int64_t>(strlen(kData)), | 
| callback.GetResult(reader.GetLength(callback.callback()))); | 
| } | 
|  | 
|  |