Title: [271238] trunk
- Revision
- 271238
- Author
- [email protected]
- Date
- 2021-01-07 09:13:03 -0800 (Thu, 07 Jan 2021)
Log Message
ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
https://bugs.webkit.org/show_bug.cgi?id=220404
Patch by Sihui Liu <[email protected]> on 2021-01-07
Reviewed by Youenn Fablet.
Source/WebKit:
API test: WebKit2.SpeechRecognitionPageIsDestroyed
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::destroySpeechRecognitionServer):
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
(-[SpeechRecognitionPermissionUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
(-[SpeechRecognitionNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
(-[SpeechRecognitionNavigationDelegate webView:didFinishNavigation:]):
(TestWebKitAPI::TEST):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (271237 => 271238)
--- trunk/Source/WebKit/ChangeLog 2021-01-07 17:04:21 UTC (rev 271237)
+++ trunk/Source/WebKit/ChangeLog 2021-01-07 17:13:03 UTC (rev 271238)
@@ -1,3 +1,15 @@
+2021-01-07 Sihui Liu <[email protected]>
+
+ ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
+ https://bugs.webkit.org/show_bug.cgi?id=220404
+
+ Reviewed by Youenn Fablet.
+
+ API test: WebKit2.SpeechRecognitionPageIsDestroyed
+
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::destroySpeechRecognitionServer):
+
2021-01-07 Kimmo Kinnunen <[email protected]>
WebKit IPC builtin messages should be part of the model
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (271237 => 271238)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-01-07 17:04:21 UTC (rev 271237)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-01-07 17:13:03 UTC (rev 271238)
@@ -1748,7 +1748,7 @@
void WebProcessProxy::destroySpeechRecognitionServer(SpeechRecognitionServerIdentifier identifier)
{
- if (m_speechRecognitionServerMap.remove(identifier))
+ if (auto server = m_speechRecognitionServerMap.take(identifier))
removeMessageReceiver(Messages::SpeechRecognitionServer::messageReceiverName(), identifier);
}
Modified: trunk/Tools/ChangeLog (271237 => 271238)
--- trunk/Tools/ChangeLog 2021-01-07 17:04:21 UTC (rev 271237)
+++ trunk/Tools/ChangeLog 2021-01-07 17:13:03 UTC (rev 271238)
@@ -1,3 +1,16 @@
+2021-01-07 Sihui Liu <[email protected]>
+
+ ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
+ https://bugs.webkit.org/show_bug.cgi?id=220404
+
+ Reviewed by Youenn Fablet.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
+ (-[SpeechRecognitionPermissionUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
+ (-[SpeechRecognitionNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
+ (-[SpeechRecognitionNavigationDelegate webView:didFinishNavigation:]):
+ (TestWebKitAPI::TEST):
+
2021-01-07 Carlos Garcia Campos <[email protected]>
[GTK] Build failures with GTK4 3.99.5.1
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm (271237 => 271238)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-01-07 17:04:21 UTC (rev 271237)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm 2021-01-07 17:13:03 UTC (rev 271238)
@@ -28,6 +28,7 @@
#import "PlatformUtilities.h"
#import "TestWKWebView.h"
#import <WebKit/WKPreferencesPrivate.h>
+#import <WebKit/WKProcessPoolPrivate.h>
#import <WebKit/WKUIDelegatePrivate.h>
#import <WebKit/WKWebView.h>
#import <WebKit/WKWebViewConfigurationPrivate.h>
@@ -36,12 +37,15 @@
static bool shouldGrantPermissionRequest = true;
static bool permissionRequested = false;
static bool receivedScriptMessage;
+static bool didFinishNavigation;
static RetainPtr<WKScriptMessage> lastScriptMessage;
+static RetainPtr<WKWebView> createdWebView;
@interface SpeechRecognitionPermissionUIDelegate : NSObject<WKUIDelegatePrivate>
- (void)_webView:(WKWebView *)webView requestSpeechRecognitionPermissionForOrigin:(WKSecurityOrigin *)origin decisionHandler:(void (^)(BOOL))decisionHandler;
- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler;
- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler;
+- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
@end
@implementation SpeechRecognitionPermissionUIDelegate
@@ -60,6 +64,12 @@
{
decisionHandler(@"0x9876543210", YES);
}
+
+- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
+{
+ createdWebView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]);
+ return createdWebView.get();
+}
@end
@interface SpeechRecognitionMessageHandler : NSObject <WKScriptMessageHandler>
@@ -73,6 +83,23 @@
}
@end
+@interface SpeechRecognitionNavigationDelegate : NSObject <WKNavigationDelegate>
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler;
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
+@end
+
+@implementation SpeechRecognitionNavigationDelegate
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler
+{
+ decisionHandler(WKNavigationActionPolicyAllow, preferences);
+}
+
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
+{
+ didFinishNavigation = true;
+}
+@end
+
namespace TestWebKitAPI {
TEST(WebKit2, SpeechRecognitionUserPermissionPersistence)
@@ -207,6 +234,40 @@
EXPECT_WK_STREQ(@"Error: not-allowed - Permission check failed", [lastScriptMessage body]);
}
+TEST(WebKit2, SpeechRecognitionPageIsDestroyed)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto preferences = [configuration preferences];
+ preferences._mockCaptureDevicesEnabled = YES;
+ preferences._speechRecognitionEnabled = YES;
+ preferences._javascript_CanOpenWindowsAutomatically = YES;
+ auto delegate = adoptNS([[SpeechRecognitionPermissionUIDelegate alloc] init]);
+ auto navigationDelegate = adoptNS([[SpeechRecognitionNavigationDelegate alloc] init]);
+ shouldGrantPermissionRequest = true;
+ createdWebView = nullptr;
+
+ @autoreleasepool {
+ auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+ [webView setUIDelegate:delegate.get()];
+ [webView setNavigationDelegate:navigationDelegate.get()];
+
+ didFinishNavigation = false;
+ [webView loadHTMLString:@"<script>speechRecognition = new webkitSpeechRecognition(); speechRecognition.start(); speechRecognition = null;</script>" baseURL:[NSURL URLWithString:@"http://webkit.org"]];
+ TestWebKitAPI::Util::run(&didFinishNavigation);
+ [configuration.get().processPool _garbageCollectJavaScriptObjectsForTesting];
+
+ bool finishedRunningScript = false;
+ [webView evaluateJavaScript:@"open('http://webkit.org')" completionHandler: [&] (id result, NSError *error) {
+ finishedRunningScript = true;
+ }];
+ TestWebKitAPI::Util::run(&finishedRunningScript);
+ }
+
+ TestWebKitAPI::Util::sleep(0.5);
+
+ EXPECT_TRUE(!!createdWebView);
+}
+
#endif
} // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes