⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 271238 in webkit


Ignore:
Timestamp:
Jan 7, 2021, 9:13:03 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
https://bugs.webkit.org/show_bug.cgi?id=220404

Patch by Sihui Liu <sihui_liu@appe.com> 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):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r271237 r271238  
     12021-01-07  Sihui Liu  <sihui_liu@appe.com>
     2
     3        ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
     4        https://bugs.webkit.org/show_bug.cgi?id=220404
     5
     6        Reviewed by Youenn Fablet.
     7
     8        API test: WebKit2.SpeechRecognitionPageIsDestroyed
     9
     10        * UIProcess/WebProcessProxy.cpp:
     11        (WebKit::WebProcessProxy::destroySpeechRecognitionServer):
     12
    1132021-01-07  Kimmo Kinnunen  <kkinnunen@apple.com>
    214
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r271205 r271238  
    17491749void WebProcessProxy::destroySpeechRecognitionServer(SpeechRecognitionServerIdentifier identifier)
    17501750{
    1751     if (m_speechRecognitionServerMap.remove(identifier))
     1751    if (auto server = m_speechRecognitionServerMap.take(identifier))
    17521752        removeMessageReceiver(Messages::SpeechRecognitionServer::messageReceiverName(), identifier);
    17531753}
  • trunk/Tools/ChangeLog

    r271231 r271238  
     12021-01-07  Sihui Liu  <sihui_liu@appe.com>
     2
     3        ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::SpeechRecognitionServer::~SpeechRecognitionServer()
     4        https://bugs.webkit.org/show_bug.cgi?id=220404
     5
     6        Reviewed by Youenn Fablet.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm:
     9        (-[SpeechRecognitionPermissionUIDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]):
     10        (-[SpeechRecognitionNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
     11        (-[SpeechRecognitionNavigationDelegate webView:didFinishNavigation:]):
     12        (TestWebKitAPI::TEST):
     13
    1142021-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm

    r271205 r271238  
    2929#import "TestWKWebView.h"
    3030#import <WebKit/WKPreferencesPrivate.h>
     31#import <WebKit/WKProcessPoolPrivate.h>
    3132#import <WebKit/WKUIDelegatePrivate.h>
    3233#import <WebKit/WKWebView.h>
     
    3738static bool permissionRequested = false;
    3839static bool receivedScriptMessage;
     40static bool didFinishNavigation;
    3941static RetainPtr<WKScriptMessage> lastScriptMessage;
     42static RetainPtr<WKWebView> createdWebView;
    4043
    4144@interface SpeechRecognitionPermissionUIDelegate : NSObject<WKUIDelegatePrivate>
     
    4346- (void)_webView:(WKWebView *)webView requestMediaCaptureAuthorization: (_WKCaptureDevices)devices decisionHandler:(void (^)(BOOL))decisionHandler;
    4447- (void)_webView:(WKWebView *)webView checkUserMediaPermissionForURL:(NSURL *)url mainFrameURL:(NSURL *)mainFrameURL frameIdentifier:(NSUInteger)frameIdentifier decisionHandler:(void (^)(NSString *salt, BOOL authorized))decisionHandler;
     48- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
    4549@end
    4650
     
    6165    decisionHandler(@"0x9876543210", YES);
    6266}
     67
     68- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
     69{
     70    createdWebView = adoptNS([[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration]);
     71    return createdWebView.get();
     72}
    6373@end
    6474
     
    7181    receivedScriptMessage = true;
    7282    lastScriptMessage = message;
     83}
     84@end
     85
     86@interface SpeechRecognitionNavigationDelegate : NSObject <WKNavigationDelegate>
     87- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler;
     88- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
     89@end
     90
     91@implementation SpeechRecognitionNavigationDelegate
     92- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction preferences:(WKWebpagePreferences *)preferences decisionHandler:(void (^)(WKNavigationActionPolicy, WKWebpagePreferences *))decisionHandler
     93{
     94    decisionHandler(WKNavigationActionPolicyAllow, preferences);
     95}
     96
     97- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
     98{
     99    didFinishNavigation = true;
    73100}
    74101@end
     
    208235}
    209236
     237TEST(WebKit2, SpeechRecognitionPageIsDestroyed)
     238{
     239    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     240    auto preferences = [configuration preferences];
     241    preferences._mockCaptureDevicesEnabled = YES;
     242    preferences._speechRecognitionEnabled = YES;
     243    preferences.javaScriptCanOpenWindowsAutomatically = YES;
     244    auto delegate = adoptNS([[SpeechRecognitionPermissionUIDelegate alloc] init]);
     245    auto navigationDelegate = adoptNS([[SpeechRecognitionNavigationDelegate alloc] init]);
     246    shouldGrantPermissionRequest = true;
     247    createdWebView = nullptr;
     248
     249    @autoreleasepool {
     250        auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     251        [webView setUIDelegate:delegate.get()];
     252        [webView setNavigationDelegate:navigationDelegate.get()];
     253
     254        didFinishNavigation = false;
     255        [webView loadHTMLString:@"<script>speechRecognition = new webkitSpeechRecognition(); speechRecognition.start(); speechRecognition = null;</script>" baseURL:[NSURL URLWithString:@"http://webkit.org"]];
     256        TestWebKitAPI::Util::run(&didFinishNavigation);
     257        [configuration.get().processPool _garbageCollectJavaScriptObjectsForTesting];
     258
     259        bool finishedRunningScript = false;
     260        [webView evaluateJavaScript:@"open('http://webkit.org')" completionHandler: [&] (id result, NSError *error) {
     261            finishedRunningScript = true;
     262        }];
     263        TestWebKitAPI::Util::run(&finishedRunningScript);
     264    }
     265
     266    TestWebKitAPI::Util::sleep(0.5);
     267
     268    EXPECT_TRUE(!!createdWebView);
     269}
     270
    210271#endif
    211272
Note: See TracChangeset for help on using the changeset viewer.