Title: [259729] trunk/Source/WebKit
Revision
259729
Author
[email protected]
Date
2020-04-08 10:51:12 -0700 (Wed, 08 Apr 2020)

Log Message

[iOS] WebPageProxy::didCommitLoadForFrame should not crash with null or empty `mimeType` parameter
<https://webkit.org/b/209994>
<rdar://problem/60068700>

Reviewed by Chris Dumez.

* UIProcess/API/ios/WKWebViewIOS.mm:
(-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
- Extract logic for `representationClass` since
  -[WKWebViewContentProviderRegistry providerForMIMEType:] may
  return nil.
* UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
(-[WKWebViewContentProviderRegistry providerForMIMEType:]):
- Add early return if `mimeType` is null or empty as those are
  not valid keys for `_contentProviderForMIMEType`.
* UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::didCommitLoadForMainFrame):
- Add UNUSED_PARAM() for when -Wno-unused-parameter is removed
  in place of GCC_WARN_UNUSED_VARIABLE=YES.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (259728 => 259729)


--- trunk/Source/WebKit/ChangeLog	2020-04-08 17:41:34 UTC (rev 259728)
+++ trunk/Source/WebKit/ChangeLog	2020-04-08 17:51:12 UTC (rev 259729)
@@ -1,3 +1,25 @@
+2020-04-08  David Kilzer  <[email protected]>
+
+        [iOS] WebPageProxy::didCommitLoadForFrame should not crash with null or empty `mimeType` parameter
+        <https://webkit.org/b/209994>
+        <rdar://problem/60068700>
+
+        Reviewed by Chris Dumez.
+
+        * UIProcess/API/ios/WKWebViewIOS.mm:
+        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
+        - Extract logic for `representationClass` since
+          -[WKWebViewContentProviderRegistry providerForMIMEType:] may
+          return nil.
+        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
+        (-[WKWebViewContentProviderRegistry providerForMIMEType:]):
+        - Add early return if `mimeType` is null or empty as those are
+          not valid keys for `_contentProviderForMIMEType`.
+        * UIProcess/mac/PageClientImplMac.mm:
+        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
+        - Add UNUSED_PARAM() for when -Wno-unused-parameter is removed
+          in place of GCC_WARN_UNUSED_VARIABLE=YES.
+
 2020-04-08  Brian Burg  <[email protected]>
 
         REGRESSION(r253346): some Automation commands targeted at an iframe do not return

Modified: trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm (259728 => 259729)


--- trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm	2020-04-08 17:41:34 UTC (rev 259728)
+++ trunk/Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm	2020-04-08 17:51:12 UTC (rev 259729)
@@ -374,12 +374,14 @@
 
 - (void)_setHasCustomContentView:(BOOL)pageHasCustomContentView loadedMIMEType:(const WTF::String&)mimeType
 {
-    if (pageHasCustomContentView) {
+    Class representationClass = nil;
+    if (pageHasCustomContentView)
+        representationClass = [[_configuration _contentProviderRegistry] providerForMIMEType:mimeType];
+
+    if (pageHasCustomContentView && representationClass) {
         [_customContentView removeFromSuperview];
         [_customContentFixedOverlayView removeFromSuperview];
 
-        Class representationClass = [[_configuration _contentProviderRegistry] providerForMIMEType:mimeType];
-        ASSERT(representationClass);
         _customContentView = adoptNS([[representationClass alloc] web_initWithFrame:self.bounds webView:self mimeType:mimeType]);
         _customContentFixedOverlayView = adoptNS([[UIView alloc] initWithFrame:self.bounds]);
         [_customContentFixedOverlayView layer].name = @"CustomContentFixedOverlay";

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm (259728 => 259729)


--- trunk/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm	2020-04-08 17:41:34 UTC (rev 259728)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm	2020-04-08 17:51:12 UTC (rev 259729)
@@ -86,6 +86,9 @@
 
 - (Class <WKWebViewContentProvider>)providerForMIMEType:(const String&)mimeType
 {
+    if (mimeType.isEmpty())
+        return nil;
+
     const auto& representation = _contentProviderForMIMEType.find(mimeType);
 
     if (representation == _contentProviderForMIMEType.end())

Modified: trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm (259728 => 259729)


--- trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm	2020-04-08 17:41:34 UTC (rev 259728)
+++ trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm	2020-04-08 17:51:12 UTC (rev 259729)
@@ -279,6 +279,8 @@
 
 void PageClientImpl::didCommitLoadForMainFrame(const String& mimeType, bool useCustomContentProvider)
 {
+    UNUSED_PARAM(mimeType);
+    UNUSED_PARAM(useCustomContentProvider);
     m_impl->updateSupportsArbitraryLayoutModes();
     m_impl->dismissContentRelativeChildWindowsWithAnimation(true);
     m_impl->clearPromisedDragImage();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to