https://bugs.webkit.org/show_bug.cgi?id=155117
rdar://problem/6802240
Patch by Jeremy Jones <jeremyj@apple.com> on 2016-03-10
Reviewed by Simon Fraser.
Source/WebCore:
No new tests because no new functionality was added.
This will prevent persistent media caches when webkit is using in memory caching.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerShouldUsePersistentCache): Added.
* html/HTMLMediaElement.h: Declare mediaPlayerShouldUsePersistentCache().
* page/ChromeClient.h: Declare mediaPlayerShouldUsePersistentCache().
* platform/graphics/MediaPlayer.h:
(WebCore::MediaPlayerClient::mediaPlayerShouldUsePersistentCache): Added.
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Set property on AVAssetOptions.
Source/WebKit/mac:
Implement mediaShouldUsePersistentCache to disable media caching when NSURLCache is disabled.
* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::mediaShouldUsePersistentCache): Added.
Source/WebKit2:
Make AVAsset AVURLAssetUsesNoPersistentCacheKey match !m_websiteDataStore->isPersistent()
This will prevent persistent media caches when webkit is using in-memory caching.
* Shared/WebPageCreationParameters.cpp: Add mediaShouldUsePersistentCache.
(WebKit::WebPageCreationParameters::encode):
(WebKit::WebPageCreationParameters::decode):
* Shared/WebPageCreationParameters.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::creationParameters): Add mediaShouldUsePersistentCache.
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::mediaShouldUsePersistentCache): Added.
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_mediaUsesPersistentCache): Added.
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::mediaShouldUsePersistentCache): Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@197990
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2016-03-10 Jeremy Jones <jeremyj@apple.com>
+
+ Set AVURLAssetUsesNoPersistentCacheKey on AVAsset to match caching policy.
+ https://bugs.webkit.org/show_bug.cgi?id=155117
+ rdar://problem/6802240
+
+ Reviewed by Simon Fraser.
+
+ No new tests because no new functionality was added.
+
+ This will prevent persistent media caches when webkit is using in memory caching.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::mediaPlayerShouldUsePersistentCache): Added.
+ * html/HTMLMediaElement.h: Declare mediaPlayerShouldUsePersistentCache().
+ * page/ChromeClient.h: Declare mediaPlayerShouldUsePersistentCache().
+ * platform/graphics/MediaPlayer.h:
+ (WebCore::MediaPlayerClient::mediaPlayerShouldUsePersistentCache): Added.
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Set property on AVAssetOptions.
+
2016-03-10 Jer Noble <jer.noble@apple.com>
CRASH at WebCore::RenderView::updateVisibleViewportRect
return adoptRef(*new MediaResourceLoader(document(), fastGetAttribute(HTMLNames::crossoriginAttr)));
}
+bool HTMLMediaElement::mediaPlayerShouldUsePersistentCache() const
+{
+ if (!document().page())
+ return false;
+
+ return document().page()->chrome().client().mediaShouldUsePersistentCache();
+}
+
bool HTMLMediaElement::mediaPlayerShouldWaitForResponseToAuthenticationChallenge(const AuthenticationChallenge& challenge)
{
Frame* frame = document().frame();
bool mediaPlayerIsLooping() const override;
CachedResourceLoader* mediaPlayerCachedResourceLoader() override;
RefPtr<PlatformMediaResourceLoader> mediaPlayerCreateResourceLoader() override;
+ bool mediaPlayerShouldUsePersistentCache() const override;
#if PLATFORM(WIN) && USE(AVFOUNDATION)
GraphicsDeviceAdapter* mediaPlayerGraphicsDeviceAdapter(const MediaPlayer*) const override;
virtual void didInvalidateDocumentMarkerRects() { }
+ virtual bool mediaShouldUsePersistentCache() const { return true; }
+
protected:
virtual ~ChromeClient() { }
};
virtual CachedResourceLoader* mediaPlayerCachedResourceLoader() { return 0; }
virtual RefPtr<PlatformMediaResourceLoader> mediaPlayerCreateResourceLoader() { return nullptr; }
virtual bool doesHaveAttribute(const AtomicString&, AtomicString* = 0) const { return false; }
+ virtual bool mediaPlayerShouldUsePersistentCache() const { return true; }
#if ENABLE(VIDEO_TRACK)
virtual void mediaPlayerDidAddAudioTrack(PassRefPtr<AudioTrackPrivate>) { }
#if ENABLE(AVF_CAPTIONS)
SOFT_LINK_POINTER(AVFoundation, AVURLAssetHTTPCookiesKey, NSString*)
SOFT_LINK_POINTER(AVFoundation, AVURLAssetOutOfBandAlternateTracksKey, NSString*)
+SOFT_LINK_POINTER(AVFoundation, AVURLAssetUsesNoPersistentCacheKey, NSString*)
SOFT_LINK_POINTER(AVFoundation, AVOutOfBandAlternateTrackDisplayNameKey, NSString*)
SOFT_LINK_POINTER(AVFoundation, AVOutOfBandAlternateTrackExtendedLanguageTagKey, NSString*)
SOFT_LINK_POINTER(AVFoundation, AVOutOfBandAlternateTrackIsDefaultKey, NSString*)
#define AVURLAssetHTTPCookiesKey getAVURLAssetHTTPCookiesKey()
#define AVURLAssetOutOfBandAlternateTracksKey getAVURLAssetOutOfBandAlternateTracksKey()
+#define AVURLAssetUsesNoPersistentCacheKey getAVURLAssetUsesNoPersistentCacheKey()
#define AVOutOfBandAlternateTrackDisplayNameKey getAVOutOfBandAlternateTrackDisplayNameKey()
#define AVOutOfBandAlternateTrackExtendedLanguageTagKey getAVOutOfBandAlternateTrackExtendedLanguageTagKey()
#define AVOutOfBandAlternateTrackIsDefaultKey getAVOutOfBandAlternateTrackIsDefaultKey()
}
#endif
+ [options setObject:[NSNumber numberWithBool:!player()->client().mediaPlayerShouldUsePersistentCache()] forKey:AVURLAssetUsesNoPersistentCacheKey];
+
NSURL *cocoaURL = canonicalURL(url);
m_avAsset = adoptNS([allocAVURLAssetInstance() initWithURL:cocoaURL options:options.get()]);
+2016-03-10 Jeremy Jones <jeremyj@apple.com>
+
+ Set AVURLAssetUsesNoPersistentCacheKey on AVAsset to match caching policy.
+ https://bugs.webkit.org/show_bug.cgi?id=155117
+ rdar://problem/6802240
+
+ Reviewed by Simon Fraser.
+
+ Implement mediaShouldUsePersistentCache to disable media caching when NSURLCache is disabled.
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::mediaShouldUsePersistentCache): Added.
+
2016-03-10 Simon Fraser <simon.fraser@apple.com>
Font antialiasing (smoothing) changes when elements are rendered into compositing layers
void setMockMediaPlaybackTargetPickerEnabled(bool) override;
void setMockMediaPlaybackTargetPickerState(const String&, WebCore::MediaPlaybackTargetContext::State) override;
#endif
+
+ bool mediaShouldUsePersistentCache() const override;
private:
WebView *m_webView;
}
#endif
+
+bool WebChromeClient::mediaShouldUsePersistentCache() const
+{
+ return [[NSURLCache sharedURLCache] diskCapacity] > 0;
+}
+2016-03-10 Jeremy Jones <jeremyj@apple.com>
+
+ Set AVURLAssetUsesNoPersistentCacheKey on AVAsset to match caching policy.
+ https://bugs.webkit.org/show_bug.cgi?id=155117
+ rdar://problem/6802240
+
+ Reviewed by Simon Fraser.
+
+ Make AVAsset AVURLAssetUsesNoPersistentCacheKey match !m_websiteDataStore->isPersistent()
+ This will prevent persistent media caches when webkit is using in-memory caching.
+
+ * Shared/WebPageCreationParameters.cpp: Add mediaShouldUsePersistentCache.
+ (WebKit::WebPageCreationParameters::encode):
+ (WebKit::WebPageCreationParameters::decode):
+ * Shared/WebPageCreationParameters.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::creationParameters): Add mediaShouldUsePersistentCache.
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::mediaShouldUsePersistentCache): Added.
+ * WebProcess/WebCoreSupport/WebChromeClient.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::m_mediaUsesPersistentCache): Added.
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::mediaShouldUsePersistentCache): Added.
+
2016-03-10 Nan Wang <n_wang@apple.com>
AX: Force allow user zoom
encoder << userContentControllerID;
encoder << visitedLinkTableID;
encoder << websiteDataStoreID;
+ encoder << mediaShouldUsePersistentCache;
encoder << canRunBeforeUnloadConfirmPanel;
encoder << canRunModal;
encoder << deviceScaleFactor;
return false;
if (!decoder.decode(parameters.websiteDataStoreID))
return false;
+ if (!decoder.decode(parameters.mediaShouldUsePersistentCache))
+ return false;
if (!decoder.decode(parameters.canRunBeforeUnloadConfirmPanel))
return false;
if (!decoder.decode(parameters.canRunModal))
uint64_t userContentControllerID;
uint64_t visitedLinkTableID;
uint64_t websiteDataStoreID;
+ bool mediaShouldUsePersistentCache;
bool canRunBeforeUnloadConfirmPanel;
bool canRunModal;
parameters.userContentControllerID = m_userContentController->identifier();
parameters.visitedLinkTableID = m_visitedLinkStore->identifier();
parameters.websiteDataStoreID = m_websiteDataStore->identifier();
+ parameters.mediaShouldUsePersistentCache = m_websiteDataStore->isPersistent();
parameters.canRunBeforeUnloadConfirmPanel = m_uiClient->canRunBeforeUnloadConfirmPanel();
parameters.canRunModal = m_canRunModal;
parameters.deviceScaleFactor = deviceScaleFactor();
{
m_page->findController().didInvalidateDocumentMarkerRects();
}
+
+bool WebChromeClient::mediaShouldUsePersistentCache() const
+{
+ return m_page->mediaShouldUsePersistentCache();
+}
} // namespace WebKit
#endif
void didInvalidateDocumentMarkerRects() override;
+ bool mediaShouldUsePersistentCache() const override;
String m_cachedToolTip;
mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame;
#endif
, m_mainFrameProgressCompleted(false)
, m_shouldDispatchFakeMouseMoveEvents(true)
+ , m_mediaShouldUsePersistentCache(parameters.mediaShouldUsePersistentCache)
{
ASSERT(m_pageID);
void didRestoreScrollPosition();
+ bool mediaShouldUsePersistentCache() const { return m_mediaShouldUsePersistentCache; }
+
bool isControlledByAutomation() const;
void setControlledByAutomation(bool);
#if USE(OS_STATE)
std::chrono::system_clock::time_point m_loadCommitTime;
#endif
+
+ bool m_mediaShouldUsePersistentCache;
};
} // namespace WebKit