Diff
Modified: trunk/Source/WebCore/ChangeLog (215815 => 215816)
--- trunk/Source/WebCore/ChangeLog 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/ChangeLog 2017-04-26 18:22:27 UTC (rev 215816)
@@ -1,3 +1,33 @@
+2017-04-26 Antti Koivisto <[email protected]>
+
+ Enable expired-only reload policy on Mac and iOS
+ https://bugs.webkit.org/show_bug.cgi?id=171264
+ <rdar://problem/31807637>
+
+ Reviewed by Andreas Kling.
+
+ Limit the behavior to http and data URLs (where we explicitly know about expiration).
+
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::setCSSStyleSheet):
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::subresourceCachePolicy):
+
+ Pass the URL so we can test for protocol.
+
+ * loader/FrameLoader.h:
+ * loader/NavigationAction.cpp:
+ (WebCore::navigationType):
+
+ Test for reload navigation type correctly.
+
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::load):
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::CachedResourceLoader::determineRevalidationPolicy):
+ (WebCore::CachedResourceLoader::cachePolicy):
+ * loader/cache/CachedResourceLoader.h:
+
2017-04-26 WebKit Contributor <[email protected]>
Response.blob() does not set the content-type based on the header value.
Modified: trunk/Source/WebCore/html/HTMLLinkElement.cpp (215815 => 215816)
--- trunk/Source/WebCore/html/HTMLLinkElement.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/html/HTMLLinkElement.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -377,7 +377,7 @@
Ref<HTMLLinkElement> protectedThis(*this);
CSSParserContext parserContext(document(), baseURL, charset);
- auto cachePolicy = frame->loader().subresourceCachePolicy();
+ auto cachePolicy = frame->loader().subresourceCachePolicy(baseURL);
if (auto restoredSheet = const_cast<CachedCSSStyleSheet*>(cachedStyleSheet)->restoreParsedStyleSheet(parserContext, cachePolicy)) {
ASSERT(restoredSheet->isCacheable());
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (215815 => 215816)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -2195,7 +2195,7 @@
return m_loadType;
}
-CachePolicy FrameLoader::subresourceCachePolicy() const
+CachePolicy FrameLoader::subresourceCachePolicy(const URL& url) const
{
if (Page* page = m_frame.page()) {
if (page->isResourceCachingDisabled())
@@ -2209,7 +2209,7 @@
return CachePolicyReload;
if (Frame* parentFrame = m_frame.tree().parent()) {
- CachePolicy parentCachePolicy = parentFrame->loader().subresourceCachePolicy();
+ CachePolicy parentCachePolicy = parentFrame->loader().subresourceCachePolicy(url);
if (parentCachePolicy != CachePolicyVerify)
return parentCachePolicy;
}
@@ -2228,7 +2228,11 @@
case FrameLoadType::Replace:
case FrameLoadType::Same:
case FrameLoadType::Standard:
+ return CachePolicyVerify;
case FrameLoadType::ReloadExpiredOnly:
+ // We know about expiration for HTTP and data. Do a normal reload otherwise.
+ if (!url.protocolIsInHTTPFamily() && !url.protocolIsData())
+ return CachePolicyReload;
return CachePolicyVerify;
}
Modified: trunk/Source/WebCore/loader/FrameLoader.h (215815 => 215816)
--- trunk/Source/WebCore/loader/FrameLoader.h 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/FrameLoader.h 2017-04-26 18:22:27 UTC (rev 215816)
@@ -186,7 +186,7 @@
WEBCORE_EXPORT FrameLoadType loadType() const;
- CachePolicy subresourceCachePolicy() const;
+ CachePolicy subresourceCachePolicy(const URL&) const;
void didReachLayoutMilestone(LayoutMilestones);
void didFirstLayout();
Modified: trunk/Source/WebCore/loader/NavigationAction.cpp (215815 => 215816)
--- trunk/Source/WebCore/loader/NavigationAction.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/NavigationAction.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -41,7 +41,7 @@
return NavigationType::FormSubmitted;
if (haveEvent)
return NavigationType::LinkClicked;
- if (frameLoadType == FrameLoadType::Reload || frameLoadType == FrameLoadType::ReloadFromOrigin)
+ if (isReload(frameLoadType))
return NavigationType::Reload;
if (isBackForwardLoadType(frameLoadType))
return NavigationType::BackForward;
Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (215815 => 215816)
--- trunk/Source/WebCore/loader/cache/CachedResource.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -223,8 +223,8 @@
const String& lastModified = resourceToRevalidate->response().httpHeaderField(HTTPHeaderName::LastModified);
const String& eTag = resourceToRevalidate->response().httpHeaderField(HTTPHeaderName::ETag);
if (!lastModified.isEmpty() || !eTag.isEmpty()) {
- ASSERT(cachedResourceLoader.cachePolicy(type()) != CachePolicyReload);
- if (cachedResourceLoader.cachePolicy(type()) == CachePolicyRevalidate)
+ ASSERT(cachedResourceLoader.cachePolicy(type(), url()) != CachePolicyReload);
+ if (cachedResourceLoader.cachePolicy(type(), url()) == CachePolicyRevalidate)
m_resourceRequest.setHTTPHeaderField(HTTPHeaderName::CacheControl, "max-age=0");
if (!lastModified.isEmpty())
m_resourceRequest.setHTTPHeaderField(HTTPHeaderName::IfModifiedSince, lastModified);
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (215815 => 215816)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -969,8 +969,10 @@
return Use;
ASSERT(!existingResource->validationInProgress());
+ auto cachePolicy = this->cachePolicy(type, request.url());
+
// Validate the redirect chain.
- bool cachePolicyIsHistoryBuffer = cachePolicy(type) == CachePolicyHistoryBuffer;
+ bool cachePolicyIsHistoryBuffer = cachePolicy == CachePolicyHistoryBuffer;
if (!existingResource->redirectChainAllowsReuse(cachePolicyIsHistoryBuffer ? ReuseExpiredRedirection : DoNotReuseExpiredRedirection)) {
LOG(ResourceLoading, "CachedResourceLoader::determineRevalidationPolicy reloading due to not cached or expired redirections.");
logMemoryCacheResourceRequest(frame(), DiagnosticLoggingKeys::inMemoryCacheKey(), DiagnosticLoggingKeys::unusedReasonRedirectChainKey());
@@ -1009,7 +1011,7 @@
return Use;
// CachePolicyReload always reloads
- if (cachePolicy(type) == CachePolicyReload) {
+ if (cachePolicy == CachePolicyReload) {
LOG(ResourceLoading, "CachedResourceLoader::determineRevalidationPolicy reloading due to CachePolicyReload.");
logMemoryCacheResourceRequest(frame(), DiagnosticLoggingKeys::inMemoryCacheKey(), DiagnosticLoggingKeys::unusedReasonReloadKey());
return Reload;
@@ -1033,7 +1035,7 @@
return Use;
}
- auto revalidationDecision = existingResource->makeRevalidationDecision(cachePolicy(type));
+ auto revalidationDecision = existingResource->makeRevalidationDecision(cachePolicy);
logResourceRevalidationDecision(revalidationDecision, frame());
// Check if the cache headers requires us to revalidate (cache expiration for example).
@@ -1117,7 +1119,7 @@
}
}
-CachePolicy CachedResourceLoader::cachePolicy(CachedResource::Type type) const
+CachePolicy CachedResourceLoader::cachePolicy(CachedResource::Type type, const URL& url) const
{
Frame* frame = this->frame();
if (!frame)
@@ -1124,7 +1126,7 @@
return CachePolicyVerify;
if (type != CachedResource::MainResource)
- return frame->loader().subresourceCachePolicy();
+ return frame->loader().subresourceCachePolicy(url);
if (Page* page = frame->page()) {
if (page->isResourceCachingDisabled())
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.h (215815 => 215816)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.h 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.h 2017-04-26 18:22:27 UTC (rev 215816)
@@ -110,7 +110,7 @@
bool shouldDeferImageLoad(const URL&) const;
bool shouldPerformImageLoad(const URL&) const;
- CachePolicy cachePolicy(CachedResource::Type) const;
+ CachePolicy cachePolicy(CachedResource::Type, const URL&) const;
Frame* frame() const; // Can be null
Document* document() const { return m_document; } // Can be null
Modified: trunk/Source/WebKit2/ChangeLog (215815 => 215816)
--- trunk/Source/WebKit2/ChangeLog 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-26 18:22:27 UTC (rev 215816)
@@ -1,3 +1,20 @@
+2017-04-26 Antti Koivisto <[email protected]>
+
+ Enable expired-only reload policy on Mac and iOS
+ https://bugs.webkit.org/show_bug.cgi?id=171264
+ <rdar://problem/31807637>
+
+ Reviewed by Andreas Kling.
+
+ Enable the reload policy where only expired subresources are revalidated on Mac and iOS.
+ The behavor is enabled in Safari and for other clients based on SDK version check.
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageReload):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView reload]):
+ * UIProcess/Cocoa/VersionChecks.h:
+
2017-04-26 Andy Estes <[email protected]>
[macOS] Add picture-in-picture support to WebPlaybackControlsManager
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (215815 => 215816)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2017-04-26 18:22:27 UTC (rev 215816)
@@ -93,6 +93,10 @@
#include <WebCore/MediaSessionEvents.h>
#endif
+#if PLATFORM(COCOA)
+#include "VersionChecks.h"
+#endif
+
using namespace WebCore;
using namespace WebKit;
@@ -242,7 +246,13 @@
void WKPageReload(WKPageRef pageRef)
{
- toImpl(pageRef)->reload({ });
+ OptionSet<WebCore::ReloadOption> reloadOptions;
+#if PLATFORM(COCOA)
+ if (linkedOnOrAfter(WebKit::SDKVersion::FirstWithExpiredOnlyReloadBehavior))
+ reloadOptions |= WebCore::ReloadOption::ExpiredOnly;
+#endif
+
+ toImpl(pageRef)->reload(reloadOptions);
}
void WKPageReloadWithoutContentBlockers(WKPageRef pageRef)
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (215815 => 215816)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2017-04-26 18:22:27 UTC (rev 215816)
@@ -839,7 +839,11 @@
- (WKNavigation *)reload
{
- auto navigation = _page->reload({ });
+ OptionSet<WebCore::ReloadOption> reloadOptions;
+ if (linkedOnOrAfter(WebKit::SDKVersion::FirstWithExpiredOnlyReloadBehavior))
+ reloadOptions |= WebCore::ReloadOption::ExpiredOnly;
+
+ auto navigation = _page->reload(reloadOptions);
if (!navigation)
return nil;
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h (215815 => 215816)
--- trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h 2017-04-26 18:17:17 UTC (rev 215815)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/VersionChecks.h 2017-04-26 18:22:27 UTC (rev 215816)
@@ -36,10 +36,12 @@
FirstWithExceptionsForDuplicateCompletionHandlerCalls = DYLD_IOS_VERSION_11_0,
FirstToExcludeLocalStorageFromBackup = DYLD_IOS_VERSION_11_0,
FirstToUseSelectionGranularityCharacterByDefault = DYLD_IOS_VERSION_11_0,
+ FirstWithExpiredOnlyReloadBehavior = DYLD_IOS_VERSION_11_0,
#elif PLATFORM(MAC)
FirstWithNetworkCache = DYLD_MACOSX_VERSION_10_11,
FirstWithExceptionsForDuplicateCompletionHandlerCalls = DYLD_MACOSX_VERSION_10_13,
- FirstWithDropToNavigateDisallowedByDefault = DYLD_MACOSX_VERSION_10_13
+ FirstWithDropToNavigateDisallowedByDefault = DYLD_MACOSX_VERSION_10_13,
+ FirstWithExpiredOnlyReloadBehavior = DYLD_MACOSX_VERSION_10_13,
#endif
};