summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-28 10:19:45 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-28 10:19:45 +0000
commit2cd2107178cc1c885a545c78f99e20ad4c1abe77 (patch)
tree73609092f90bf5f3c7de33830db408a4919ddb9c /webkit/glue
parent71de432bf0e324d829172814ad981b2a21d5a162 (diff)
downloadchromium_src-2cd2107178cc1c885a545c78f99e20ad4c1abe77.zip
chromium_src-2cd2107178cc1c885a545c78f99e20ad4c1abe77.tar.gz
chromium_src-2cd2107178cc1c885a545c78f99e20ad4c1abe77.tar.bz2
Support FileSystem URL in File
BUG=110119 TEST=existing tests (more will be added when we add more implementation) Review URL: https://chromiumcodereview.appspot.com/10828252 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153651 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r--webkit/glue/glue_serialize.cc20
-rw-r--r--webkit/glue/resource_request_body.cc16
-rw-r--r--webkit/glue/resource_request_body.h2
-rw-r--r--webkit/glue/weburlloader_impl.cc10
4 files changed, 46 insertions, 2 deletions
diff --git a/webkit/glue/glue_serialize.cc b/webkit/glue/glue_serialize.cc
index 048bbdd..c712d77 100644
--- a/webkit/glue/glue_serialize.cc
+++ b/webkit/glue/glue_serialize.cc
@@ -68,12 +68,13 @@ struct SerializeObject {
// 10: Adds support for blob
// 11: Adds support for pageScaleFactor
// 12: Adds support for hasPasswordData in HTTP body
+// 13: Adds support for URL (FileSystem URL)
// Should be const, but unit tests may modify it.
//
// NOTE: If the version is -1, then the pickle contains only a URL string.
// See CreateHistoryStateForURL.
//
-int kVersion = 12;
+int kVersion = 13;
// A bunch of convenience functions to read/write to SerializeObjects.
// The serializers assume the input data is in the correct format and so does
@@ -258,8 +259,13 @@ void WriteFormData(const WebHTTPBody& http_body, SerializeObject* obj) {
WriteInteger64(element.fileStart, obj);
WriteInteger64(element.fileLength, obj);
WriteReal(element.modificationTime, obj);
+ } else if (element.type == WebHTTPBody::Element::TypeURL) {
+ WriteGURL(element.url, obj);
+ WriteInteger64(element.fileStart, obj);
+ WriteInteger64(element.fileLength, obj);
+ WriteReal(element.modificationTime, obj);
} else {
- WriteGURL(element.blobURL, obj);
+ WriteGURL(element.url, obj);
}
}
WriteInteger64(http_body.identifier(), obj);
@@ -299,6 +305,16 @@ WebHTTPBody ReadFormData(const SerializeObject* obj) {
}
http_body.appendFileRange(file_path, file_start, file_length,
modification_time);
+ } else if (type == WebHTTPBody::Element::TypeURL) {
+ GURL url = ReadGURL(obj);
+ long long file_start = 0;
+ long long file_length = -1;
+ double modification_time = 0.0;
+ file_start = ReadInteger64(obj);
+ file_length = ReadInteger64(obj);
+ modification_time = ReadReal(obj);
+ http_body.appendURLRange(url, file_start, file_length,
+ modification_time);
} else if (obj->version >= 10) {
GURL blob_url = ReadGURL(obj);
http_body.appendBlob(blob_url);
diff --git a/webkit/glue/resource_request_body.cc b/webkit/glue/resource_request_body.cc
index 94ff258..48dc9cd 100644
--- a/webkit/glue/resource_request_body.cc
+++ b/webkit/glue/resource_request_body.cc
@@ -36,6 +36,14 @@ void ResourceRequestBody::AppendBlob(const GURL& blob_url) {
elements_.back().SetToBlobUrl(blob_url);
}
+void ResourceRequestBody::AppendFileSystemFileRange(
+ const GURL& url, uint64 offset, uint64 length,
+ const base::Time& expected_modification_time) {
+ elements_.push_back(Element());
+ elements_.back().SetToFileSystemUrlRange(url, offset, length,
+ expected_modification_time);
+}
+
net::UploadData* ResourceRequestBody::ResolveElementsAndCreateUploadData(
BlobStorageController* blob_controller) {
net::UploadData* upload_data = new net::UploadData;
@@ -60,6 +68,10 @@ net::UploadData* ResourceRequestBody::ResolveElementsAndCreateUploadData(
element.length(),
element.expected_modification_time());
break;
+ case Element::TYPE_FILE_FILESYSTEM:
+ // TODO(kinuko): Resolve FileSystemURL before creating UploadData.
+ NOTREACHED();
+ break;
case Element::TYPE_BLOB:
ResolveBlobReference(blob_controller, element.url(), elements);
break;
@@ -109,6 +121,10 @@ void ResourceRequestBody::ResolveBlobReference(
item.length(),
item.expected_modification_time());
break;
+ case BlobData::Item::TYPE_FILE_FILESYSTEM:
+ // TODO(kinuko): Resolve FileSystemURL before creating UploadData.
+ NOTREACHED();
+ break;
default:
NOTREACHED();
break;
diff --git a/webkit/glue/resource_request_body.h b/webkit/glue/resource_request_body.h
index ad98889..1351f33 100644
--- a/webkit/glue/resource_request_body.h
+++ b/webkit/glue/resource_request_body.h
@@ -39,6 +39,8 @@ class WEBKIT_GLUE_EXPORT ResourceRequestBody
uint64 offset, uint64 length,
const base::Time& expected_modification_time);
void AppendBlob(const GURL& blob_url);
+ void AppendFileSystemFileRange(const GURL& url, uint64 offset, uint64 length,
+ const base::Time& expected_modification_time);
// Creates a new UploadData from this request body. This also resolves
// any blob references using given |blob_controller|.
diff --git a/webkit/glue/weburlloader_impl.cc b/webkit/glue/weburlloader_impl.cc
index edc15424..cb4793c 100644
--- a/webkit/glue/weburlloader_impl.cc
+++ b/webkit/glue/weburlloader_impl.cc
@@ -469,6 +469,16 @@ void WebURLLoaderImpl::Context::Start(
base::Time::FromDoubleT(element.modificationTime));
}
break;
+ case WebHTTPBody::Element::TypeURL: {
+ GURL url = GURL(element.url);
+ DCHECK(url.SchemeIsFileSystem());
+ request_body->AppendFileSystemFileRange(
+ url,
+ static_cast<uint64>(element.fileStart),
+ static_cast<uint64>(element.fileLength),
+ base::Time::FromDoubleT(element.modificationTime));
+ break;
+ }
case WebHTTPBody::Element::TypeBlob:
request_body->AppendBlob(GURL(element.blobURL));
break;