| Index: Source/core/fetch/ResourceLoader.cpp | 
| diff --git a/Source/core/fetch/ResourceLoader.cpp b/Source/core/fetch/ResourceLoader.cpp | 
| index 1ad15e7919e908f23367c022ecdaba8afc063e31..0d2d6c42ed04fc51e7f457bb0548394533e55709 100644 | 
| --- a/Source/core/fetch/ResourceLoader.cpp | 
| +++ b/Source/core/fetch/ResourceLoader.cpp | 
| @@ -313,8 +313,15 @@ void ResourceLoader::didReceiveResponse(blink::WebURLLoader*, const blink::WebUR | 
| const ResourceResponse& resourceResponse = response.toResourceResponse(); | 
|  | 
| if (responseNeedsAccessControlCheck()) { | 
| -        m_resource->setResponse(resourceResponse); | 
| -        if (!m_host->canAccessResource(m_resource, response.url())) { | 
| +        // If the response successfully validated a cached resource, perform | 
| +        // the access control with respect to it. Need to do this right here | 
| +        // before the resource switches clients over to that validated resource. | 
| +        Resource* resource = m_resource; | 
| +        if (resource->isCacheValidator() && resourceResponse.httpStatusCode() == 304) | 
| +            resource = m_resource->resourceToRevalidate(); | 
| +        else | 
| +            m_resource->setResponse(resourceResponse); | 
| +        if (!m_host->canAccessResource(resource, response.url())) { | 
| cancel(); | 
| return; | 
| } | 
|  |