| Index: Source/core/loader/FrameFetchContext.cpp
|
| diff --git a/Source/core/loader/FrameFetchContext.cpp b/Source/core/loader/FrameFetchContext.cpp
|
| index 8cf3d64d7a1dc9f9d562471d64c1bb3719b3d0d3..34fd9352c511149f23717e83905bf790bbc0693c 100644
|
| --- a/Source/core/loader/FrameFetchContext.cpp
|
| +++ b/Source/core/loader/FrameFetchContext.cpp
|
| @@ -162,15 +162,22 @@ ResourceRequestCachePolicy FrameFetchContext::resourceRequestCachePolicy(const R
|
| FrameLoadType frameLoadType = frame()->loader().loadType();
|
| if (request.httpMethod() == "POST" && frameLoadType == FrameLoadTypeBackForward)
|
| return ReturnCacheDataDontLoad;
|
| - if (!frame()->host()->overrideEncoding().isEmpty() || frameLoadType == FrameLoadTypeBackForward)
|
| + if (!frame()->host()->overrideEncoding().isEmpty())
|
| return ReturnCacheDataElseLoad;
|
| - if (frameLoadType == FrameLoadTypeReloadFromOrigin)
|
| - return ReloadBypassingCache;
|
| - if (frameLoadType == FrameLoadTypeReload || frameLoadType == FrameLoadTypeSame || request.isConditional() || request.httpMethod() == "POST")
|
| + if (frameLoadType == FrameLoadTypeSame || request.isConditional() || request.httpMethod() == "POST")
|
| return ReloadIgnoringCacheData;
|
| - Frame* parent = frame()->tree().parent();
|
| - if (parent && parent->isLocalFrame())
|
| - return toLocalFrame(parent)->document()->fetcher()->context().resourceRequestCachePolicy(request, type);
|
| +
|
| + for (Frame* f = frame(); f; f = f->tree().parent()) {
|
| + if (!f->isLocalFrame())
|
| + continue;
|
| + frameLoadType = toLocalFrame(f)->loader().loadType();
|
| + if (frameLoadType == FrameLoadTypeBackForward)
|
| + return ReturnCacheDataElseLoad;
|
| + if (frameLoadType == FrameLoadTypeReloadFromOrigin)
|
| + return ReloadBypassingCache;
|
| + if (frameLoadType == FrameLoadTypeReload)
|
| + return ReloadIgnoringCacheData;
|
| + }
|
| return UseProtocolCachePolicy;
|
| }
|
|
|
|
|