Diff
Modified: trunk/Source/WebCore/ChangeLog (274018 => 274019)
--- trunk/Source/WebCore/ChangeLog 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/ChangeLog 2021-03-06 00:10:03 UTC (rev 274019)
@@ -1,3 +1,28 @@
+2021-03-05 Chris Dumez <cdu...@apple.com>
+
+ Update HTMLMediaElement::originsInMediaCache() to return SecurityOriginData instead of SecurityOrigin objects
+ https://bugs.webkit.org/show_bug.cgi?id=222820
+
+ Reviewed by Darin Adler.
+
+ Update HTMLMediaElement::originsInMediaCache() to return SecurityOriginData instead of SecurityOrigin
+ objects. The caller only needs SecurityOriginData objects and there was a FIXME comment about switching
+ to SecurityOriginData. SecurityOriginData is beneficial here because it is a smaller object and it
+ can be easily passed over IPC.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::originsInMediaCache):
+ * html/HTMLMediaElement.h:
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::MediaPlayer::originsInMediaCache):
+ * platform/graphics/MediaPlayer.h:
+ (WebCore::MediaPlayerFactory::originsInMediaCache const):
+ * platform/graphics/MediaPlayerPrivate.h:
+ (WebCore::MediaPlayerPrivateInterface::originsInMediaCache):
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::originsInMediaCache):
+
2021-03-05 Devin Rousso <drou...@apple.com>
[Payment Request] expose `dispatchIfShowing` in `MockPaymentCoordinator.cpp` for WebKitAdditions
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (274018 => 274019)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2021-03-06 00:10:03 UTC (rev 274019)
@@ -6434,7 +6434,7 @@
return sharedMediaCacheDirectory();
}
-HashSet<RefPtr<SecurityOrigin>> HTMLMediaElement::originsInMediaCache(const String& path)
+HashSet<SecurityOriginData> HTMLMediaElement::originsInMediaCache(const String& path)
{
return MediaPlayer::originsInMediaCache(path);
}
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (274018 => 274019)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -452,7 +452,7 @@
// Media cache management.
WEBCORE_EXPORT static void setMediaCacheDirectory(const String&);
WEBCORE_EXPORT static const String& mediaCacheDirectory();
- WEBCORE_EXPORT static HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String&);
+ WEBCORE_EXPORT static HashSet<SecurityOriginData> originsInMediaCache(const String&);
WEBCORE_EXPORT static void clearMediaCache(const String&, WallTime modifiedSince = { });
WEBCORE_EXPORT static void clearMediaCacheForOrigins(const String&, const HashSet<RefPtr<SecurityOrigin>>&);
static void resetMediaEngines();
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (274018 => 274019)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2021-03-06 00:10:03 UTC (rev 274019)
@@ -1215,9 +1215,9 @@
toHash.add(fromHash.begin(), fromHash.end());
}
-HashSet<RefPtr<SecurityOrigin>> MediaPlayer::originsInMediaCache(const String& path)
+HashSet<SecurityOriginData> MediaPlayer::originsInMediaCache(const String& path)
{
- HashSet<RefPtr<SecurityOrigin>> origins;
+ HashSet<SecurityOriginData> origins;
for (auto& engine : installedMediaEngines())
addToHash(origins, engine->originsInMediaCache(path));
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (274018 => 274019)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -302,7 +302,7 @@
static SupportsType supportsType(const MediaEngineSupportParameters&);
static void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>&);
static bool isAvailable();
- static HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String& path);
+ static HashSet<SecurityOriginData> originsInMediaCache(const String& path);
static void clearMediaCache(const String& path, WallTime modifiedSince);
static void clearMediaCacheForOrigins(const String& path, const HashSet<RefPtr<SecurityOrigin>>&);
static bool supportsKeySystem(const String& keySystem, const String& mimeType);
@@ -709,7 +709,7 @@
virtual void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>&) const = 0;
virtual MediaPlayer::SupportsType supportsTypeAndCodecs(const MediaEngineSupportParameters&) const = 0;
- virtual HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String&) const { return { }; }
+ virtual HashSet<SecurityOriginData> originsInMediaCache(const String&) const { return { }; }
virtual void clearMediaCache(const String&, WallTime) const { }
virtual void clearMediaCacheForOrigins(const String&, const HashSet<RefPtr<SecurityOrigin>>&) const { }
virtual bool supportsKeySystem(const String& /* keySystem */, const String& /* mimeType */) const { return false; }
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h (274018 => 274019)
--- trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -216,7 +216,7 @@
virtual unsigned audioDecodedByteCount() const { return 0; }
virtual unsigned videoDecodedByteCount() const { return 0; }
- HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String&) { return { }; }
+ HashSet<SecurityOriginData> originsInMediaCache(const String&) { return { }; }
void clearMediaCache(const String&, WallTime) { }
void clearMediaCacheForOrigins(const String&, const HashSet<RefPtr<SecurityOrigin>>&) { }
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (274018 => 274019)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -135,7 +135,7 @@
static void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>& types);
static MediaPlayer::SupportsType supportsTypeAndCodecs(const MediaEngineSupportParameters&);
static bool supportsKeySystem(const String& keySystem, const String& mimeType);
- static HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String&);
+ static HashSet<SecurityOriginData> originsInMediaCache(const String&);
static void clearMediaCache(const String&, WallTime modifiedSince);
static void clearMediaCacheForOrigins(const String&, const HashSet<RefPtr<SecurityOrigin>>&);
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (274018 => 274019)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2021-03-06 00:10:03 UTC (rev 274019)
@@ -301,7 +301,7 @@
return MediaPlayerPrivateAVFoundationObjC::supportsTypeAndCodecs(parameters);
}
- HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String& path) const final
+ HashSet<SecurityOriginData> originsInMediaCache(const String& path) const final
{
return MediaPlayerPrivateAVFoundationObjC::originsInMediaCache(path);
}
@@ -362,9 +362,9 @@
return assetCacheForPath(path);
}
-HashSet<RefPtr<SecurityOrigin>> MediaPlayerPrivateAVFoundationObjC::originsInMediaCache(const String& path)
+HashSet<SecurityOriginData> MediaPlayerPrivateAVFoundationObjC::originsInMediaCache(const String& path)
{
- HashSet<RefPtr<SecurityOrigin>> origins;
+ HashSet<SecurityOriginData> origins;
AVAssetCache* assetCache = assetCacheForPath(path);
if (!assetCache)
return origins;
@@ -372,7 +372,7 @@
for (NSString *key in [assetCache allKeys]) {
URL keyAsURL = URL(URL(), key);
if (keyAsURL.isValid())
- origins.add(SecurityOrigin::create(keyAsURL));
+ origins.add(SecurityOriginData::fromURL(keyAsURL));
}
return origins;
}
Modified: trunk/Source/WebKit/ChangeLog (274018 => 274019)
--- trunk/Source/WebKit/ChangeLog 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/ChangeLog 2021-03-06 00:10:03 UTC (rev 274019)
@@ -1,5 +1,33 @@
2021-03-05 Chris Dumez <cdu...@apple.com>
+ Update HTMLMediaElement::originsInMediaCache() to return SecurityOriginData instead of SecurityOrigin objects
+ https://bugs.webkit.org/show_bug.cgi?id=222820
+
+ Reviewed by Darin Adler.
+
+ Update HTMLMediaElement::originsInMediaCache() to return SecurityOriginData instead of SecurityOrigin
+ objects. The caller only needs SecurityOriginData objects and there was a FIXME comment about switching
+ to SecurityOriginData. SecurityOriginData is beneficial here because it is a smaller object and it
+ can be easily passed over IPC.
+
+ Also update the code at WebsiteDataStore::fetchDataAndApply() to crossThreadCopy() the originDatas
+ before sending them to the main thread. The previous code was passing both the SecurityOrigins
+ and the WebsiteDatas from the data store queue to the main thread without isolated copy, which was
+ fragile. For example, if HTMLMediaElement::originsInMediaCache() was caching the security origins
+ it returned, the code would not have been thread safe.
+
+ * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
+ (WebKit::RemoteMediaPlayerManagerProxy::originsInMediaCache):
+ * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
+ * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::fetchDataAndApply):
+ * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
+ (WebKit::RemoteMediaPlayerManager::originsInMediaCache):
+ * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
+
+2021-03-05 Chris Dumez <cdu...@apple.com>
+
Use WTF::DestructionThread::MainRunLoop for CallbackAggregators in WebsiteDataStore
https://bugs.webkit.org/show_bug.cgi?id=222831
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp (274018 => 274019)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp 2021-03-06 00:10:03 UTC (rev 274019)
@@ -114,7 +114,7 @@
completionHandler(result);
}
-void RemoteMediaPlayerManagerProxy::originsInMediaCache(MediaPlayerEnums::MediaEngineIdentifier engineIdentifier, const String&& path, CompletionHandler<void(Vector<WebCore::SecurityOriginData>&&)>&& completionHandler)
+void RemoteMediaPlayerManagerProxy::originsInMediaCache(MediaPlayerEnums::MediaEngineIdentifier engineIdentifier, const String&& path, CompletionHandler<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler)
{
auto engine = MediaPlayer::mediaEngine(engineIdentifier);
if (!engine) {
@@ -123,13 +123,7 @@
return;
}
- auto origins = engine->originsInMediaCache(path);
-
- Vector<WebCore::SecurityOriginData> result;
- for (auto& origin : origins)
- result.append(origin->data());
-
- completionHandler(WTFMove(result));
+ completionHandler(engine->originsInMediaCache(path));
}
void RemoteMediaPlayerManagerProxy::clearMediaCache(MediaPlayerEnums::MediaEngineIdentifier engineIdentifier, const String&&path, WallTime modifiedSince)
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h (274018 => 274019)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -78,7 +78,7 @@
// Media player factory
void getSupportedTypes(WebCore::MediaPlayerEnums::MediaEngineIdentifier, CompletionHandler<void(Vector<String>&&)>&&);
void supportsTypeAndCodecs(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const WebCore::MediaEngineSupportParameters&&, CompletionHandler<void(WebCore::MediaPlayer::SupportsType)>&&);
- void originsInMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&&, CompletionHandler<void(Vector<WebCore::SecurityOriginData>&&)>&&);
+ void originsInMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&&, CompletionHandler<void(HashSet<WebCore::SecurityOriginData>&&)>&&);
void clearMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&&, WallTime);
void clearMediaCacheForOrigins(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&&, Vector<WebCore::SecurityOriginData>&&);
void supportsKeySystem(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&&, const String&&, CompletionHandler<void(bool)>&&);
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in (274018 => 274019)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in 2021-03-06 00:10:03 UTC (rev 274019)
@@ -29,7 +29,7 @@
GetSupportedTypes(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier) -> (Vector<String> types) Synchronous
SupportsTypeAndCodecs(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, struct WebCore::MediaEngineSupportParameters type) -> (enum:uint8_t WebCore::MediaPlayerEnums::SupportsType support) Synchronous
- OriginsInMediaCache(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, String path) -> (Vector<WebCore::SecurityOriginData> origins) Synchronous
+ OriginsInMediaCache(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, String path) -> (HashSet<WebCore::SecurityOriginData> origins) Synchronous
ClearMediaCache(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, String path, WallTime modifiedSince)
ClearMediaCacheForOrigins(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, String path, Vector<WebCore::SecurityOriginData> origins)
SupportsKeySystem(enum:uint8_t WebCore::MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, String keySystem, String mimeType) -> (bool supports) Synchronous
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (274018 => 274019)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-03-06 00:10:03 UTC (rev 274019)
@@ -455,16 +455,10 @@
if (dataTypes.contains(WebsiteDataType::DiskCache)) {
callbackAggregator->addPendingCallback();
m_queue->dispatch([mediaCacheDirectory = m_configuration->mediaCacheDirectory().isolatedCopy(), callbackAggregator] {
- // FIXME: Make HTMLMediaElement::originsInMediaCache return a collection of SecurityOriginDatas.
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins = WebCore::HTMLMediaElement::originsInMediaCache(mediaCacheDirectory);
WebsiteData websiteData;
-
- for (auto& origin : origins) {
- WebsiteData::Entry entry { origin->data(), WebsiteDataType::DiskCache, 0 };
- websiteData.entries.append(WTFMove(entry));
- }
-
- RunLoop::main().dispatch([callbackAggregator, origins = WTFMove(origins), websiteData = WTFMove(websiteData)]() mutable {
+ for (auto& origin : WebCore::HTMLMediaElement::originsInMediaCache(mediaCacheDirectory))
+ websiteData.entries.append(WebsiteData::Entry { crossThreadCopy(origin), WebsiteDataType::DiskCache, 0 });
+ RunLoop::main().dispatch([callbackAggregator, websiteData = WTFMove(websiteData)]() mutable {
callbackAggregator->removePendingCallback(WTFMove(websiteData));
});
});
Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp (274018 => 274019)
--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp 2021-03-06 00:10:03 UTC (rev 274019)
@@ -70,7 +70,7 @@
return m_manager.supportsTypeAndCodecs(m_remoteEngineIdentifier, parameters);
}
- HashSet<RefPtr<SecurityOrigin>> originsInMediaCache(const String& path) const final
+ HashSet<SecurityOriginData> originsInMediaCache(const String& path) const final
{
return m_manager.originsInMediaCache(m_remoteEngineIdentifier, path);
}
@@ -217,17 +217,12 @@
return false;
}
-HashSet<RefPtr<SecurityOrigin>> RemoteMediaPlayerManager::originsInMediaCache(MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, const String& path)
+HashSet<SecurityOriginData> RemoteMediaPlayerManager::originsInMediaCache(MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, const String& path)
{
- Vector<SecurityOriginData> originData;
+ HashSet<SecurityOriginData> originData;
if (!gpuProcessConnection().connection().sendSync(Messages::RemoteMediaPlayerManagerProxy::OriginsInMediaCache(remoteEngineIdentifier, path), Messages::RemoteMediaPlayerManagerProxy::OriginsInMediaCache::Reply(originData), 0))
return { };
-
- HashSet<RefPtr<SecurityOrigin>> origins;
- for (auto& data : originData)
- origins.add(data.securityOrigin());
-
- return origins;
+ return originData;
}
void RemoteMediaPlayerManager::clearMediaCache(MediaPlayerEnums::MediaEngineIdentifier remoteEngineIdentifier, const String& path, WallTime modifiedSince)
Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h (274018 => 274019)
--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h 2021-03-06 00:08:31 UTC (rev 274018)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h 2021-03-06 00:10:03 UTC (rev 274019)
@@ -81,7 +81,7 @@
void getSupportedTypes(WebCore::MediaPlayerEnums::MediaEngineIdentifier, HashSet<String, ASCIICaseInsensitiveHash>&);
WebCore::MediaPlayer::SupportsType supportsTypeAndCodecs(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const WebCore::MediaEngineSupportParameters&);
bool supportsKeySystem(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String& keySystem, const String& mimeType);
- HashSet<RefPtr<WebCore::SecurityOrigin>> originsInMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&);
+ HashSet<WebCore::SecurityOriginData> originsInMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&);
void clearMediaCache(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&, WallTime modifiedSince);
void clearMediaCacheForOrigins(WebCore::MediaPlayerEnums::MediaEngineIdentifier, const String&, const HashSet<RefPtr<WebCore::SecurityOrigin>>&);