Title: [198393] trunk/Source
Revision
198393
Author
[email protected]
Date
2016-03-18 00:56:20 -0700 (Fri, 18 Mar 2016)

Log Message

Disable Caches in Safari's Develop menu does not disable caches.
https://bugs.webkit.org/show_bug.cgi?id=64483

Reviewed by Antti Koivisto.

Source/WebCore:

Add a new setting, ResourceCachingDisabled, for use in future versions of Safari.

* history/PageCache.cpp:
(WebCore::canCachePage): Check resourceCachingDisabled and return false.
(WebCore::PageCache::take): Check resourceCachingDisabled, and return null.
(WebCore::PageCache::get): Ditto.

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::subresourceCachePolicy): Check resourceCachingDisabled, and
request a reload.
(WebCore::FrameLoader::addExtraFieldsToRequest): Check resourceCachingDisabled, and
set the cache policy to trigger a reload.
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::cachePolicy): Check resourceCachingDisabled, and
request a reload.

* page/Settings.in: Added resourceCachingDisabled.

Source/WebKit/mac:

* WebView/WebPreferenceKeysPrivate.h: Added ResourceCachingDisabled.
* WebView/WebPreferences.mm:
(-[WebPreferences isResourceCachingDisabled]): Added.
(-[WebPreferences setResourceCachingDisabled:]): Added.
* WebView/WebPreferencesPrivate.h: Added resourceCachingDisabled.
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]): Push resourceCachingDisabled into WebCore.

Source/WebKit2:

* Shared/WebPreferencesDefinitions.h: Added ResourceCachingDisabled.
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetResourceCachingDisabled): Added.
(WKPreferencesGetResourceCachingDisabled): Added.
* UIProcess/API/C/WKPreferencesRefPrivate.h: Ditto.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences): Push ResourceCachingDisabled setting
into WebCore.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (198392 => 198393)


--- trunk/Source/WebCore/ChangeLog	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebCore/ChangeLog	2016-03-18 07:56:20 UTC (rev 198393)
@@ -1,3 +1,28 @@
+2016-03-18  Darin Adler  <[email protected]>
+
+        Disable Caches in Safari's Develop menu does not disable caches.
+        https://bugs.webkit.org/show_bug.cgi?id=64483
+
+        Reviewed by Antti Koivisto.
+
+        Add a new setting, ResourceCachingDisabled, for use in future versions of Safari.
+
+        * history/PageCache.cpp:
+        (WebCore::canCachePage): Check resourceCachingDisabled and return false.
+        (WebCore::PageCache::take): Check resourceCachingDisabled, and return null.
+        (WebCore::PageCache::get): Ditto.
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::subresourceCachePolicy): Check resourceCachingDisabled, and
+        request a reload.
+        (WebCore::FrameLoader::addExtraFieldsToRequest): Check resourceCachingDisabled, and
+        set the cache policy to trigger a reload.
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::cachePolicy): Check resourceCachingDisabled, and
+        request a reload.
+
+        * page/Settings.in: Added resourceCachingDisabled.
+
 2016-03-18  Csaba Osztrogonác  <[email protected]>
 
         [Mac][cmake] Unreviewed speculative buildfix. Just for fun.

Modified: trunk/Source/WebCore/history/PageCache.cpp (198392 => 198393)


--- trunk/Source/WebCore/history/PageCache.cpp	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebCore/history/PageCache.cpp	2016-03-18 07:56:20 UTC (rev 198393)
@@ -193,7 +193,7 @@
     DiagnosticLoggingClient& diagnosticLoggingClient = mainFrame.diagnosticLoggingClient();
     bool isCacheable = canCacheFrame(mainFrame, diagnosticLoggingClient, indentLevel + 1);
     
