Index: net/spdy/spdy_framer.cc |
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc |
index 5b4c11f628991160a799754a2bca7ef27285b825..4d716fab12f9d453306bbe2a7f72a947dc41a742 100644 |
--- a/net/spdy/spdy_framer.cc |
+++ b/net/spdy/spdy_framer.cc |
@@ -1189,10 +1189,17 @@ size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) { |
} |
break; |
case WINDOW_UPDATE: { |
- SpdyWindowUpdateControlFrame *window_update_frame = |
- reinterpret_cast<SpdyWindowUpdateControlFrame*>(&control_frame); |
- visitor_->OnWindowUpdate(window_update_frame->stream_id(), |
- window_update_frame->delta_window_size()); |
+ SpdyFrameReader reader(current_frame_buffer_.get(), |
+ current_frame_len_); |
+ reader.Seek(SpdyFrame::kHeaderSize); // Seek past frame header. |
+ SpdyStreamId stream_id = kInvalidStream; |
+ uint32 delta_window_size = 0; |
+ bool successful_read = reader.ReadUInt31(&stream_id); |
+ DCHECK(successful_read); |
+ successful_read = reader.ReadUInt32(&delta_window_size); |
+ DCHECK(successful_read); |
+ DCHECK(reader.IsDoneReading()); |
+ visitor_->OnWindowUpdate(stream_id, delta_window_size); |
} |
break; |
case RST_STREAM: { |
@@ -1645,12 +1652,11 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
return builder.take(); |
} |
-SpdyWindowUpdateControlFrame* SpdyFramer::CreateWindowUpdate( |
+SpdyFrame* SpdyFramer::CreateWindowUpdate( |
SpdyStreamId stream_id, |
uint32 delta_window_size) const { |
SpdyWindowUpdateIR window_update(stream_id, delta_window_size); |
- return reinterpret_cast<SpdyWindowUpdateControlFrame*>( |
- SerializeWindowUpdate(window_update)); |
+ return SerializeWindowUpdate(window_update); |
} |
SpdySerializedFrame* SpdyFramer::SerializeWindowUpdate( |