Tools/ChangeLog

 12017-10-26 Eric Carlson <eric.carlson@apple.com>
 2
 3 [MediaStream] Clear cached gUM prompt state
 4 https://bugs.webkit.org/show_bug.cgi?id=178754
 5 <rdar://problem/32742356>
 6
 7 Unreviewed, fix a flakey test.
 8
 9 * TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm:
 10 (-[GetUserMediaRepromptTestView haveStream:]): New, check several times for expected state.
 11 (TestWebKitAPI::TEST): Don't assume stream state changes in the page immediately.
 12
1132017-10-26 Christopher Reid <chris.reid@sony.com>
214
315 Remove scopeguard from platform
224025

Tools/TestWebKitAPI/Tests/WebKit/GetUserMediaReprompt.mm

@@- (void)_webView:(WKWebView *)webView ch
5858}
5959@end
6060
 61@interface GetUserMediaRepromptTestView : TestWKWebView
 62- (BOOL)haveStream:(BOOL)expected;
 63@end
 64
 65@implementation GetUserMediaRepromptTestView
 66- (BOOL)haveStream:(BOOL)expected
 67{
 68 int retryCount = 10;
 69 while (retryCount--) {
 70 auto result = [self stringByEvaluatingJavaScript:@"haveStream()"];
 71 if (result.boolValue == expected)
 72 return YES;
 73
 74 TestWebKitAPI::Util::spinRunLoop(10);
 75 }
 76
 77 return NO;
 78}
 79@end
 80
6181namespace TestWebKitAPI {
6282
6383TEST(WebKit2, GetUserMediaReprompt)

@@TEST(WebKit2, GetUserMediaReprompt)
6888 preferences._mediaCaptureRequiresSecureConnection = NO;
6989 preferences._mediaDevicesEnabled = YES;
7090 preferences._mockCaptureDevicesEnabled = YES;
71  auto webView = [[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()];
 91 auto webView = [[GetUserMediaRepromptTestView alloc] initWithFrame:CGRectMake(0, 0, 320, 500) configuration:configuration.get() processPoolConfiguration:processPoolConfig.get()];
7292 auto delegate = adoptNS([[GetUserMediaRepromptUIDelegate alloc] init]);
7393 webView.UIDelegate = delegate.get();
7494

@@TEST(WebKit2, GetUserMediaReprompt)
7696 [webView loadTestPageNamed:@"getUserMedia"];
7797 TestWebKitAPI::Util::run(&wasPrompted);
7898
79  auto result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
80  EXPECT_TRUE([result boolValue]);
 99 EXPECT_TRUE([webView haveStream:YES]);
81100
82101 [webView stringByEvaluatingJavaScript:@"stop()"];
83  result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
84  EXPECT_FALSE([result boolValue]);
 102 EXPECT_TRUE([webView haveStream:NO]);
85103
86104 wasPrompted = false;
87105 [webView stringByEvaluatingJavaScript:@"promptForCapture()"];
88  result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
89  EXPECT_TRUE([result boolValue]);
 106 EXPECT_TRUE([webView haveStream:YES]);
90107 EXPECT_FALSE(wasPrompted);
91108
92109 preferences._inactiveMediaCaptureSteamRepromptIntervalInMinutes = .5 / 60;
93110 [webView stringByEvaluatingJavaScript:@"stop()"];
94  result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
95  EXPECT_FALSE([result boolValue]);
 111 EXPECT_TRUE([webView haveStream:NO]);
96112
97113 // Sleep long enough for the reprompt timer to fire and clear cached state.
98114 Util::sleep(1);

@@TEST(WebKit2, GetUserMediaReprompt)
100116 wasPrompted = false;
101117 [webView stringByEvaluatingJavaScript:@"promptForCapture()"];
102118 TestWebKitAPI::Util::run(&wasPrompted);
103  result = [webView stringByEvaluatingJavaScript:@"haveStream()"];
104  EXPECT_TRUE([result boolValue]);
 119 EXPECT_TRUE([webView haveStream:YES]);
105120}
106121
107122} // namespace TestWebKitAPI
224022