Diff
Modified: trunk/Source/WebCore/ChangeLog (292795 => 292796)
--- trunk/Source/WebCore/ChangeLog 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/ChangeLog 2022-04-13 03:58:56 UTC (rev 292796)
@@ -1,3 +1,31 @@
+2022-04-12 Chris Dumez <[email protected]>
+
+ Use safer downcast<>() for CachedResourceClient subclasses
+ https://bugs.webkit.org/show_bug.cgi?id=239220
+
+ Reviewed by Simon Fraser.
+
+ * loader/LinkPreloadResourceClients.h:
+ (WebCore::LinkPreloadImageResourceClient::LinkPreloadImageResourceClient):
+ * loader/cache/CachedCSSStyleSheet.cpp:
+ (WebCore::CachedCSSStyleSheet::didAddClient):
+ * loader/cache/CachedFont.cpp:
+ (WebCore::CachedFont::didAddClient):
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::didAddClient):
+ (WebCore::CachedImage::didRemoveClient):
+ * loader/cache/CachedImageClient.h:
+ * loader/cache/CachedRawResource.cpp:
+ (WebCore::CachedRawResource::didAddClient):
+ * loader/cache/CachedRawResourceClient.h:
+ * loader/cache/CachedResourceClient.h:
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::createResource):
+ * loader/cache/CachedSVGDocumentClient.h:
+ * loader/cache/CachedStyleSheetClient.h:
+ * loader/cache/CachedXSLStyleSheet.cpp:
+ (WebCore::CachedXSLStyleSheet::didAddClient):
+
2022-04-12 Devin Rousso <[email protected]>
[Modern Media Controls] allow skipping by durations other than 15s
Modified: trunk/Source/WebCore/loader/LinkPreloadResourceClients.h (292795 => 292796)
--- trunk/Source/WebCore/loader/LinkPreloadResourceClients.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/LinkPreloadResourceClients.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -116,7 +116,7 @@
WTF_MAKE_FAST_ALLOCATED;
public:
LinkPreloadImageResourceClient(LinkLoader& loader, CachedImage& resource)
- : LinkPreloadResourceClient(loader, static_cast<CachedResource&>(resource))
+ : LinkPreloadResourceClient(loader, resource)
{
addResource(*this);
}
Modified: trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -59,7 +59,7 @@
CachedResource::didAddClient(client);
if (!isLoading())
- static_cast<CachedStyleSheetClient&>(client).setCSSStyleSheet(m_resourceRequest.url().string(), m_response.url(), String::fromLatin1(m_decoder->encoding().name()), this);
+ downcast<CachedStyleSheetClient>(client).setCSSStyleSheet(m_resourceRequest.url().string(), m_response.url(), String::fromLatin1(m_decoder->encoding().name()), this);
}
void CachedCSSStyleSheet::setEncoding(const String& chs)
Modified: trunk/Source/WebCore/loader/cache/CachedFont.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedFont.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedFont.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -61,7 +61,7 @@
{
ASSERT(client.resourceClientType() == CachedFontClient::expectedType());
if (!isLoading())
- static_cast<CachedFontClient&>(client).fontLoaded(*this);
+ downcast<CachedFontClient>(client).fontLoaded(*this);
}
void CachedFont::finishLoading(const FragmentedSharedBuffer* data, const NetworkLoadMetrics& metrics)
Modified: trunk/Source/WebCore/loader/cache/CachedFontClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedFontClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedFontClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -40,3 +40,5 @@
};
} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(CachedFontClient, FontType);
Modified: trunk/Source/WebCore/loader/cache/CachedImage.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedImage.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -133,7 +133,7 @@
ASSERT(client.resourceClientType() == CachedImageClient::expectedType());
if (m_image && !m_image->isNull())
- static_cast<CachedImageClient&>(client).imageChanged(this);
+ downcast<CachedImageClient>(client).imageChanged(this);
if (m_image)
m_image->startAnimationAsynchronously();
@@ -145,15 +145,15 @@
{
ASSERT(client.resourceClientType() == CachedImageClient::expectedType());
- m_pendingContainerContextRequests.remove(&static_cast<CachedImageClient&>(client));
- m_clientsWaitingForAsyncDecoding.remove(&static_cast<CachedImageClient&>(client));
+ m_pendingContainerContextRequests.remove(&downcast<CachedImageClient>(client));
+ m_clientsWaitingForAsyncDecoding.remove(&downcast<CachedImageClient>(client));
if (m_svgImageCache)
- m_svgImageCache->removeClientFromCache(&static_cast<CachedImageClient&>(client));
+ m_svgImageCache->removeClientFromCache(&downcast<CachedImageClient>(client));
CachedResource::didRemoveClient(client);
- static_cast<CachedImageClient&>(client).didRemoveCachedImageClient(*this);
+ downcast<CachedImageClient>(client).didRemoveCachedImageClient(*this);
}
bool CachedImage::isClientWaitingForAsyncDecoding(CachedImageClient& client) const
Modified: trunk/Source/WebCore/loader/cache/CachedImageClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedImageClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedImageClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -56,3 +56,5 @@
};
} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(CachedImageClient, ImageType);
Modified: trunk/Source/WebCore/loader/cache/CachedRawResource.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedRawResource.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedRawResource.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -159,7 +159,7 @@
void CachedRawResource::didAddClient(CachedResourceClient& c)
{
- CachedRawResourceClient& client = static_cast<CachedRawResourceClient&>(c);
+ auto& client = downcast<CachedRawResourceClient>(c);
size_t redirectCount = m_redirectChain.size();
Vector<std::pair<ResourceRequest, ResourceResponse>> redirectsInReverseOrder;
redirectsInReverseOrder.reserveInitialCapacity(redirectCount);
Modified: trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedRawResourceClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -56,4 +56,6 @@
#endif
};
-}
+} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(CachedRawResourceClient, RawResourceType);
Modified: trunk/Source/WebCore/loader/cache/CachedResourceClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedResourceClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedResourceClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -51,4 +51,9 @@
CachedResourceClient() = default;
};
-}
+} // namespace WebCore
+
+#define SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(ToClassName, CachedResourceTypeValue) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ToClassName) \
+ static bool isType(const WebCore::CachedResourceClient& client) { return client.resourceClientType() == WebCore::CachedResourceClient::CachedResourceTypeValue; } \
+SPECIALIZE_TYPE_TRAITS_END()
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -166,9 +166,9 @@
case CachedResource::Type::Script:
return new CachedScript(WTFMove(request), resource.sessionID(), resource.cookieJar());
case CachedResource::Type::SVGDocumentResource:
- return new CachedSVGDocument(WTFMove(request), static_cast<CachedSVGDocument&>(resource));
+ return new CachedSVGDocument(WTFMove(request), downcast<CachedSVGDocument>(resource));
case CachedResource::Type::SVGFontResource:
- return new CachedSVGFont(WTFMove(request), static_cast<CachedSVGFont&>(resource));
+ return new CachedSVGFont(WTFMove(request), downcast<CachedSVGFont>(resource));
case CachedResource::Type::FontResource:
return new CachedFont(WTFMove(request), resource.sessionID(), resource.cookieJar());
case CachedResource::Type::Beacon:
Modified: trunk/Source/WebCore/loader/cache/CachedSVGDocumentClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedSVGDocumentClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedSVGDocumentClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -34,3 +34,5 @@
};
} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(CachedSVGDocumentClient, SVGDocumentType);
Modified: trunk/Source/WebCore/loader/cache/CachedStyleSheetClient.h (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedStyleSheetClient.h 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedStyleSheetClient.h 2022-04-13 03:58:56 UTC (rev 292796)
@@ -42,3 +42,5 @@
};
} // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_CACHED_RESOURCE_CLIENT(CachedStyleSheetClient, StyleSheetType);
Modified: trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp (292795 => 292796)
--- trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp 2022-04-13 03:54:32 UTC (rev 292795)
+++ trunk/Source/WebCore/loader/cache/CachedXSLStyleSheet.cpp 2022-04-13 03:58:56 UTC (rev 292796)
@@ -48,7 +48,7 @@
{
ASSERT(client.resourceClientType() == CachedStyleSheetClient::expectedType());
if (!isLoading())
- static_cast<CachedStyleSheetClient&>(client).setXSLStyleSheet(m_resourceRequest.url().string(), m_response.url(), m_sheet);
+ downcast<CachedStyleSheetClient>(client).setXSLStyleSheet(m_resourceRequest.url().string(), m_response.url(), m_sheet);
}
void CachedXSLStyleSheet::setEncoding(const String& chs)