Merge "Merge "Merge "Merge "Avoid relying on undocumented behaviour in popup test." into marshmallow-cts-dev am: d5b75ce7c4" into nougat-cts-dev am: 482aa6a49d" into nougat-mr1-cts-dev am: c9d7068949" into oreo-cts-dev
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
index f10e7fd..55e3c40 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
@@ -19,11 +19,13 @@
 import android.graphics.Bitmap;
 import android.net.http.SslError;
 import android.os.Build;
+import android.os.Message;
 import android.test.ActivityInstrumentationTestCase2;
 import android.util.Base64;
 import android.util.Log;
 import android.webkit.ConsoleMessage;
 import android.webkit.SslErrorHandler;
+import android.webkit.WebChromeClient;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebResourceResponse;
 import android.webkit.WebResourceRequest;
@@ -42,6 +44,8 @@
 import java.io.FileOutputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Locale;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -409,26 +413,38 @@
             return;
         }
         mSettings.setJavaScriptEnabled(true);
+        mSettings.setSupportMultipleWindows(true);
+        startWebServer();
+
+        final WebView childWebView = mOnUiThread.createWebView();
+        final CountDownLatch latch = new CountDownLatch(1);
+        mOnUiThread.setWebChromeClient(new WebChromeClient() {
+            @Override
+            public boolean onCreateWindow(
+                WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
+                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
+                transport.setWebView(childWebView);
+                resultMsg.sendToTarget();
+                latch.countDown();
+                return true;
+            }
+        });
 
         mSettings.setJavaScriptCanOpenWindowsAutomatically(false);
         assertFalse(mSettings.getJavaScriptCanOpenWindowsAutomatically());
-        loadAssetUrl(TestHtmlConstants.POPUP_URL);
+        mOnUiThread.loadUrl(mWebServer.getAssetUrl(TestHtmlConstants.POPUP_URL));
         new PollingCheck(WEBVIEW_TIMEOUT) {
             @Override
             protected boolean check() {
                 return "Popup blocked".equals(mOnUiThread.getTitle());
             }
         }.run();
+        assertEquals(1, latch.getCount());
 
         mSettings.setJavaScriptCanOpenWindowsAutomatically(true);
         assertTrue(mSettings.getJavaScriptCanOpenWindowsAutomatically());
-        loadAssetUrl(TestHtmlConstants.POPUP_URL);
-        new PollingCheck(WEBVIEW_TIMEOUT) {
-            @Override
-            protected boolean check() {
-                return "Popup allowed".equals(mOnUiThread.getTitle());
-            }
-        }.run();
+        mOnUiThread.loadUrl(mWebServer.getAssetUrl(TestHtmlConstants.POPUP_URL));
+        assertTrue(latch.await(WEBVIEW_TIMEOUT, TimeUnit.MILLISECONDS));
     }
 
     public void testAccessJavaScriptEnabled() throws Exception {