| Index: third_party/WebKit/Source/core/fetch/ResourceLoader.cpp | 
| diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp | 
| index 0c6b3611c2b427cdc9156678b8d948ea885aeda8..a3ae8717540a5edba593bc480e1399bdefff9679 100644 | 
| --- a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp | 
| +++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp | 
| @@ -515,8 +515,15 @@ void ResourceLoader::requestSynchronously() | 
| return; | 
| RefPtr<ResourceLoadInfo> resourceLoadInfo = responseOut.toResourceResponse().resourceLoadInfo(); | 
| int64_t encodedDataLength = resourceLoadInfo ? resourceLoadInfo->encodedDataLength : WebURLLoaderClient::kUnknownEncodedDataLength; | 
| -    m_fetcher->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDataLength); | 
| -    m_resource->setResourceBuffer(dataOut); | 
| + | 
| +    // Follow the async case convention of not calling didReceiveData or | 
| +    // appending data to m_resource if the response body is empty. Copying the | 
| +    // empty buffer is a noop in most cases, but is destructive in the case of | 
| +    // a 304, where it will overwrite the cached data we should be reusing. | 
| +    if (dataOut.size()) { | 
| +        m_fetcher->didReceiveData(m_resource, dataOut.data(), dataOut.size(), encodedDataLength); | 
| +        m_resource->setResourceBuffer(dataOut); | 
| +    } | 
| didFinishLoading(0, monotonicallyIncreasingTime(), encodedDataLength); | 
| } | 
|  | 
|  |