160static bool didReceiveMessage;
161static void didFinishNavigation(WKPageRef, WKNavigationRef, WKTypeRef, const void*)
162{
163 didReceiveMessage = true;
164}
165
166TEST(WebKit, EnumerateDevicesCrash)
167{
168 auto context = adoptWK(WKContextCreateWithConfiguration(nullptr));
169
170 WKRetainPtr<WKPageGroupRef> pageGroup(AdoptWK, WKPageGroupCreateWithIdentifier(Util::toWK("GetUserMedia").get()));
171 WKPreferencesRef preferences = WKPageGroupGetPreferences(pageGroup.get());
172 WKPreferencesSetMediaDevicesEnabled(preferences, true);
173 WKPreferencesSetFileAccessFromFileURLsAllowed(preferences, true);
174 WKPreferencesSetMediaCaptureRequiresSecureConnection(preferences, false);
175 WKPreferencesSetMockCaptureDevicesEnabled(preferences, true);
176
177 WKPageUIClientV6 uiClient;
178 // We want uiClient.checkUserMediaPermissionForOrigin to be null.
179 memset(&uiClient, 0, sizeof(uiClient));
180 uiClient.base.version = 6;
181
182 WKPageNavigationClientV3 loaderClient;
183 memset(&loaderClient, 0, sizeof(loaderClient));
184 loaderClient.base.version = 3;
185 loaderClient.didFinishNavigation = didFinishNavigation;
186
187 PlatformWebView webView(context.get(), pageGroup.get());
188 WKPageSetPageUIClient(webView.page(), &uiClient.base);
189 WKPageSetPageNavigationClient(webView.page(), &loaderClient.base);
190
191 // Load a page doing enumerateDevices.
192 didReceiveMessage = false;
193 auto url = adoptWK(Util::createURLForResource("getUserMedia", "html"));
194 WKPageLoadURL(webView.page(), url.get());
195 Util::run(&didReceiveMessage);
196}
197