Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: webkit/tools/test_shell/simple_file_system.cc

Issue 9557010: Fix SimpleFileSystem to register a Blob when performing the CreateSnapshotFile function. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,17 @@
}
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) {
+ DCHECK(g_io_thread);
+ if (result == base::PLATFORM_FILE_OK) {
+ g_io_thread->PostTask(
+ FROM_HERE,
+ base::Bind(&RegisterBlob, blob_url, platform_path));
+ }
DidGetMetadata(callbacks, result, info, platform_path);
}
« no previous file with comments | « webkit/tools/test_shell/simple_file_system.h ('k') | webkit/tools/test_shell/simple_resource_loader_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698