Chromium Code Reviews| Index: webkit/tools/test_shell/simple_file_system.cc |
| =================================================================== |
| --- webkit/tools/test_shell/simple_file_system.cc (revision 124276) |
| +++ webkit/tools/test_shell/simple_file_system.cc (working copy) |
| @@ -11,6 +11,7 @@ |
| #include "base/time.h" |
| #include "base/utf_string_conversions.h" |
| #include "googleurl/src/gurl.h" |
| +#include "net/base/mime_util.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileInfo.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileSystemCallbacks.h" |
| @@ -19,6 +20,7 @@ |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
| +#include "webkit/blob/blob_storage_controller.h" |
| #include "webkit/fileapi/mock_file_system_options.h" |
| #include "webkit/glue/webkit_glue.h" |
| #include "webkit/tools/test_shell/simple_file_writer.h" |
| @@ -37,9 +39,35 @@ |
| using WebKit::WebURL; |
| using WebKit::WebVector; |
| +using webkit_blob::BlobData; |
| +using webkit_blob::BlobStorageController; |
| using fileapi::FileSystemContext; |
| using fileapi::FileSystemOperationInterface; |
| +namespace { |
| +MessageLoop* g_io_thread; |
| +webkit_blob::BlobStorageController* g_blob_storage_controller; |
| + |
| +void RegisterBlob(const GURL& blob_url, const FilePath& file_path) { |
| + DCHECK(g_blob_storage_controller); |
| + |
| + FilePath::StringType extension = file_path.Extension(); |
| + if (!extension.empty()) |
| + extension = extension.substr(1); // Strip leading ".". |
| + |
| + // This may fail, but then we'll be just setting the empty mime type. |
| + std::string mime_type; |
| + net::GetWellKnownMimeTypeFromExtension(extension, &mime_type); |
| + |
| + BlobData::Item item; |
| + item.SetToFile(file_path, 0, -1, base::Time()); |
| + g_blob_storage_controller->StartBuildingBlob(blob_url); |
| + g_blob_storage_controller->AppendBlobDataItem(blob_url, item); |
| + g_blob_storage_controller->FinishBuildingBlob(blob_url, mime_type); |
| +} |
| + |
| +} // namespace |
| + |
| SimpleFileSystem::SimpleFileSystem() { |
| if (file_system_dir_.CreateUniqueTempDir()) { |
| file_system_context_ = new FileSystemContext( |
| @@ -152,11 +180,23 @@ |
| const WebURL& blobURL, |
| const WebURL& path, |
| WebFileSystemCallbacks* callbacks) { |
| - // TODO(michaeln): Register the blobURL with the blob storage contoller. |
| GetNewOperation(path)->CreateSnapshotFile( |
| - path, SnapshotFileHandler(callbacks)); |
| + path, SnapshotFileHandler(blobURL, callbacks)); |
| } |
| +// static |
| +void SimpleFileSystem::InitializeOnIOThread( |
| + webkit_blob::BlobStorageController* blob_storage_controller) { |
| + g_io_thread = MessageLoop::current(); |
| + g_blob_storage_controller = blob_storage_controller; |
| +} |
| + |
| +// static |
| +void SimpleFileSystem::CleanupOnIOThread() { |
| + g_io_thread = NULL; |
| + g_blob_storage_controller = NULL; |
| +} |
| + |
| FileSystemOperationInterface* SimpleFileSystem::GetNewOperation( |
| const WebURL& url) { |
| return file_system_context_->CreateFileSystemOperation( |
| @@ -189,9 +229,10 @@ |
| } |
| FileSystemOperationInterface::SnapshotFileCallback |
| -SimpleFileSystem::SnapshotFileHandler(WebFileSystemCallbacks* callbacks) { |
| +SimpleFileSystem::SnapshotFileHandler(const GURL& blob_url, |
| + WebFileSystemCallbacks* callbacks) { |
| return base::Bind(&SimpleFileSystem::DidCreateSnapshotFile, |
| - AsWeakPtr(), base::Unretained(callbacks)); |
| + AsWeakPtr(), blob_url, base::Unretained(callbacks)); |
| } |
| void SimpleFileSystem::DidFinish(WebFileSystemCallbacks* callbacks, |
| @@ -256,10 +297,18 @@ |
| } |
| void SimpleFileSystem::DidCreateSnapshotFile( |
| + const GURL& blob_url, |
| WebFileSystemCallbacks* callbacks, |
| base::PlatformFileError result, |
| const base::PlatformFileInfo& info, |
| const FilePath& platform_path, |
| const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { |
| + |
|
kinuko
2012/03/01 02:31:54
DCHECK(g_io_thread) maybe?
michaeln
2012/03/01 02:38:07
Done.
|
| + if (result == base::PLATFORM_FILE_OK && g_io_thread) { |
| + g_io_thread->PostTask( |
| + FROM_HERE, |
| + base::Bind(&RegisterBlob, blob_url, platform_path)); |
| + } |
| + |
| DidGetMetadata(callbacks, result, info, platform_path); |
| } |