diff options
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/glue_serialize.cc | 20 | ||||
-rw-r--r-- | webkit/glue/resource_request_body.cc | 16 | ||||
-rw-r--r-- | webkit/glue/resource_request_body.h | 2 | ||||
-rw-r--r-- | webkit/glue/weburlloader_impl.cc | 10 |
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; |