Changeset 196310 in webkit


Ignore:
Timestamp:
Feb 9, 2016 9:13:27 AM (8 years ago)
Author:
eric.carlson@apple.com
Message:

checkValidity() sometimes asserts in WebUserMediaClient::pageDestroyed
https://bugs.webkit.org/show_bug.cgi?id=154029
<rdar://problem/24065022>

Reviewed by Alex Christensen.

  • WebCoreSupport/WebUserMediaClient.mm:

(WebUserMediaClient::pageDestroyed): Copy map keys to a vector and clear the map before

enumerating the vector and canceling the requests. ASSERT that the map is not modified
during cleanup. Clean up the permission check map.

(WebUserMediaClient::requestUserMediaAccess): Add the request to the map before calling the

UI delegate in case it works synchronously (as it does in DRT).

(WebUserMediaClient::checkUserMediaPermission): Ditto.
(WebUserMediaClient::cancelUserMediaPermissionCheck): White-space cleanup.
(-[WebUserMediaPolicyListener allow]): Ditto.

Location:
trunk/Source/WebKit/mac
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/mac/ChangeLog

    r196267 r196310  
     12016-02-09  Eric Carlson  <eric.carlson@apple.com>
     2
     3        checkValidity() sometimes asserts in WebUserMediaClient::pageDestroyed
     4        https://bugs.webkit.org/show_bug.cgi?id=154029
     5        <rdar://problem/24065022>
     6
     7        Reviewed by Alex Christensen.
     8
     9        * WebCoreSupport/WebUserMediaClient.mm:
     10        (WebUserMediaClient::pageDestroyed): Copy map keys to a vector and clear the map before
     11          enumerating the vector and canceling the requests. ASSERT that the map is not modified
     12          during cleanup. Clean up the permission check map.
     13        (WebUserMediaClient::requestUserMediaAccess): Add the request to the map before calling the
     14          UI delegate in case it works synchronously (as it does in DRT).
     15        (WebUserMediaClient::checkUserMediaPermission): Ditto.
     16        (WebUserMediaClient::cancelUserMediaPermissionCheck): White-space cleanup.
     17        (-[WebUserMediaPolicyListener allow]): Ditto.
     18
    1192016-02-08  Anders Carlsson  <andersca@apple.com>
    220
  • trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm

    r194987 r196310  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013-2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    9797}
    9898
    99 
    10099WebUserMediaClient::WebUserMediaClient(WebView* webView)
    101100    : m_webView(webView)
     
    109108void WebUserMediaClient::pageDestroyed()
    110109{
    111     UserMediaRequestsMap& requestsMap = userMediaRequestsMap();
    112     for (UserMediaRequestsMap::iterator it = requestsMap.begin(); it != requestsMap.end(); ++it) {
    113         [it->value cancelUserMediaAccessRequest];
    114         requestsMap.remove(it);
    115     }
     110    auto& requestsMap = userMediaRequestsMap();
     111    Vector<RetainPtr<WebUserMediaPolicyListener>> pendingRequests;
     112    copyValuesToVector(requestsMap, pendingRequests);
     113    requestsMap.clear();
     114
     115    for (auto& request : pendingRequests)
     116        [request cancelUserMediaAccessRequest];
     117
     118    ASSERT(userMediaRequestsMap().isEmpty());
     119
     120    auto& checkMap = userMediaCheckMap();
     121    Vector<RetainPtr<WebUserMediaPolicyCheckerListener>> pendingChecks;
     122    copyValuesToVector(checkMap, pendingChecks);
     123    checkMap.clear();
     124
     125    for (auto& check : pendingChecks)
     126        [check cancelUserMediaPermissionCheck];
     127
     128    ASSERT(userMediaCheckMap().isEmpty());
    116129
    117130    delete this;
     
    131144    WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:request.securityOrigin()];
    132145
     146    AddRequestToRequestMap(&request, listener);
    133147    CallUIDelegate(m_webView, selector, webOrigin, listener);
    134     AddRequestToRequestMap(&request, listener);
    135148
    136149    [webOrigin release];
     
    164177    WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:request.securityOrigin()];
    165178
     179    AddPermissionCheckToMap(&request, listener);
    166180    CallUIDelegate(m_webView, selector, webOrigin, listener);
    167     AddPermissionCheckToMap(&request, listener);
    168181
    169182    [webOrigin release];
     
    172185    END_BLOCK_OBJC_EXCEPTIONS;
    173186}
    174 
    175187
    176188void WebUserMediaClient::cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck& request)
     
    216228   
    217229    _request->userMediaAccessGranted(_request->allowedAudioDeviceUID(), _request->allowedVideoDeviceUID());
    218 
    219230    RemoveRequestFromRequestMap(_request.get());
    220231#endif
Note: See TracChangeset for help on using the changeset viewer.