test_file_system_backend.cc revision f2477e01787aa58f445919b809d89e252beef54f
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 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) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/test/test_file_system_backend.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "webkit/browser/blob/file_stream_reader.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/copy_or_move_file_validator.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_observers.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_operation.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_operation_context.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_quota_util.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/local_file_util.h" 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/native_file_util.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "webkit/browser/fileapi/quota/quota_reservation.h" 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/sandbox_file_stream_writer.h" 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/quota_manager.h" 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/fileapi/file_system_util.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace fileapi { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace { 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class TestFileUtil : public LocalFileUtil { 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public: 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) explicit TestFileUtil(const base::FilePath& base_path) 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) : base_path_(base_path) {} 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual ~TestFileUtil() {} 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // LocalFileUtil overrides. 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual base::PlatformFileError GetLocalFilePath( 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) FileSystemOperationContext* context, 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const FileSystemURL& file_system_url, 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath* local_file_path) OVERRIDE { 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) *local_file_path = base_path_.Append(file_system_url.path()); 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return base::PLATFORM_FILE_OK; 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private: 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath base_path_; 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}; 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This only supports single origin. 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass TestFileSystemBackend::QuotaUtil 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public FileSystemQuotaUtil, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public FileUpdateObserver { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit QuotaUtil(base::SequencedTaskRunner* task_runner) 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : usage_(0), 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch task_runner_(task_runner) { 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch update_observers_ = update_observers_.AddObserver(this, task_runner_.get()); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~QuotaUtil() {} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FileSystemQuotaUtil overrides. 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual base::PlatformFileError DeleteOriginDataOnFileThread( 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileSystemContext* context, 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) quota::QuotaManagerProxy* proxy, 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL& origin_url, 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileSystemType type) OVERRIDE { 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NOTREACHED(); 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return base::PLATFORM_FILE_OK; 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual scoped_refptr<QuotaReservation> 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateQuotaReservationOnFileTaskRunner( 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GURL& origin_url, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileSystemType type) OVERRIDE { 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NOTREACHED(); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return scoped_refptr<QuotaReservation>(); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetOriginsForTypeOnFileThread( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemType type, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL>* origins) OVERRIDE { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetOriginsForHostOnFileThread( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemType type, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& host, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL>* origins) OVERRIDE { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int64 GetOriginUsageOnFileThread( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemContext* context, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin_url, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemType type) OVERRIDE { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return usage_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void AddFileUpdateObserver( 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type, 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileUpdateObserver* observer, 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SequencedTaskRunner* task_runner) OVERRIDE { 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTIMPLEMENTED(); 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void AddFileChangeObserver( 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type, 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileChangeObserver* observer, 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SequencedTaskRunner* task_runner) OVERRIDE { 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch change_observers_ = change_observers_.AddObserver(observer, task_runner); 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void AddFileAccessObserver( 1167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type, 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileAccessObserver* observer, 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SequencedTaskRunner* task_runner) OVERRIDE { 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTIMPLEMENTED(); 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual const UpdateObserverList* GetUpdateObservers( 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type) const OVERRIDE { 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return &update_observers_; 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual const ChangeObserverList* GetChangeObservers( 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type) const OVERRIDE { 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return &change_observers_; 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual const AccessObserverList* GetAccessObservers( 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileSystemType type) const OVERRIDE { 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTIMPLEMENTED(); 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return NULL; 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FileUpdateObserver overrides. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnStartUpdate(const FileSystemURL& url) OVERRIDE {} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnUpdate(const FileSystemURL& url, int64 delta) OVERRIDE { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ += delta; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnEndUpdate(const FileSystemURL& url) OVERRIDE {} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::SequencedTaskRunner* task_runner() { return task_runner_.get(); } 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage_; 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_refptr<base::SequencedTaskRunner> task_runner_; 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch UpdateObserverList update_observers_; 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChangeObserverList change_observers_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestFileSystemBackend::TestFileSystemBackend( 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SequencedTaskRunner* task_runner, 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& base_path) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : base_path_(base_path), 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) file_util_(new AsyncFileUtilAdapter(new TestFileUtil(base_path))), 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch quota_util_(new QuotaUtil(task_runner)), 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) require_copy_or_move_validator_(false) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestFileSystemBackend::~TestFileSystemBackend() { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbool TestFileSystemBackend::CanHandleType(FileSystemType type) const { 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return (type == kFileSystemTypeTest); 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid TestFileSystemBackend::Initialize(FileSystemContext* context) { 173bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 174bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 175bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid TestFileSystemBackend::OpenFileSystem( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin_url, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemType type, 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OpenFileSystemMode mode, 179bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const OpenFileSystemCallback& callback) { 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch callback.Run(GetFileSystemRootURI(origin_url, type), 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetFileSystemName(origin_url, type), 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::PLATFORM_FILE_OK); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochAsyncFileUtil* TestFileSystemBackend::GetAsyncFileUtil(FileSystemType type) { 186d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return file_util_.get(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CopyOrMoveFileValidatorFactory* 1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestFileSystemBackend::GetCopyOrMoveFileValidatorFactory( 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileSystemType type, base::PlatformFileError* error_code) { 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(error_code); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *error_code = base::PLATFORM_FILE_OK; 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (require_copy_or_move_validator_) { 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!copy_or_move_file_validator_factory_) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *error_code = base::PLATFORM_FILE_ERROR_SECURITY; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return copy_or_move_file_validator_factory_.get(); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return NULL; 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid TestFileSystemBackend::InitializeCopyOrMoveFileValidatorFactory( 20390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<CopyOrMoveFileValidatorFactory> factory) { 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!copy_or_move_file_validator_factory_) 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) copy_or_move_file_validator_factory_ = factory.Pass(); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochFileSystemOperation* TestFileSystemBackend::CreateFileSystemOperation( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileSystemURL& url, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemContext* context, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformFileError* error_code) const { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<FileSystemOperationContext> operation_context( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new FileSystemOperationContext(context)); 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_context->set_update_observers(*GetUpdateObservers(url.type())); 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_context->set_change_observers( 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch *quota_util_->GetChangeObservers(url.type())); 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return FileSystemOperation::Create(url, context, operation_context.Pass()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<webkit_blob::FileStreamReader> 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestFileSystemBackend::CreateFileStreamReader( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileSystemURL& url, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 offset, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& expected_modification_time, 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemContext* context) const { 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<webkit_blob::FileStreamReader>( 227d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_blob::FileStreamReader::CreateForFileSystemFile( 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) context, url, offset, expected_modification_time)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)scoped_ptr<fileapi::FileStreamWriter> 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTestFileSystemBackend::CreateFileStreamWriter( 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileSystemURL& url, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 offset, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemContext* context) const { 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return scoped_ptr<fileapi::FileStreamWriter>( 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new SandboxFileStreamWriter(context, url, offset, 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch *GetUpdateObservers(url.type()))); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochFileSystemQuotaUtil* TestFileSystemBackend::GetQuotaUtil() { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return quota_util_.get(); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst UpdateObserverList* TestFileSystemBackend::GetUpdateObservers( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileSystemType type) const { 2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return quota_util_->GetUpdateObservers(type); 248868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 249868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid TestFileSystemBackend::AddFileChangeObserver( 251868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FileChangeObserver* observer) { 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch quota_util_->AddFileChangeObserver( 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kFileSystemTypeTest, observer, quota_util_->task_runner()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace fileapi 257