-    if (!page.settings().usesPageCache()) {
+    if (!page.settings().usesPageCache() || page.settings().resourceCachingDisabled()) {
         PCLOG("   -Page settings says b/f cache disabled");
         logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::isDisabledKey());
         isCacheable = false;
@@ -423,7 +423,7 @@
     m_items.remove(&item);
     std::unique_ptr<CachedPage> cachedPage = WTFMove(item.m_cachedPage);
 
-    if (cachedPage->hasExpired()) {
+    if (cachedPage->hasExpired() || (page && page->settings().resourceCachingDisabled())) {
         LOG(PageCache, "Not restoring page for %s from back/forward cache because cache entry has expired", item.url().string().ascii().data());
         logPageCacheFailureDiagnosticMessage(page, DiagnosticLoggingKeys::expiredKey());
         return nullptr;
@@ -441,7 +441,7 @@
         return nullptr;
     }
 
-    if (cachedPage->hasExpired()) {
+    if (cachedPage->hasExpired() || (page && page->settings().resourceCachingDisabled())) {
         LOG(PageCache, "Not restoring page for %s from back/forward cache because cache entry has expired", item.url().string().ascii().data());
         logPageCacheFailureDiagnosticMessage(page, DiagnosticLoggingKeys::expiredKey());
         remove(item);

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (198392 => 198393)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2016-03-18 07:56:20 UTC (rev 198393)
@@ -2155,6 +2155,9 @@
     
 CachePolicy FrameLoader::subresourceCachePolicy() const
 {
+    if (m_frame.settings().resourceCachingDisabled())
+        return CachePolicyReload;
+
     if (m_isComplete)
         return CachePolicyVerify;
 
@@ -2561,6 +2564,11 @@
 
 void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadType loadType, bool mainResource)
 {
+    bool cachingDisabled = frame().settings().resourceCachingDisabled();
+
+    if (cachingDisabled)
+        request.setCachePolicy(ReloadIgnoringCacheData);
+
     // Don't set the cookie policy URL if it's already been set.
     // But make sure to set it on all requests regardless of protocol, as it has significance beyond the cookie policy (<rdar://problem/6616664>).
     if (request.firstPartyForCookies().isEmpty()) {
@@ -2576,7 +2584,10 @@
 
     applyUserAgent(request);
 
-    if (!mainResource) {
+    if (cachingDisabled) {
+        // Cache policy was already set above in the non-HTTP-specific code.
+        loadType = FrameLoadType::ReloadFromOrigin;
+    } else if (!mainResource) {
         if (request.isConditional())
             request.setCachePolicy(ReloadIgnoringCacheData);
         else if (documentLoader()->isLoadingInAPISense()) {
@@ -2613,7 +2624,7 @@
             request.setHTTPHeaderField(HTTPHeaderName::Pragma, "no-cache");
         }
     }
-    
+
     if (mainResource)
         request.setHTTPAccept(defaultAcceptHeader);
 

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (198392 => 198393)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2016-03-18 07:56:20 UTC (rev 198393)
@@ -923,13 +923,17 @@
 
 CachePolicy CachedResourceLoader::cachePolicy(CachedResource::Type type) const
 {
-    if (!frame())
+    Frame* frame = this->frame();
+    if (!frame)
         return CachePolicyVerify;
 
+    if (frame->settings().resourceCachingDisabled())
+        return CachePolicyReload;
+
     if (type != CachedResource::MainResource)
-        return frame()->loader().subresourceCachePolicy();
+        return frame->loader().subresourceCachePolicy();
     
-    switch (frame()->loader().loadType()) {
+    switch (frame->loader().loadType()) {
     case FrameLoadType::ReloadFromOrigin:
     case FrameLoadType::Reload:
         return CachePolicyReload;

Modified: trunk/Source/WebCore/page/Settings.in (198392 => 198393)


--- trunk/Source/WebCore/page/Settings.in	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebCore/page/Settings.in	2016-03-18 07:56:20 UTC (rev 198393)
@@ -251,3 +251,5 @@
 # enforces all frame sandbox flags (see enum SandboxFlag in SecurityContext.h), and also disables <meta http-equiv>
 # processing and subframe loading.
 contentDispositionAttachmentSandboxEnabled initial=false
+
+resourceCachingDisabled initial=false

Modified: trunk/Source/WebKit/mac/ChangeLog (198392 => 198393)


--- trunk/Source/WebKit/mac/ChangeLog	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit/mac/ChangeLog	2016-03-18 07:56:20 UTC (rev 198393)
@@ -1,3 +1,18 @@
+2016-03-18  Darin Adler  <[email protected]>
+
+        Disable Caches in Safari's Develop menu does not disable caches.
+        https://bugs.webkit.org/show_bug.cgi?id=64483
+
+        Reviewed by Antti Koivisto.
+
+        * WebView/WebPreferenceKeysPrivate.h: Added ResourceCachingDisabled.
+        * WebView/WebPreferences.mm:
+        (-[WebPreferences isResourceCachingDisabled]): Added.
+        (-[WebPreferences setResourceCachingDisabled:]): Added.
+        * WebView/WebPreferencesPrivate.h: Added resourceCachingDisabled.
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]): Push resourceCachingDisabled into WebCore.
+
 2016-03-17  Csaba Osztrogonác  <[email protected]>
 
         [cmake][Mac] Unreviewed speculative buildfix after r198088. Just for fun.

Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (198392 => 198393)


--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2016-03-18 07:56:20 UTC (rev 198393)
@@ -161,6 +161,7 @@
 #define WebKitMediaKeysStorageDirectoryKey @"WebKitMediaKeysStorageDirectory"
 #define WebKitShadowDOMEnabledPreferenceKey @"WebKitShadowDOMEnabled"
 #define WebKitCustomElementsEnabledPreferenceKey @"WebKitCustomElementsEnabled"
+#define WebKitResourceCachingDisabledPreferenceKey @"WebKitResourceCachingDisabled"
 
 #if !TARGET_OS_IPHONE
 // These are private both because callers should be using the cover methods and because the

Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (198392 => 198393)


--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2016-03-18 07:56:20 UTC (rev 198393)
@@ -704,7 +704,8 @@
 }
 
 - (void)_setUnsignedIntValue:(unsigned int)value forKey:(NSString *)key
-{    if ([self _unsignedIntValueForKey:key] == value)
+{
+    if ([self _unsignedIntValueForKey:key] == value)
         return;
     NSString *_key = KEY(key);
 #if PLATFORM(IOS)
@@ -2699,6 +2700,16 @@
     [self _setBoolValue:flag forKey:WebKitCustomElementsEnabledPreferenceKey];
 }
 
+- (BOOL)isResourceCachingDisabled
+{
+    return [self _boolValueForKey:WebKitResourceCachingDisabledPreferenceKey];
+}
+
+- (void)setResourceCachingDisabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitResourceCachingDisabledPreferenceKey];
+}
+
 @end
 
 @implementation WebPreferences (WebInternal)

Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (198392 => 198393)


--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2016-03-18 07:56:20 UTC (rev 198393)
@@ -484,5 +484,6 @@
 @property (nonatomic) BOOL _javascript_MarkupEnabled;
 @property (nonatomic) BOOL mediaDataLoadsAutomatically;
 @property (nonatomic) BOOL attachmentElementEnabled;
+@property (nonatomic, getter=isResourceCachingDisabled) BOOL resourceCachingDisabled;
 
 @end

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (198392 => 198393)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2016-03-18 07:56:20 UTC (rev 198393)
@@ -2516,6 +2516,8 @@
 #if ENABLE(ATTACHMENT_ELEMENT)
     settings.setAttachmentElementEnabled([preferences attachmentElementEnabled]);
 #endif
+
+    settings.setResourceCachingDisabled(preferences.resourceCachingDisabled);
 }
 
 static inline IMP getMethod(id o, SEL s)

Modified: trunk/Source/WebKit2/ChangeLog (198392 => 198393)


--- trunk/Source/WebKit2/ChangeLog	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit2/ChangeLog	2016-03-18 07:56:20 UTC (rev 198393)
@@ -1,3 +1,19 @@
+2016-03-18  Darin Adler  <[email protected]>
+
+        Disable Caches in Safari's Develop menu does not disable caches.
+        https://bugs.webkit.org/show_bug.cgi?id=64483
+
+        Reviewed by Antti Koivisto.
+
+        * Shared/WebPreferencesDefinitions.h: Added ResourceCachingDisabled.
+        * UIProcess/API/C/WKPreferences.cpp:
+        (WKPreferencesSetResourceCachingDisabled): Added.
+        (WKPreferencesGetResourceCachingDisabled): Added.
+        * UIProcess/API/C/WKPreferencesRefPrivate.h: Ditto.
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences): Push ResourceCachingDisabled setting
+        into WebCore.
+
 2016-03-18  Carlos Garcia Campos  <[email protected]>
 
         Unreviewed. Try to fix GTK+ debug build after r198364.

Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (198392 => 198393)


--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h	2016-03-18 07:56:20 UTC (rev 198393)
@@ -227,6 +227,7 @@
     macro(MockCaptureDevicesEnabled, mockCaptureDevicesEnabled, Bool, bool, false) \
     macro(ShadowDOMEnabled, shadowDOMEnabled, Bool, bool, true) \
     macro(CustomElementsEnabled, customElementsEnabled, Bool, bool, false) \
+    macro(ResourceCachingDisabled, resourceCachingDisabled, Bool, bool, false) \
     FOR_EACH_ADDITIONAL_WEBKIT_BOOL_PREFERENCE(macro) \
     \
 

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (198392 => 198393)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2016-03-18 07:56:20 UTC (rev 198393)
@@ -1506,3 +1506,13 @@
 {
     return toImpl(preferencesRef)->shadowDOMEnabled();
 }
+
+void WKPreferencesSetResourceCachingDisabled(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)->setResourceCachingDisabled(flag);
+}
+
+bool WKPreferencesGetResourceCachingDisabled(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)->resourceCachingDisabled();
+}

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h (198392 => 198393)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesRefPrivate.h	2016-03-18 07:56:20 UTC (rev 198393)
@@ -419,6 +419,10 @@
 WK_EXPORT void WKPreferencesSetCustomElementsEnabled(WKPreferencesRef, bool flag);
 WK_EXPORT bool WKPreferencesGetCustomElementsEnabled(WKPreferencesRef);
 
+// Defaults to false
+WK_EXPORT void WKPreferencesSetResourceCachingDisabled(WKPreferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetResourceCachingDisabled(WKPreferencesRef);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (198392 => 198393)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-03-18 07:41:54 UTC (rev 198392)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2016-03-18 07:56:20 UTC (rev 198393)
@@ -3045,6 +3045,8 @@
 
     settings.setShouldDispatchJavaScriptWindowOnErrorEvents(true);
 
+    settings.setResourceCachingDisabled(store.getBoolValueForKey(WebPreferencesKey::resourceCachingDisabledKey()));
+
 #if USE(APPLE_INTERNAL_SDK)
 #include <WebKitAdditions/WebPagePreferences.cpp>
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to