Changeset 288087 in webkit
- Timestamp:
- Jan 16, 2022 10:44:44 PM (6 months ago)
- Location:
- trunk
- Files:
-
- 32 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt (modified) (1 diff)
-
Source/WTF/ChangeLog (modified) (1 diff)
-
Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/mediastream/MediaDevices.cpp (modified) (4 diffs)
-
Source/WebCore/Modules/mediastream/UserMediaRequest.cpp (modified) (3 diffs)
-
Source/WebCore/Modules/mediastream/UserMediaRequest.h (modified) (1 diff)
-
Source/WebCore/dom/Document.cpp (modified) (2 diffs)
-
Source/WebCore/dom/Document.h (modified) (2 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/C/WKPreferences.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/API/glib/WebKitSettingsPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (modified) (2 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm (modified) (15 diffs)
-
Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm (modified) (4 diffs)
-
Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp (modified) (3 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r288086 r288087 1 2022-01-16 Youenn Fablet <youenn@apple.com> 2 3 Enforce focus check for getUserMedia 4 https://bugs.webkit.org/show_bug.cgi?id=235026 5 6 Reviewed by Eric Carlson. 7 8 * fast/mediastream/MediaDevices-getUserMedia-expected.txt: 9 1 10 2022-01-16 Youenn Fablet <youenn@apple.com> 2 11 -
trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt
r252632 r288087 7 7 8 8 PASS navigator.mediaDevices.getUserMedia({audio:true}).then(gotStream1); did not throw exception. 9 PASS navigator.mediaDevices.getUserMedia() rejected with error: TypeError: Type error10 PASS navigator.mediaDevices.getUserMedia({}) rejected with error: TypeError: Type error9 PASS navigator.mediaDevices.getUserMedia() rejected with error: TypeError: No constraints provided 10 PASS navigator.mediaDevices.getUserMedia({}) rejected with error: TypeError: No constraints provided 11 11 PASS navigator.mediaDevices.getUserMedia.apply(undefined) rejected with error: TypeError: Can only call MediaDevices.getUserMedia on instances of MediaDevices 12 12 PASS Stream 1 generated. -
trunk/Source/WTF/ChangeLog
r288085 r288087 1 2022-01-16 Youenn Fablet <youenn@apple.com> 2 3 Enforce focus check for getUserMedia 4 https://bugs.webkit.org/show_bug.cgi?id=235026 5 6 Reviewed by Eric Carlson. 7 8 * Scripts/Preferences/WebPreferencesInternal.yaml: 9 1 10 2022-01-16 Lauro Moura <lmoura@igalia.com> 2 11 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml
r287253 r288087 294 294 default: false 295 295 296 GetUserMediaRequiresFocus: 297 type: bool 298 humanReadableName: "Require focus to start getUserMedia" 299 humanReadableDescription: "Require focus to start getUserMedia" 300 condition: ENABLE(MEDIA_STREAM) 301 defaultValue: 302 WebKitLegacy: 303 default: true 304 WebKit: 305 default: true 306 WebCore: 307 default: true 308 296 309 ICECandidateFilteringEnabled: 297 310 type: bool -
trunk/Source/WebCore/ChangeLog
r288086 r288087 1 2022-01-16 Youenn Fablet <youenn@apple.com> 2 3 Enforce focus check for getUserMedia 4 https://bugs.webkit.org/show_bug.cgi?id=235026 5 6 Reviewed by Eric Carlson. 7 8 Add infrastructure to register a callback so that a task is executed when the document is visible. 9 Use this to delay getUserMedia requests until document is visible. 10 The spec currently defines that we should wait for the current document to have focus but this is about to be changed and is not aligned with other browser implementations. 11 12 The patch also moves some getUserMedia checks earlier so as to respect order provided by the specs. 13 Add a check to validate getDisplayMedia is called on a visible document as the user gesture is now time based. 14 15 Covered by API test. 16 17 * Modules/mediastream/MediaDevices.cpp: 18 * Modules/mediastream/UserMediaRequest.cpp: 19 * Modules/mediastream/UserMediaRequest.h: 20 * dom/Document.cpp: 21 * dom/Document.h: 22 * editing/FrameSelection.cpp: 23 1 24 2022-01-16 Youenn Fablet <youenn@apple.com> 2 25 -
trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp
r287177 r288087 119 119 void MediaDevices::getUserMedia(const StreamConstraints& constraints, Promise&& promise) 120 120 { 121 auto audioConstraints = createMediaConstraints(constraints.audio); 122 auto videoConstraints = createMediaConstraints(constraints.video); 123 124 if (!audioConstraints.isValid && !videoConstraints.isValid) { 125 promise.reject(TypeError, "No constraints provided"_s); 126 return; 127 } 128 121 129 auto* document = this->document(); 122 130 if (!document || !document->isFullyActive()) { … … 125 133 } 126 134 127 auto audioConstraints = createMediaConstraints(constraints.audio);128 auto videoConstraints = createMediaConstraints(constraints.video);129 130 135 bool isUserGesturePriviledged = false; 131 136 … … 139 144 140 145 auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::UserMedia, WTFMove(audioConstraints), WTFMove(videoConstraints), isUserGesturePriviledged }, WTFMove(promise)); 141 request->start(); 146 147 if (!document->settings().getUserMediaRequiresFocus()) { 148 request->start(); 149 return; 150 } 151 152 // FIXME: We use hidden while the spec is using focus, let's revisit when when spec is made clearer. 153 document->whenVisible([request = WTFMove(request)] { 154 if (request->isContextStopped()) 155 return; 156 request->start(); 157 }); 158 } 159 160 static bool hasInvalidGetDisplayMediaConstraint(const MediaConstraints& constraints) 161 { 162 // https://w3c.github.io/mediacapture-screen-share/#navigator-additions 163 // 1. Let constraints be the method's first argument. 164 // 2. For each member present in constraints whose value, value, is a dictionary, run the following steps: 165 // 1. If value contains a member named advanced, return a promise rejected with a newly created TypeError. 166 // 2. If value contains a member which in turn is a dictionary containing a member named either min or 167 // exact, return a promise rejected with a newly created TypeError. 168 if (!constraints.isValid) 169 return false; 170 171 if (!constraints.advancedConstraints.isEmpty()) 172 return true; 173 174 bool invalid = false; 175 constraints.mandatoryConstraints.filter([&invalid] (const MediaConstraint& constraint) mutable { 176 switch (constraint.constraintType()) { 177 case MediaConstraintType::Width: 178 case MediaConstraintType::Height: { 179 auto& intConstraint = downcast<IntConstraint>(constraint); 180 int value; 181 invalid = intConstraint.getExact(value) || intConstraint.getMin(value); 182 break; 183 } 184 185 case MediaConstraintType::AspectRatio: 186 case MediaConstraintType::FrameRate: { 187 auto& doubleConstraint = downcast<DoubleConstraint>(constraint); 188 double value; 189 invalid = doubleConstraint.getExact(value) || doubleConstraint.getMin(value); 190 break; 191 } 192 193 case MediaConstraintType::DisplaySurface: 194 case MediaConstraintType::LogicalSurface: { 195 auto& boolConstraint = downcast<BooleanConstraint>(constraint); 196 bool value; 197 invalid = boolConstraint.getExact(value); 198 break; 199 } 200 201 case MediaConstraintType::FacingMode: 202 case MediaConstraintType::DeviceId: 203 case MediaConstraintType::GroupId: { 204 auto& stringConstraint = downcast<StringConstraint>(constraint); 205 Vector<String> values; 206 invalid = stringConstraint.getExact(values); 207 break; 208 } 209 210 case MediaConstraintType::SampleRate: 211 case MediaConstraintType::SampleSize: 212 case MediaConstraintType::Volume: 213 case MediaConstraintType::EchoCancellation: 214 // Ignored. 215 break; 216 217 case MediaConstraintType::Unknown: 218 ASSERT_NOT_REACHED(); 219 break; 220 } 221 222 return invalid; 223 }); 224 225 return invalid; 142 226 } 143 227 … … 154 238 } 155 239 156 auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::DisplayMedia, { }, createMediaConstraints(constraints.video), isUserGesturePriviledged }, WTFMove(promise)); 240 auto videoConstraints = createMediaConstraints(constraints.video); 241 if (hasInvalidGetDisplayMediaConstraint(videoConstraints)) { 242 promise.reject(Exception { TypeError, "getDisplayMedia must be called with valid constraints."_s }); 243 return; 244 } 245 246 // FIXME: We use hidden while the spec is using focus, let's revisit when when spec is made clearer. 247 if (!document->isFullyActive() || document->topDocument().hidden()) { 248 promise.reject(Exception { InvalidStateError, "Document is not fully active or does not have focus"_s }); 249 return; 250 } 251 252 auto request = UserMediaRequest::create(*document, { MediaStreamRequest::Type::DisplayMedia, { }, WTFMove(videoConstraints), isUserGesturePriviledged }, WTFMove(promise)); 157 253 request->start(); 158 254 } -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.cpp
r286918 r288087 86 86 } 87 87 88 static bool hasInvalidGetDisplayMediaConstraint(const MediaConstraints& constraints)89 {90 // https://w3c.github.io/mediacapture-screen-share/#navigator-additions91 // 1. Let constraints be the method's first argument.92 // 2. For each member present in constraints whose value, value, is a dictionary, run the following steps:93 // 1. If value contains a member named advanced, return a promise rejected with a newly created TypeError.94 // 2. If value contains a member which in turn is a dictionary containing a member named either min or95 // exact, return a promise rejected with a newly created TypeError.96 if (!constraints.isValid)97 return false;98 99 if (!constraints.advancedConstraints.isEmpty())100 return true;101 102 bool invalid = false;103 constraints.mandatoryConstraints.filter([&invalid] (const MediaConstraint& constraint) mutable {104 switch (constraint.constraintType()) {105 case MediaConstraintType::Width:106 case MediaConstraintType::Height: {107 auto& intConstraint = downcast<IntConstraint>(constraint);108 int value;109 invalid = intConstraint.getExact(value) || intConstraint.getMin(value);110 break;111 }112 113 case MediaConstraintType::AspectRatio:114 case MediaConstraintType::FrameRate: {115 auto& doubleConstraint = downcast<DoubleConstraint>(constraint);116 double value;117 invalid = doubleConstraint.getExact(value) || doubleConstraint.getMin(value);118 break;119 }120 121 case MediaConstraintType::DisplaySurface:122 case MediaConstraintType::LogicalSurface: {123 auto& boolConstraint = downcast<BooleanConstraint>(constraint);124 bool value;125 invalid = boolConstraint.getExact(value);126 break;127 }128 129 case MediaConstraintType::FacingMode:130 case MediaConstraintType::DeviceId:131 case MediaConstraintType::GroupId: {132 auto& stringConstraint = downcast<StringConstraint>(constraint);133 Vector<String> values;134 invalid = stringConstraint.getExact(values);135 break;136 }137 138 case MediaConstraintType::SampleRate:139 case MediaConstraintType::SampleSize:140 case MediaConstraintType::Volume:141 case MediaConstraintType::EchoCancellation:142 // Ignored.143 break;144 145 case MediaConstraintType::Unknown:146 ASSERT_NOT_REACHED();147 break;148 }149 150 return invalid;151 });152 153 return invalid;154 }155 156 88 void UserMediaRequest::start() 157 89 { … … 160 92 if (!context) { 161 93 deny(MediaAccessDenialReason::UserMediaDisabled); 162 return;163 }164 165 if (m_request.type == MediaStreamRequest::Type::DisplayMedia) {166 if (hasInvalidGetDisplayMediaConstraint(m_request.videoConstraints)) {167 deny(MediaAccessDenialReason::IllegalConstraint);168 return;169 }170 }171 172 // https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediadevices-getusermedia()173 // 1. Let constraints be the method's first argument.174 // 2. Let requestedMediaTypes be the set of media types in constraints with either a dictionary175 // value or a value of "true".176 // 3. If requestedMediaTypes is the empty set, return a promise rejected with a TypeError. The word177 // "optional" occurs in the WebIDL due to WebIDL rules, but the argument must be supplied in order178 // for the call to succeed.179 if (!m_request.audioConstraints.isValid && !m_request.videoConstraints.isValid) {180 deny(MediaAccessDenialReason::NoConstraints);181 94 return; 182 95 } … … 290 203 ExceptionCode code; 291 204 switch (reason) { 292 case MediaAccessDenialReason::IllegalConstraint:293 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - invalid constraints");294 code = TypeError;295 break;296 205 case MediaAccessDenialReason::NoConstraints: 297 206 RELEASE_LOG(MediaStream, "UserMediaRequest::deny - no constraints"); -
trunk/Source/WebCore/Modules/mediastream/UserMediaRequest.h
r281360 r288087 64 64 WEBCORE_EXPORT void allow(CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, String&& deviceIdentifierHashSalt, CompletionHandler<void()>&&); 65 65 66 enum MediaAccessDenialReason { NoConstraints, UserMediaDisabled, NoCaptureDevices, InvalidConstraint, HardwareError, PermissionDenied, InvalidAccess, IllegalConstraint,OtherFailure };66 enum MediaAccessDenialReason { NoConstraints, UserMediaDisabled, NoCaptureDevices, InvalidConstraint, HardwareError, PermissionDenied, InvalidAccess, OtherFailure }; 67 67 WEBCORE_EXPORT void deny(MediaAccessDenialReason, const String& errorMessage = emptyString()); 68 68 -
trunk/Source/WebCore/dom/Document.cpp
r288069 r288087 1873 1873 } 1874 1874 #endif 1875 1876 if (!hidden()) { 1877 auto callbacks = std::exchange(m_whenIsVisibleHandlers, { }); 1878 for (auto& callback : callbacks) 1879 callback(); 1880 } 1875 1881 } 1876 1882 … … 9096 9102 } 9097 9103 9104 void Document::whenVisible(Function<void()>&& callback) 9105 { 9106 if (hidden()) { 9107 m_whenIsVisibleHandlers.append(WTFMove(callback)); 9108 return; 9109 } 9110 callback(); 9111 } 9112 9098 9113 } // namespace WebCore 9099 9114 -
trunk/Source/WebCore/dom/Document.h
r288059 r288087 430 430 WEBCORE_EXPORT Element* activeElement(); 431 431 WEBCORE_EXPORT bool hasFocus() const; 432 void whenVisible(Function<void()>&&); 432 433 433 434 bool hasManifest() const; … … 2262 2263 2263 2264 std::unique_ptr<ModalContainerObserver> m_modalContainerObserver; 2265 2266 Vector<Function<void()>> m_whenIsVisibleHandlers; 2264 2267 }; 2265 2268 -
trunk/Source/WebKit/ChangeLog
r288085 r288087 1 2022-01-16 Youenn Fablet <youenn@apple.com> and Carlos Garcia Campos <cgarcia@igalia.com> 2 3 Enforce focus check for getUserMedia 4 https://bugs.webkit.org/show_bug.cgi?id=235026 5 6 Reviewed by Eric Carlson. 7 8 Add setters/getters for the getUserMedia focus settings. 9 10 * UIProcess/API/C/WKPreferences.cpp: 11 (WKPreferencesSetGetUserMediaRequiresFocus): 12 (WKPreferencesGetGetUserMediaRequiresFocus): 13 * UIProcess/API/C/WKPreferencesRefPrivate.h: 14 * UIProcess/API/Cocoa/WKPreferences.mm: 15 (-[WKPreferences _getUserMediaRequiresFocus]): 16 (-[WKPreferences _setGetUserMediaRequiresFocus:]): 17 * UIProcess/API/Cocoa/WKPreferencesPrivate.h: 18 * UIProcess/API/glib/WebKitSettings.cpp: 19 (webkitSettingsSetGetUserMediaRequiresFocus): 20 * UIProcess/API/glib/WebKitSettingsPrivate.h: 21 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 22 (webkitWebViewBaseMap): Always add the WindowIsActive flag under xvfb. 23 (webkitWebViewBaseIsFocused): Always consider the view focused when WindowIsActive flag is present under xvfb. 24 1 25 2022-01-16 Lauro Moura <lmoura@igalia.com> 2 26 -
trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp
r287121 r288087 1527 1527 } 1528 1528 1529 void WKPreferencesSetGetUserMediaRequiresFocus(WKPreferencesRef preferencesRef, bool enabled) 1530 { 1531 toImpl(preferencesRef)->setGetUserMediaRequiresFocus(enabled); 1532 } 1533 1534 bool WKPreferencesGetGetUserMediaRequiresFocus(WKPreferencesRef preferencesRef) 1535 { 1536 return toImpl(preferencesRef)->getUserMediaRequiresFocus(); 1537 } 1538 1529 1539 void WKPreferencesSetICECandidateFilteringEnabled(WKPreferencesRef preferencesRef, bool enabled) 1530 1540 { -
trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRefPrivate.h
r285575 r288087 400 400 401 401 // Defaults to true. 402 WK_EXPORT void WKPreferencesSetGetUserMediaRequiresFocus(WKPreferencesRef, bool); 403 WK_EXPORT bool WKPreferencesGetGetUserMediaRequiresFocus(WKPreferencesRef); 404 405 // Defaults to true. 402 406 WK_EXPORT void WKPreferencesSetICECandidateFilteringEnabled(WKPreferencesRef, bool); 403 407 WK_EXPORT bool WKPreferencesGetICECandidateFilteringEnabled(WKPreferencesRef); -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm
r288034 r288087 651 651 } 652 652 653 - (BOOL)_getUserMediaRequiresFocus 654 { 655 return _preferences->getUserMediaRequiresFocus(); 656 } 657 658 - (void)_setGetUserMediaRequiresFocus:(BOOL)enabled 659 { 660 _preferences->setGetUserMediaRequiresFocus(enabled); 661 } 662 653 663 - (BOOL)_screenCaptureEnabled 654 664 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h
r288034 r288087 118 118 @property (nonatomic, setter=_setPeerConnectionEnabled:) BOOL _peerConnectionEnabled WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); 119 119 @property (nonatomic, setter=_setMediaDevicesEnabled:) BOOL _mediaDevicesEnabled WK_API_AVAILABLE(macos(10.13), ios(11.0)); 120 @property (nonatomic, setter=_setGetUserMediaRequiresFocus:) BOOL _getUserMediaRequiresFocus WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 120 121 @property (nonatomic, setter=_setScreenCaptureEnabled:) BOOL _screenCaptureEnabled WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); 121 122 @property (nonatomic, setter=_setMockCaptureDevicesEnabled:) BOOL _mockCaptureDevicesEnabled WK_API_AVAILABLE(macos(10.13), ios(11.0)); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp
r286772 r288087 3828 3828 } 3829 3829 3830 void webkitSettingsSetGetUserMediaRequiresFocus(WebKitSettings* settings, bool required) 3831 { 3832 WebKitSettingsPrivate* priv = settings->priv; 3833 priv->preferences->setGetUserMediaRequiresFocus(required); 3834 } 3835 3830 3836 /** 3831 3837 * webkit_settings_get_media_content_types_requiring_hardware_support: -
trunk/Source/WebKit/UIProcess/API/glib/WebKitSettingsPrivate.h
r270640 r288087 34 34 35 35 WK_EXPORT void webkitSettingsSetMediaCaptureRequiresSecureConnection(WebKitSettings*, bool required); 36 WK_EXPORT void webkitSettingsSetGetUserMediaRequiresFocus(WebKitSettings*, bool required); 36 37 37 38 #endif // WebKitSettingsPrivate_h -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
r287794 r288087 912 912 if (!(priv->activityState & ActivityState::IsInWindow)) 913 913 flagsToUpdate.add(ActivityState::IsInWindow); 914 915 #if ENABLE(DEVELOPER_MODE) 916 // Xvfb doesn't support toplevel focus, so gtk_window_is_active() always returns false. We consider 917 // toplevel window to be always active since it's the only one. 918 if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::X11) { 919 if (!g_strcmp0(g_getenv("UNDER_XVFB"), "yes")) 920 flagsToUpdate.add(ActivityState::WindowIsActive); 921 } 922 #endif 923 914 924 if (gtk_window_is_active(GTK_WINDOW(priv->toplevelOnScreenWindow)) && !(priv->activityState & ActivityState::WindowIsActive)) 915 925 flagsToUpdate.add(ActivityState::WindowIsActive); … … 2430 2440 bool webkitWebViewBaseIsFocused(WebKitWebViewBase* webViewBase) 2431 2441 { 2442 #if ENABLE(DEVELOPER_MODE) 2443 // Xvfb doesn't support toplevel focus, so the view is never focused. We consider it to tbe focused when 2444 // its window is marked as active. 2445 if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::X11) { 2446 if (!g_strcmp0(g_getenv("UNDER_XVFB"), "yes") && webViewBase->priv->activityState.contains(ActivityState::WindowIsActive)) 2447 return true; 2448 } 2449 #endif 2432 2450 return webViewBase->priv->activityState.contains(ActivityState::IsFocused); 2433 2451 } -
trunk/Tools/ChangeLog
r288071 r288087 1 2022-01-16 Youenn Fablet <youenn@apple.com> 2 3 Enforce focus check for getUserMedia 4 https://bugs.webkit.org/show_bug.cgi?id=235026 5 6 Reviewed by Eric Carlson. 7 8 Disable focus flag for testing to not require to focus the window. 9 10 * TestWebKitAPI/Tests/WebKit/GetUserMedia.mm: 11 (TestWebKitAPI::initializeMediaCaptureConfiguration): 12 (TestWebKitAPI::doCaptureMuteTest): 13 (TestWebKitAPI::TEST): 14 * TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm: 15 (TestWebKitAPI::initializeMediaCaptureConfiguration): 16 (TestWebKitAPI::TEST): 17 * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm: 18 (TestWebKitAPI::initializeMediaCaptureConfiguration): 19 (TestWebKitAPI::TEST): 20 * TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm: 21 (TestWebKitAPI::TEST): 22 * TestWebKitAPI/Tests/WebKit/UserMedia.cpp: 23 (TestWebKitAPI::TEST): 24 * TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm: 25 (TestWebKitAPI::TEST): 26 * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm: 27 (TEST): 28 * TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm: 29 (TestWebKitAPI::GetDisplayMediaTest::SetUp): 30 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: 31 * TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm: 32 (TestWebKitAPI::TEST): 33 * TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm: 34 (MediaCaptureDisabledTest::SetUp): 35 * TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm: 36 (MediaCaptureSimulateFailedSandbox::SetUp): 37 * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp: 38 (testWebViewUserMediaEnumerateDevicesPermissionCheck): 39 (testWebViewUserMediaPermissionRequests): 40 (testWebViewAudioOnlyUserMediaPermissionRequests): 41 1 42 2022-01-15 Sam Weinig <weinig@apple.com> 2 43 -
trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMedia.mm
r283180 r288087 153 153 } 154 154 155 static void initializeMediaCaptureConfiguration(WKWebViewConfiguration* configuration) 156 { 157 auto preferences = [configuration preferences]; 158 159 configuration._mediaCaptureEnabled = YES; 160 preferences._mediaCaptureRequiresSecureConnection = NO; 161 preferences._mockCaptureDevicesEnabled = YES; 162 preferences._getUserMediaRequiresFocus = NO; 163 } 164 155 165 void doCaptureMuteTest(const Function<void(TestWKWebView*, _WKMediaMutedState)>& setPageMuted) 156 166 { 157 167 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 158 168 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 159 auto preferences = [configuration preferences]; 160 preferences._mediaCaptureRequiresSecureConnection = NO; 161 configuration.get()._mediaCaptureEnabled = YES; 162 preferences._mockCaptureDevicesEnabled = YES; 169 initializeMediaCaptureConfiguration(configuration.get()); 163 170 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 164 171 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); … … 236 243 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 237 244 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 238 auto preferences = [configuration preferences]; 239 preferences._mediaCaptureRequiresSecureConnection = NO; 240 configuration.get()._mediaCaptureEnabled = YES; 241 preferences._mockCaptureDevicesEnabled = YES; 245 initializeMediaCaptureConfiguration(configuration.get()); 242 246 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 243 247 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); … … 341 345 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 342 346 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 343 auto preferences = [configuration preferences]; 344 preferences._mediaCaptureRequiresSecureConnection = NO; 345 configuration.get()._mediaCaptureEnabled = YES; 346 preferences._mockCaptureDevicesEnabled = YES; 347 initializeMediaCaptureConfiguration(configuration.get()); 347 348 348 349 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 379 380 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 380 381 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 381 auto preferences = [configuration preferences]; 382 preferences._mediaCaptureRequiresSecureConnection = NO; 383 configuration.get()._mediaCaptureEnabled = YES; 384 preferences._mockCaptureDevicesEnabled = YES; 382 initializeMediaCaptureConfiguration(configuration.get()); 385 383 386 384 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 415 413 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 416 414 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 417 auto preferences = [configuration preferences]; 418 preferences._mediaCaptureRequiresSecureConnection = NO; 419 configuration.get()._mediaCaptureEnabled = YES; 420 preferences._mockCaptureDevicesEnabled = YES; 415 initializeMediaCaptureConfiguration(configuration.get()); 421 416 422 417 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 443 438 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 444 439 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 445 auto preferences = [configuration preferences]; 446 preferences._mediaCaptureRequiresSecureConnection = NO; 447 configuration.get()._mediaCaptureEnabled = YES; 448 preferences._mockCaptureDevicesEnabled = YES; 440 initializeMediaCaptureConfiguration(configuration.get()); 449 441 450 442 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 474 466 #endif 475 467 476 auto preferences = [configuration preferences]; 477 preferences._mediaCaptureRequiresSecureConnection = NO; 478 configuration.get()._mediaCaptureEnabled = YES; 479 preferences._mockCaptureDevicesEnabled = YES; 468 initializeMediaCaptureConfiguration(configuration.get()); 480 469 481 470 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 533 522 #endif 534 523 535 auto preferences = [configuration preferences]; 536 preferences._mediaCaptureRequiresSecureConnection = NO; 537 configuration.get()._mediaCaptureEnabled = YES; 538 preferences._mockCaptureDevicesEnabled = YES; 524 initializeMediaCaptureConfiguration(configuration.get()); 539 525 540 526 done = false; … … 556 542 configuration.get().processPool._configuration.shouldCaptureAudioInUIProcess = NO; 557 543 558 auto preferences = [configuration preferences]; 559 preferences._mediaCaptureRequiresSecureConnection = NO; 560 configuration.get()._mediaCaptureEnabled = YES; 561 preferences._mockCaptureDevicesEnabled = YES; 544 initializeMediaCaptureConfiguration(configuration.get()); 562 545 563 546 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 592 575 } 593 576 594 preferences._mediaCaptureRequiresSecureConnection = NO; 595 configuration.get()._mediaCaptureEnabled = YES; 596 preferences._mockCaptureDevicesEnabled = YES; 577 initializeMediaCaptureConfiguration(configuration.get()); 597 578 598 579 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 667 648 [preferences _setEnabled:YES forInternalDebugFeature:feature]; 668 649 } 669 preferences._mediaCaptureRequiresSecureConnection = NO; 670 configuration.get()._mediaCaptureEnabled = YES; 671 preferences._mockCaptureDevicesEnabled = YES; 650 initializeMediaCaptureConfiguration(configuration.get()); 672 651 673 652 #if PLATFORM(IOS_FAMILY) … … 747 726 } 748 727 749 preferences._mediaCaptureRequiresSecureConnection = NO; 750 configuration.get()._mediaCaptureEnabled = YES; 751 preferences._mockCaptureDevicesEnabled = YES; 728 initializeMediaCaptureConfiguration(configuration.get()); 752 729 753 730 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); … … 868 845 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"gum"]; 869 846 870 auto preferences = [configuration preferences]; 871 preferences._mediaCaptureRequiresSecureConnection = NO; 872 configuration.get()._mediaCaptureEnabled = YES; 873 preferences._mockCaptureDevicesEnabled = YES; 847 initializeMediaCaptureConfiguration(configuration.get()); 874 848 875 849 done = false; … … 897 871 done = false; 898 872 [webView stringByEvaluatingJavaScript:@"doTest()"]; 873 TestWebKitAPI::Util::run(&done); 874 } 875 876 static const char* getUserMediaFocusText = R"DOCDOCDOC( 877 <html><body> 878 <script> 879 onload = () => { 880 document.onvisibilitychange = () => window.webkit.messageHandlers.gum.postMessage("PASS"); 881 window.webkit.messageHandlers.gum.postMessage("PASS"); 882 } 883 884 function capture() 885 { 886 navigator.mediaDevices.getUserMedia({video : true}).then(stream => { 887 window.webkit.messageHandlers.gum.postMessage(document.hasFocus() ? "PASS" : "FAIL"); 888 }); 889 } 890 </script> 891 </body></html> 892 )DOCDOCDOC"; 893 894 TEST(WebKit, GetUserMediaFocus) 895 { 896 TestWebKitAPI::HTTPServer server({ 897 { "/", { getUserMediaFocusText } } 898 }, TestWebKitAPI::HTTPServer::Protocol::Http, nullptr, nullptr, 9090); 899 900 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 901 902 auto context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest")); 903 configuration.get().processPool = (WKProcessPool *)context.get(); 904 905 auto messageHandler = adoptNS([[GUMMessageHandler alloc] init]); 906 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"gum"]; 907 908 initializeMediaCaptureConfiguration(configuration.get()); 909 auto preferences = [configuration preferences]; 910 preferences._getUserMediaRequiresFocus = YES; 911 912 done = false; 913 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get() addToWindow:YES]); 914 915 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); 916 webView.get().UIDelegate = delegate.get(); 917 918 // Load page. 919 [webView loadRequest:server.request()]; 920 TestWebKitAPI::Util::run(&done); 921 922 // Minimize 923 done = false; 924 auto *hostWindow = [webView hostWindow]; 925 [hostWindow miniaturize:hostWindow]; 926 TestWebKitAPI::Util::run(&done); 927 928 // We call capture while minimizing. 929 done = false; 930 [webView stringByEvaluatingJavaScript:@"capture()"]; 931 932 // Make sure that getUserMedia does not resolve too soon. 933 TestWebKitAPI::Util::spinRunLoop(100); 934 EXPECT_FALSE(done); 935 936 [hostWindow deminiaturize:hostWindow]; 899 937 TestWebKitAPI::Util::run(&done); 900 938 } … … 925 963 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 926 964 [configuration setWebsiteDataStore:adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]).get()]; 927 auto preferences = [configuration preferences]; 928 configuration.get()._mediaCaptureEnabled = YES; 929 preferences._mediaCaptureRequiresSecureConnection = NO; 930 preferences._mockCaptureDevicesEnabled = YES; 965 initializeMediaCaptureConfiguration(configuration.get()); 931 966 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get()]); 932 967 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaNavigation.mm
r275162 r288087 68 68 namespace TestWebKitAPI { 69 69 70 static void initializeMediaCaptureConfiguration(WKWebViewConfiguration* configuration) 71 { 72 auto preferences = [configuration preferences]; 73 74 configuration._mediaCaptureEnabled = YES; 75 preferences._mediaCaptureRequiresSecureConnection = NO; 76 preferences._mockCaptureDevicesEnabled = YES; 77 preferences._getUserMediaRequiresFocus = NO; 78 } 79 70 80 TEST(WebKit, NavigateDuringGetUserMediaPrompt) 71 81 { … … 89 99 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 90 100 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 91 auto preferences = [configuration preferences]; 92 preferences._mediaCaptureRequiresSecureConnection = NO; 93 configuration.get()._mediaCaptureEnabled = YES; 94 preferences._mockCaptureDevicesEnabled = YES; 101 initializeMediaCaptureConfiguration(configuration.get()); 95 102 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 96 103 auto delegate = adoptNS([[NavigationWhileGetUserMediaPromptDisplayedUIDelegate alloc] init]); … … 118 125 [configuration setWebsiteDataStore:adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]).get()]; 119 126 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 120 auto preferences = [configuration preferences]; 121 preferences._mediaCaptureRequiresSecureConnection = NO; 122 configuration.get()._mediaCaptureEnabled = YES; 123 preferences._mockCaptureDevicesEnabled = YES; 127 initializeMediaCaptureConfiguration(configuration.get()); 124 128 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 125 129 auto delegate = adoptNS([[NavigationWhileGetUserMediaPromptDisplayedUIDelegate alloc] init]); … … 148 152 [configuration setWebsiteDataStore:adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]).get()]; 149 153 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 150 auto preferences = [configuration preferences]; 151 preferences._mediaCaptureRequiresSecureConnection = NO; 152 configuration.get()._mediaCaptureEnabled = YES; 153 preferences._mockCaptureDevicesEnabled = YES; 154 initializeMediaCaptureConfiguration(configuration.get()); 154 155 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 155 156 auto delegate = adoptNS([[NavigationWhileGetUserMediaPromptDisplayedUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm
r275162 r288087 61 61 namespace TestWebKitAPI { 62 62 63 static void initializeMediaCaptureConfiguration(WKWebViewConfiguration* configuration) 64 { 65 auto preferences = [configuration preferences]; 66 67 configuration._mediaCaptureEnabled = YES; 68 preferences._mediaCaptureRequiresSecureConnection = NO; 69 preferences._mockCaptureDevicesEnabled = YES; 70 preferences._getUserMediaRequiresFocus = NO; 71 } 72 63 73 TEST(WebKit2, GetUserMediaReprompt) 64 74 { … … 66 76 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 67 77 auto preferences = [configuration preferences]; 68 preferences._mediaCaptureRequiresSecureConnection = NO; 69 configuration.get()._mediaCaptureEnabled = YES; 70 preferences._mockCaptureDevicesEnabled = YES; 78 initializeMediaCaptureConfiguration(configuration.get()); 71 79 auto webView = adoptNS([[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 72 80 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); … … 101 109 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 102 110 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 103 auto preferences = [configuration preferences]; 104 preferences._mediaCaptureRequiresSecureConnection = NO; 105 configuration.get()._mediaCaptureEnabled = YES; 106 preferences._mockCaptureDevicesEnabled = YES; 111 initializeMediaCaptureConfiguration(configuration.get()); 107 112 auto webView = adoptNS([[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 108 113 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); … … 124 129 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 125 130 auto processPoolConfig = adoptNS([[_WKProcessPoolConfiguration alloc] init]); 126 auto preferences = [configuration preferences]; 127 preferences._mediaCaptureRequiresSecureConnection = NO; 128 configuration.get()._mediaCaptureEnabled = YES; 129 preferences._mockCaptureDevicesEnabled = YES; 131 initializeMediaCaptureConfiguration(configuration.get()); 130 132 auto webView = adoptNS([[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 131 133 auto delegate = adoptNS([[UserMediaCaptureUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKit/MediaStreamTrackDetached.mm
r275162 r288087 62 62 configuration.get()._mediaCaptureEnabled = YES; 63 63 preferences._mockCaptureDevicesEnabled = YES; 64 preferences._getUserMediaRequiresFocus = NO; 64 65 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()]); 65 66 auto delegate = adoptNS([[MediaStreamTrackDetachedUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKit/UserMedia.cpp
r244390 r288087 78 78 WKPreferencesSetMediaCaptureRequiresSecureConnection(preferences, false); 79 79 WKPreferencesSetMockCaptureDevicesEnabled(preferences, true); 80 WKPreferencesSetGetUserMediaRequiresFocus(preferences, false); 80 81 81 82 WKPageUIClientV6 uiClient; … … 114 115 WKPreferencesSetMediaCaptureRequiresSecureConnection(preferences, false); 115 116 WKPreferencesSetMockCaptureDevicesEnabled(preferences, true); 117 WKPreferencesSetGetUserMediaRequiresFocus(preferences, false); 116 118 117 119 WKPageUIClientV6 uiClient; … … 174 176 WKPreferencesSetMediaCaptureRequiresSecureConnection(preferences, false); 175 177 WKPreferencesSetMockCaptureDevicesEnabled(preferences, true); 178 WKPreferencesSetGetUserMediaRequiresFocus(preferences, false); 176 179 177 180 WKPageUIClientV6 uiClient; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/AudioBufferSize.mm
r280664 r288087 73 73 preferences._mediaCaptureRequiresSecureConnection = NO; 74 74 preferences._mockCaptureDevicesEnabled = YES; 75 preferences._getUserMediaRequiresFocus = NO; 75 76 76 77 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get() addToWindow:YES]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm
r286816 r288087 697 697 configuration._mediaCaptureEnabled = YES; 698 698 preferences._mockCaptureDevicesEnabled = YES; 699 preferences._getUserMediaRequiresFocus = NO; 699 700 }); 700 701 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GetDisplayMedia.mm
r285547 r288087 105 105 preferences._screenCaptureEnabled = YES; 106 106 107 m_webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:m_configuration.get() ]);107 m_webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:m_configuration.get() addToWindow:YES]); 108 108 109 109 m_uiDelegate = adoptNS([[GetDisplayMediaUIDelegate alloc] init]); 110 110 m_webView.get().UIDelegate = m_uiDelegate.get(); 111 [m_webView focus]; 111 112 112 113 [m_webView synchronouslyLoadTestPageNamed:@"getDisplayMedia"]; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r286661 r288087 6829 6829 webViewConfiguration.get()._mediaCaptureEnabled = YES; 6830 6830 preferences._mockCaptureDevicesEnabled = YES; 6831 preferences._getUserMediaRequiresFocus = NO; 6831 6832 6832 6833 [webViewConfiguration setProcessPool:processPool.get()]; -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/SpeechRecognition.mm
r285547 r288087 163 163 preferences._speechRecognitionEnabled = YES; 164 164 preferences._mediaCaptureRequiresSecureConnection = NO; 165 preferences._getUserMediaRequiresFocus = NO; 165 166 auto delegate = adoptNS([[SpeechRecognitionUIDelegate alloc] init]); 166 167 auto firstWebView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaDisabled.mm
r285547 r288087 83 83 preferences._mockCaptureDevicesEnabled = YES; 84 84 preferences._mediaCaptureRequiresSecureConnection = NO; 85 preferences._getUserMediaRequiresFocus = NO; 85 86 86 87 m_uiDelegate = adoptNS([[UserMediaUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm
r285547 r288087 84 84 preferences._mockCaptureDevicesEnabled = YES; 85 85 preferences._mediaCaptureRequiresSecureConnection = NO; 86 preferences._getUserMediaRequiresFocus = NO; 86 87 87 88 m_uiDelegate = adoptNS([[SimulateFailedSandboxUIDelegate alloc] init]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp
r283972 r288087 1003 1003 webkit_settings_set_enable_media_stream(settings, TRUE); 1004 1004 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, FALSE); 1005 webkitSettingsSetGetUserMediaRequiresFocus(settings, FALSE); 1005 1006 webkit_settings_set_enable_mock_capture_devices(settings, TRUE); 1006 1007 … … 1038 1039 webkit_settings_set_enable_mock_capture_devices(settings, FALSE); 1039 1040 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, TRUE); 1041 webkitSettingsSetGetUserMediaRequiresFocus(settings, TRUE); 1040 1042 } 1041 1043 … … 1047 1049 webkit_settings_set_enable_mock_capture_devices(settings, TRUE); 1048 1050 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, FALSE); 1051 webkitSettingsSetGetUserMediaRequiresFocus(settings, FALSE); 1049 1052 1050 1053 test->showInWindow(); … … 1106 1109 webkit_settings_set_enable_mock_capture_devices(settings, FALSE); 1107 1110 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, TRUE); 1111 webkitSettingsSetGetUserMediaRequiresFocus(settings, TRUE); 1108 1112 } 1109 1113 … … 1115 1119 webkit_settings_set_enable_mock_capture_devices(settings, TRUE); 1116 1120 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, FALSE); 1121 webkitSettingsSetGetUserMediaRequiresFocus(settings, FALSE); 1117 1122 1118 1123 test->showInWindow(); … … 1145 1150 webkit_settings_set_enable_mock_capture_devices(settings, FALSE); 1146 1151 webkitSettingsSetMediaCaptureRequiresSecureConnection(settings, TRUE); 1152 webkitSettingsSetGetUserMediaRequiresFocus(settings, TRUE); 1147 1153 } 1148 1154
Note: See TracChangeset
for help on using the changeset viewer.