diff options
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/glue_serialize.cc | 27 | ||||
-rw-r--r-- | webkit/glue/resource_handle_impl.cc | 1 | ||||
-rw-r--r-- | webkit/glue/resource_loader_bridge.h | 5 | ||||
-rw-r--r-- | webkit/glue/weburlrequest_impl.cc | 4 |
4 files changed, 29 insertions, 8 deletions
diff --git a/webkit/glue/glue_serialize.cc b/webkit/glue/glue_serialize.cc index ecf6879..15f82c5 100644 --- a/webkit/glue/glue_serialize.cc +++ b/webkit/glue/glue_serialize.cc @@ -45,8 +45,9 @@ struct SerializeObject { // data, but not vice versa. // 3: Version 2 was broken, it stored number of UChars, not number of bytes. // This version checks and reads v1 and v2 correctly. +// 4: Adds support for storing FormData::identifier(). // Should be const, but unit tests may modify it. -int kVersion = 3; +int kVersion = 4; // A bunch of convenience functions to read/write to SerializeObjects. // The serializers assume the input data is in the correct format and so does @@ -76,11 +77,21 @@ inline void WriteInteger(int data, SerializeObject* obj) { } inline int ReadInteger(const SerializeObject* obj) { - int tmp; + int tmp = 0; obj->pickle.ReadInt(&obj->iter, &tmp); return tmp; } +inline void WriteInteger64(int64 data, SerializeObject* obj) { + obj->pickle.WriteInt64(data); +} + +inline int64 ReadInteger64(const SerializeObject* obj) { + int64 tmp = 0; + obj->pickle.ReadInt64(&obj->iter, &tmp); + return tmp; +} + inline void WriteReal(double data, SerializeObject* obj) { WriteData(&data, sizeof(double), obj); } @@ -124,8 +135,8 @@ inline void WriteString(const String& data, SerializeObject* obj) { data.length() * sizeof(UChar)); } break; - case 3: - // Version 3 writes <length in bytes><string data>. + default: + // Version 3+ writes <length in bytes><string data>. // It uses -1 in the length field to mean String(). if (data.isNull()) { obj->pickle.WriteInt(-1); @@ -135,9 +146,6 @@ inline void WriteString(const String& data, SerializeObject* obj) { data.length() * sizeof(UChar)); } break; - default: - NOTREACHED(); - break; } } @@ -199,6 +207,7 @@ static void WriteFormData(const FormData* form_data, SerializeObject* obj) { WriteString(e.m_filename, obj); } } + WriteInteger64(form_data->identifier(), obj); } static PassRefPtr<FormData> ReadFormData(const SerializeObject* obj) { @@ -219,6 +228,8 @@ static PassRefPtr<FormData> ReadFormData(const SerializeObject* obj) { form_data->appendFile(ReadString(obj)); } } + if (obj->version >= 4) + form_data->setIdentifier(ReadInteger64(obj)); return form_data.release(); } @@ -264,7 +275,7 @@ static PassRefPtr<HistoryItem> ReadHistoryItem(const SerializeObject* obj) { // See note in WriteHistoryItem. on this. obj->version = ReadInteger(obj); - if (obj->version > kVersion) + if (obj->version > kVersion || obj->version < 1) return NULL; RefPtr<HistoryItem> item = HistoryItem::create(); diff --git a/webkit/glue/resource_handle_impl.cc b/webkit/glue/resource_handle_impl.cc index 99290d3..fbf6379 100644 --- a/webkit/glue/resource_handle_impl.cc +++ b/webkit/glue/resource_handle_impl.cc @@ -451,6 +451,7 @@ bool ResourceHandleInternal::Start( webkit_glue::StringToStdWString(e.m_filename)); } } + bridge_->SetUploadIdentifier(request_.httpBody()->identifier()); } if (sync_load_response) { diff --git a/webkit/glue/resource_loader_bridge.h b/webkit/glue/resource_loader_bridge.h index 161c237..0740f54 100644 --- a/webkit/glue/resource_loader_bridge.h +++ b/webkit/glue/resource_loader_bridge.h @@ -200,6 +200,11 @@ class ResourceLoaderBridge { virtual void AppendFileRangeToUpload(const std::wstring& file_path, uint64 offset, uint64 length) = 0; + // Call this method before calling Start() to assign an upload identifier to + // this request. This is used to enable caching of POST responses. A value + // of 0 implies the unspecified identifier. + virtual void SetUploadIdentifier(int64 identifier) = 0; + // Call this method to initiate the request. If this method succeeds, then // the peer's methods will be called asynchronously to report various events. virtual bool Start(Peer* peer) = 0; diff --git a/webkit/glue/weburlrequest_impl.cc b/webkit/glue/weburlrequest_impl.cc index 9a06f92..cf30f7e3 100644 --- a/webkit/glue/weburlrequest_impl.cc +++ b/webkit/glue/weburlrequest_impl.cc @@ -177,6 +177,8 @@ void WebRequestImpl::GetUploadData(net::UploadData* data) const { NOTREACHED(); } } + + data->set_identifier(formdata->identifier()); } void WebRequestImpl::SetUploadData(const net::UploadData& data) @@ -199,6 +201,8 @@ void WebRequestImpl::SetUploadData(const net::UploadData& data) } } + formdata->setIdentifier(data.identifier()); + request_.resourceRequest().setHTTPBody(formdata); } |