Title: [224044] trunk/Tools
Revision
224044
Author
[email protected]
Date
2017-10-26 13:22:13 -0700 (Thu, 26 Oct 2017)

Log Message

[MediaStream] Clear cached gUM prompt state
https://bugs.webkit.org/show_bug.cgi?id=178754
<rdar://problem/32742356>

Unreviewed, fix a flakey test.

Patch by Eric Carlson <[email protected]> on 2017-10-26

* TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
(-[GetUserMediaRepromptTestView haveStream:]): New, check several times for expected state.
(TestWebKitAPI::TEST): Don't assume stream state changes in the page immediately.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (224043 => 224044)


--- trunk/Tools/ChangeLog	2017-10-26 20:20:42 UTC (rev 224043)
+++ trunk/Tools/ChangeLog	2017-10-26 20:22:13 UTC (rev 224044)
@@ -1,3 +1,15 @@
+2017-10-26  Eric Carlson  <[email protected]>
+
+        [MediaStream] Clear cached gUM prompt state
+        https://bugs.webkit.org/show_bug.cgi?id=178754
+        <rdar://problem/32742356>
+
+        Unreviewed, fix a flakey test.
+
+        * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
+        (-[GetUserMediaRepromptTestView haveStream:]): New, check several times for expected state.
+        (TestWebKitAPI::TEST): Don't assume stream state changes in the page immediately.
+
 2017-10-26  Andy Estes  <[email protected]>
 
         [Payment Request] Enable Payment Request whenever Apple Pay is enabled

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm (224043 => 224044)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm	2017-10-26 20:20:42 UTC (rev 224043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm	2017-10-26 20:22:13 UTC (rev 224044)
@@ -58,6 +58,26 @@
 }
 @end
 
+@interface GetUserMediaRepromptTestView : TestWKWebView
+- (BOOL)haveStream:(BOOL)expected;
+@end
+
+@implementation GetUserMediaRepromptTestView
+- (BOOL)haveStream:(BOOL)expected
+{
+    int retryCount = 10;
+    while (retryCount--) {
+        auto result = [self stringByEvaluatingJavaScript:@"haveStream()"];
+        if (result.boolValue == expected)
+            return YES;
+
+        TestWebKitAPI::Util::spinRunLoop(10);
+    }
+
+    return NO;
+}
+@end
+
 namespace TestWebKitAPI {
 
 TEST(WebKit2, GetUserMediaReprompt)
@@ -68,7 +88,7 @@
     preferences._mediaCaptureRequiresSecureConnection = NO;
     preferences._mediaDevicesEnabled = YES;
     preferences._mockCaptureDevicesEnabled = YES;
-    auto webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()];
+    auto webView = [[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()];
     auto delegate = adoptNS([[GetUserMediaRepromptUIDelegate alloc] init]);
     webView.UIDelegate = delegate.get();
 
@@ -76,23 +96,19 @@
     [webView loadTestPageNamed:@"getUserMedia"];
     TestWebKitAPI::Util::run(&wasPrompted);
 
-    auto result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
-    EXPECT_TRUE([result boolValue]);
+    EXPECT_TRUE([webView haveStream:YES]);
 
     [webView stringByEvaluatingJavaScript:@"stop()"];
-    result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
-    EXPECT_FALSE([result boolValue]);
+    EXPECT_TRUE([webView haveStream:NO]);
 
     wasPrompted = false;
     [webView stringByEvaluatingJavaScript:@"promptForCapture()"];
-    result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
-    EXPECT_TRUE([result boolValue]);
+    EXPECT_TRUE([webView haveStream:YES]);
     EXPECT_FALSE(wasPrompted);
 
     preferences._inactiveMediaCaptureSteamRepromptIntervalInMinutes = .5 / 60;
     [webView stringByEvaluatingJavaScript:@"stop()"];
-    result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
-    EXPECT_FALSE([result boolValue]);
+    EXPECT_TRUE([webView haveStream:NO]);
 
     // Sleep long enough for the reprompt timer to fire and clear cached state.
     Util::sleep(1);
@@ -100,8 +116,7 @@
     wasPrompted = false;
     [webView stringByEvaluatingJavaScript:@"promptForCapture()"];
     TestWebKitAPI::Util::run(&wasPrompted);
-    result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
-    EXPECT_TRUE([result boolValue]);
+    EXPECT_TRUE([webView haveStream:YES]);
 }
 
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to