Changeset 231979 in webkit
- Timestamp:
- May 18, 2018 1:13:34 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r231977 r231979 1 2018-05-18 Eric Carlson <eric.carlson@apple.com> 2 3 Handle failure to extend sandbox gracefully 4 https://bugs.webkit.org/show_bug.cgi?id=185779 5 <rdar://problem/40316349> 6 7 Reviewed by Brent Fulgham. 8 9 Test: TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm 10 11 * Modules/mediastream/UserMediaRequest.cpp: 12 (WebCore::UserMediaRequest::deny): Include the error string in the promise rejection. 13 * Modules/mediastream/UserMediaRequest.h: 14 1 15 2018-05-18 Antoine Quint <graouts@apple.com> 2 16 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r230211 r231979 258 258 } 259 259 260 void UserMediaRequest::deny(MediaAccessDenialReason reason, const String& invalidConstraint)260 void UserMediaRequest::deny(MediaAccessDenialReason reason, const String& message) 261 261 { 262 262 if (!m_scriptExecutionContext) 263 263 return; 264 264 265 ExceptionCode code; 265 266 switch (reason) { 266 267 case MediaAccessDenialReason::NoConstraints: 267 268 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - no constraints"); 268 m_promise.reject(TypeError);269 code = TypeError; 269 270 break; 270 271 case MediaAccessDenialReason::UserMediaDisabled: 271 272 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - user media disabled"); 272 m_promise.reject(SecurityError);273 code = SecurityError; 273 274 break; 274 275 case MediaAccessDenialReason::NoCaptureDevices: 275 276 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - no capture devices"); 276 m_promise.reject(NotFoundError);277 code = NotFoundError; 277 278 break; 278 279 case MediaAccessDenialReason::InvalidConstraint: 279 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - invalid constraint - %s", invalidConstraint.utf8().data());280 m_promise.rejectType<IDLInterface<OverconstrainedError>>(OverconstrainedError::create( invalidConstraint, ASCIILiteral("Invalid constraint")).get());281 break;280 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - invalid constraint - %s", message.utf8().data()); 281 m_promise.rejectType<IDLInterface<OverconstrainedError>>(OverconstrainedError::create(message, ASCIILiteral("Invalid constraint")).get()); 282 return; 282 283 case MediaAccessDenialReason::HardwareError: 283 284 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - hardware error"); 284 m_promise.reject(NotReadableError);285 code = NotReadableError; 285 286 break; 286 287 case MediaAccessDenialReason::OtherFailure: 287 288 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - other failure"); 288 m_promise.reject(AbortError);289 code = AbortError; 289 290 break; 290 291 case MediaAccessDenialReason::PermissionDenied: 291 292 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - permission denied"); 292 m_promise.reject(NotAllowedError);293 code = NotAllowedError; 293 294 break; 294 295 case MediaAccessDenialReason::InvalidAccess: 295 296 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - invalid access"); 296 m_promise.reject(InvalidAccessError); 297 break; 298 } 297 code = InvalidAccessError; 298 break; 299 } 300 301 if (!message.isEmpty()) 302 m_promise.reject(code, message); 303 else 304 m_promise.reject(code); 299 305 } 300 306 -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r226211 r231979 58 58 59 59 enum MediaAccessDenialReason { NoConstraints, UserMediaDisabled, NoCaptureDevices, InvalidConstraint, HardwareError, PermissionDenied, InvalidAccess, OtherFailure }; 60 WEBCORE_EXPORT void deny(MediaAccessDenialReason, const String& invalidConstraint= emptyString());60 WEBCORE_EXPORT void deny(MediaAccessDenialReason, const String& errorMessage = emptyString()); 61 61 62 62 const Vector<String>& audioDeviceUIDs() const { return m_audioDeviceUIDs; } -
trunk/Source/WebKit/ChangeLog
r231977 r231979 1 2018-05-18 Eric Carlson <eric.carlson@apple.com> 2 3 Handle failure to extend sandbox gracefully 4 https://bugs.webkit.org/show_bug.cgi?id=185779 5 <rdar://problem/40316349> 6 7 Reviewed by Brent Fulgham. 8 9 * UIProcess/API/Cocoa/WKWebView.mm: 10 (-[WKWebView _denyNextUserMediaRequest]): 11 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 12 13 * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 14 (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Don't append 15 the request to m_grantedRequests if it failed. 16 (WebKit::UserMediaPermissionRequestManagerProxy::grantAccess): Deny request if willCreateMediaStream 17 fails. 18 * UIProcess/UserMediaPermissionRequestManagerProxy.h: 19 20 * UIProcess/UserMediaProcessManager.cpp: 21 (WebKit::UserMediaProcessManager::willCreateMediaStream): Don't try to extend sandbox if 22 we fail to allocate all necessary handles. 23 * UIProcess/UserMediaProcessManager.h: 24 (WebKit::UserMediaProcessManager::denyNextUserMediaRequest): New, for testing. 25 1 26 2018-05-18 Antoine Quint <graouts@apple.com> 2 27 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r231785 r231979 48 48 #import "SandboxUtilities.h" 49 49 #import "UIDelegate.h" 50 #import "UserMediaProcessManager.h" 50 51 #import "VersionChecks.h" 51 52 #import "ViewGestureController.h" … … 6386 6387 } 6387 6388 6389 - (void)_denyNextUserMediaRequest 6390 { 6391 WebKit::UserMediaProcessManager::singleton().denyNextUserMediaRequest(); 6392 } 6388 6393 @end 6389 6394 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r231785 r231979 460 460 - (void)_executeEditCommand:(NSString *)command argument:(NSString *)argument completion:(void (^)(BOOL))completion WK_API_AVAILABLE(macosx(10.13.4), ios(11.3)); 461 461 462 - (void)_denyNextUserMediaRequest WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 463 462 464 - (BOOL)_beginBackSwipeForTesting; 463 465 - (BOOL)_completeBackSwipeForTesting; -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r229950 r231979 154 154 return; 155 155 156 grantAccess(userMediaID, WTFMove(audioDevice), WTFMove(videoDevice), request->deviceIdentifierHashSalt()); 157 m_grantedRequests.append(request.releaseNonNull()); 156 if (grantAccess(userMediaID, WTFMove(audioDevice), WTFMove(videoDevice), request->deviceIdentifierHashSalt())) 157 m_grantedRequests.append(request.releaseNonNull()); 158 158 159 #else 159 160 UNUSED_PARAM(userMediaID); … … 221 222 } 222 223 223 void UserMediaPermissionRequestManagerProxy::grantAccess(uint64_t userMediaID, const CaptureDevice audioDevice, const CaptureDevice videoDevice, const String& deviceIdentifierHashSalt) 224 { 225 UserMediaProcessManager::singleton().willCreateMediaStream(*this, !!audioDevice, !!videoDevice); 224 bool UserMediaPermissionRequestManagerProxy::grantAccess(uint64_t userMediaID, const CaptureDevice audioDevice, const CaptureDevice videoDevice, const String& deviceIdentifierHashSalt) 225 { 226 if (!UserMediaProcessManager::singleton().willCreateMediaStream(*this, !!audioDevice, !!videoDevice)) { 227 denyRequest(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::OtherFailure, "Unable to extend sandbox."); 228 return false; 229 } 230 226 231 m_page.process().send(Messages::WebPage::UserMediaAccessWasGranted(userMediaID, audioDevice, videoDevice, deviceIdentifierHashSalt), m_page.pageID()); 232 return true; 227 233 } 228 234 #endif -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h
r226160 r231979 69 69 void denyRequest(uint64_t userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason, const String& invalidConstraint); 70 70 #if ENABLE(MEDIA_STREAM) 71 voidgrantAccess(uint64_t userMediaID, const WebCore::CaptureDevice audioDevice, const WebCore::CaptureDevice videoDevice, const String& deviceIdentifierHashSalt);71 bool grantAccess(uint64_t userMediaID, const WebCore::CaptureDevice audioDevice, const WebCore::CaptureDevice videoDevice, const String& deviceIdentifierHashSalt); 72 72 73 73 const UserMediaPermissionRequestProxy* searchForGrantedRequest(uint64_t frameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo) const; -
trunk/Source/WebKit/UIProcess/UserMediaProcessManager.cpp
r220995 r231979 127 127 } 128 128 129 voidUserMediaProcessManager::willCreateMediaStream(UserMediaPermissionRequestManagerProxy& proxy, bool withAudio, bool withVideo)129 bool UserMediaProcessManager::willCreateMediaStream(UserMediaPermissionRequestManagerProxy& proxy, bool withAudio, bool withVideo) 130 130 { 131 131 #if ENABLE(SANDBOX_EXTENSIONS) … … 134 134 ASSERT(stateMap().contains(&processStartingCapture)); 135 135 136 proxy.page().activateMediaStreamCaptureInPage(); 136 if (m_denyNextRequest) { 137 m_denyNextRequest = false; 138 return false; 139 } 137 140 138 141 auto& state = processState(processStartingCapture); … … 172 175 } 173 176 177 if (ids.size() != handles.size()) { 178 WTFLogAlways("Could not create a required sandbox extension, capture will fail!"); 179 return false; 180 } 181 174 182 state.setSandboxExtensionsGranted(currentExtensions); 175 183 processStartingCapture.send(Messages::WebPage::GrantUserMediaDeviceSandboxExtensions(MediaDeviceSandboxExtensions(ids, WTFMove(handles))), proxy.page().pageID()); 176 184 } 177 #endif 185 #else 186 UNUSED_PARAM(proxy); 187 UNUSED_PARAM(withAudio); 188 UNUSED_PARAM(withVideo); 189 #endif 190 191 proxy.page().activateMediaStreamCaptureInPage(); 192 193 return true; 178 194 } 179 195 -
trunk/Source/WebKit/UIProcess/UserMediaProcessManager.h
r217837 r231979 35 35 void removeUserMediaPermissionRequestManagerProxy(UserMediaPermissionRequestManagerProxy&); 36 36 37 voidwillCreateMediaStream(UserMediaPermissionRequestManagerProxy&, bool withAudio, bool withVideo);37 bool willCreateMediaStream(UserMediaPermissionRequestManagerProxy&, bool withAudio, bool withVideo); 38 38 void muteCaptureMediaStreamsExceptIn(WebPageProxy&); 39 39 … … 44 44 bool captureEnabled() const { return m_captureEnabled; } 45 45 46 void denyNextUserMediaRequest() { m_denyNextRequest = true; } 47 46 48 private: 47 49 bool m_captureEnabled { true }; 50 bool m_denyNextRequest { false }; 48 51 }; 49 52 -
trunk/Tools/ChangeLog
r231978 r231979 1 2018-05-18 Eric Carlson <eric.carlson@apple.com> 2 3 Handle failure to extend sandbox gracefully 4 https://bugs.webkit.org/show_bug.cgi?id=185779 5 <rdar://problem/40316349> 6 7 Reviewed by Brent Fulgham. 8 9 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 10 * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm: Added. 11 (-[SimulateFailedSandboxMessageHandler userContentController:didReceiveScriptMessage:]): 12 (-[SimulateFailedSandboxUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]): 13 (-[SimulateFailedSandboxUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): 14 (MediaCaptureSimulateFailedSandbox::SetUp): 15 (MediaCaptureSimulateFailedSandbox::loadTestAndWaitForMessage): 16 (TEST_F): 17 * TestWebKitAPI/Tests/WebKitCocoa/disableGetUserMedia.html: 18 1 19 2018-05-18 Daniel Bates <dabates@apple.com> 2 20 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r231785 r231979 36 36 07E1F6A31FFC4B760096C7EC /* GetDisplayMedia.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07E1F6A01FFC3A080096C7EC /* GetDisplayMedia.mm */; }; 37 37 07E499911F9E56DF002F1EF3 /* GetUserMediaReprompt.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07E499901F9E56A1002F1EF3 /* GetUserMediaReprompt.mm */; }; 38 07F4E92E20AF59E2002E3803 /* UserMediaSimulateFailedSandbox.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07F4E92D20AF58D3002E3803 /* UserMediaSimulateFailedSandbox.mm */; }; 38 39 0EBBCC661FFF9E0C00FA42AB /* pop-up-check.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 0EBBCC651FFF9DCE00FA42AB /* pop-up-check.html */; }; 39 40 0F139E771A423A5B00F590F5 /* WeakObjCPtr.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F139E751A423A5300F590F5 /* WeakObjCPtr.mm */; }; … … 1152 1153 07E499901F9E56A1002F1EF3 /* GetUserMediaReprompt.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GetUserMediaReprompt.mm; sourceTree = "<group>"; }; 1153 1154 07EDEFAC1EB9400C00D43292 /* UserMediaDisabled.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UserMediaDisabled.mm; sourceTree = "<group>"; }; 1155 07F4E92D20AF58D3002E3803 /* UserMediaSimulateFailedSandbox.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UserMediaSimulateFailedSandbox.mm; sourceTree = "<group>"; }; 1154 1156 0BCD833414857CE400EA2003 /* HashMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HashMap.cpp; sourceTree = "<group>"; }; 1155 1157 0BCD85691485C98B00EA2003 /* SetForScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetForScope.cpp; sourceTree = "<group>"; }; … … 2259 2261 7CCB99201D3B41F6003922F6 /* UserInitiatedActionInNavigationAction.mm */, 2260 2262 07EDEFAC1EB9400C00D43292 /* UserMediaDisabled.mm */, 2263 07F4E92D20AF58D3002E3803 /* UserMediaSimulateFailedSandbox.mm */, 2261 2264 93E943F11CD3E87E00AC08C2 /* VideoControlsManager.mm */, 2262 2265 6356FB211EC4E0BA0044BF18 /* VisibleContentRect.mm */, … … 3783 3786 7CCE7F171A411AE600447C4C /* UserMedia.cpp in Sources */, 3784 3787 0799C3491EBA2D7B003B7532 /* UserMediaDisabled.mm in Sources */, 3788 07F4E92E20AF59E2002E3803 /* UserMediaSimulateFailedSandbox.mm in Sources */, 3785 3789 7CCE7F181A411AE600447C4C /* UserMessage.cpp in Sources */, 3786 3790 7C83E03A1D0A602700FEBCF3 /* UtilitiesCocoa.mm in Sources */, -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/disableGetUserMedia.html
r216197 r231979 1 1 <script> 2 let err = ''; 2 3 function gotUserMedia(mediaStream) 3 4 { … … 7 8 function userMediaError(error) 8 9 { 10 err = `${error.name},${error.message}`; 9 11 window.webkit.messageHandlers.testHandler.postMessage('denied'); 10 12 } 11 13 12 var constraints = { audio: false, video: true}; 14 function lastError() 15 { 16 return err; 17 } 18 19 let constraints = { audio: false, video: true}; 13 20 navigator.mediaDevices.getUserMedia(constraints) 14 21 .then(gotUserMedia).
Note: See TracChangeset
for help on using the changeset viewer.