Commit 6d02a596 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

[WebLayer] Add instrumentation test for blocked popup infobar

This test makes sure the infobar shows up and the button can be clicked.

Bug: 1019922
Change-Id: Id329d224bda1a98dcad1a01130406f3592e53a0d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2247328Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#779499}
parent d900944e
...@@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting; ...@@ -24,6 +24,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.StrictModeContext;
import org.chromium.components.browser_ui.widget.DualControlLayout; import org.chromium.components.browser_ui.widget.DualControlLayout;
import org.chromium.components.browser_ui.widget.RadioButtonLayout; import org.chromium.components.browser_ui.widget.RadioButtonLayout;
...@@ -72,8 +73,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -72,8 +73,8 @@ public final class InfoBarControlLayout extends ViewGroup {
if (convertView instanceof TextView) { if (convertView instanceof TextView) {
view = (TextView) convertView; view = (TextView) convertView;
} else { } else {
view = (TextView) LayoutInflater.from(getContext()) view = (TextView) inflateLayout(
.inflate(R.layout.infobar_control_spinner_drop_down, parent, false); getContext(), R.layout.infobar_control_spinner_drop_down, parent);
} }
view.setText(getItem(position).toString()); view.setText(getItem(position).toString());
...@@ -86,8 +87,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -86,8 +87,8 @@ public final class InfoBarControlLayout extends ViewGroup {
if (convertView instanceof DualControlLayout) { if (convertView instanceof DualControlLayout) {
view = (DualControlLayout) convertView; view = (DualControlLayout) convertView;
} else { } else {
view = (DualControlLayout) LayoutInflater.from(getContext()) view = (DualControlLayout) inflateLayout(
.inflate(R.layout.infobar_control_spinner_view, parent, false); getContext(), R.layout.infobar_control_spinner_view, parent);
} }
// Set up the spinner label. The text it displays won't change. // Set up the spinner label. The text it displays won't change.
...@@ -303,9 +304,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -303,9 +304,8 @@ public final class InfoBarControlLayout extends ViewGroup {
* @param titleMessage Message to display on Infobar title. * @param titleMessage Message to display on Infobar title.
*/ */
public View addIconTitle(int iconResourceId, CharSequence titleMessage) { public View addIconTitle(int iconResourceId, CharSequence titleMessage) {
LinearLayout layout = LinearLayout layout = (LinearLayout) inflateLayout(
(LinearLayout) LayoutInflater.from(getContext()) getContext(), R.layout.infobar_control_icon_with_description, this);
.inflate(R.layout.infobar_control_icon_with_description, this, false);
addView(layout, new ControlLayoutParams()); addView(layout, new ControlLayoutParams());
ImageView iconView = (ImageView) layout.findViewById(R.id.control_icon); ImageView iconView = (ImageView) layout.findViewById(R.id.control_icon);
...@@ -355,9 +355,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -355,9 +355,8 @@ public final class InfoBarControlLayout extends ViewGroup {
*/ */
public View addIcon(int iconResourceId, int iconColorId, CharSequence primaryMessage, public View addIcon(int iconResourceId, int iconColorId, CharSequence primaryMessage,
CharSequence secondaryMessage, int resourceId) { CharSequence secondaryMessage, int resourceId) {
LinearLayout layout = LinearLayout layout = (LinearLayout) inflateLayout(
(LinearLayout) LayoutInflater.from(getContext()) getContext(), R.layout.infobar_control_icon_with_description, this);
.inflate(R.layout.infobar_control_icon_with_description, this, false);
addView(layout, new ControlLayoutParams()); addView(layout, new ControlLayoutParams());
ImageView iconView = (ImageView) layout.findViewById(R.id.control_icon); ImageView iconView = (ImageView) layout.findViewById(R.id.control_icon);
...@@ -401,8 +400,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -401,8 +400,8 @@ public final class InfoBarControlLayout extends ViewGroup {
*/ */
public View addSwitch(int iconResourceId, int iconColorId, CharSequence toggleMessage, public View addSwitch(int iconResourceId, int iconColorId, CharSequence toggleMessage,
int toggleId, boolean isChecked) { int toggleId, boolean isChecked) {
LinearLayout switchLayout = (LinearLayout) LayoutInflater.from(getContext()) LinearLayout switchLayout =
.inflate(R.layout.infobar_control_toggle, this, false); (LinearLayout) inflateLayout(getContext(), R.layout.infobar_control_toggle, this);
addView(switchLayout, new ControlLayoutParams()); addView(switchLayout, new ControlLayoutParams());
ImageView iconView = (ImageView) switchLayout.findViewById(R.id.control_icon); ImageView iconView = (ImageView) switchLayout.findViewById(R.id.control_icon);
...@@ -448,8 +447,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -448,8 +447,8 @@ public final class InfoBarControlLayout extends ViewGroup {
* Creates a standard spinner and adds it to the layout. * Creates a standard spinner and adds it to the layout.
*/ */
public <T> Spinner addSpinner(int spinnerId, ArrayAdapter<T> arrayAdapter) { public <T> Spinner addSpinner(int spinnerId, ArrayAdapter<T> arrayAdapter) {
Spinner spinner = (Spinner) LayoutInflater.from(getContext()) Spinner spinner =
.inflate(R.layout.infobar_control_spinner, this, false); (Spinner) inflateLayout(getContext(), R.layout.infobar_control_spinner, this);
spinner.setAdapter(arrayAdapter); spinner.setAdapter(arrayAdapter);
addView(spinner, new ControlLayoutParams()); addView(spinner, new ControlLayoutParams());
spinner.setId(spinnerId); spinner.setId(spinnerId);
...@@ -464,8 +463,7 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -464,8 +463,7 @@ public final class InfoBarControlLayout extends ViewGroup {
params.mMustBeFullWidth = true; params.mMustBeFullWidth = true;
TextView descriptionView = TextView descriptionView =
(TextView) LayoutInflater.from(getContext()) (TextView) inflateLayout(getContext(), R.layout.dialog_control_description, this);
.inflate(R.layout.dialog_control_description, this, false);
addView(descriptionView, params); addView(descriptionView, params);
descriptionView.setText(message); descriptionView.setText(message);
...@@ -483,8 +481,8 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -483,8 +481,8 @@ public final class InfoBarControlLayout extends ViewGroup {
ControlLayoutParams params = new ControlLayoutParams(); ControlLayoutParams params = new ControlLayoutParams();
params.mMustBeFullWidth = true; params.mMustBeFullWidth = true;
TextView messageView = (TextView) LayoutInflater.from(getContext()) TextView messageView =
.inflate(R.layout.infobar_control_message, this, false); (TextView) inflateLayout(getContext(), R.layout.infobar_control_message, this);
addView(messageView, params); addView(messageView, params);
messageView.setText(mainMessage); messageView.setText(mainMessage);
...@@ -499,4 +497,11 @@ public final class InfoBarControlLayout extends ViewGroup { ...@@ -499,4 +497,11 @@ public final class InfoBarControlLayout extends ViewGroup {
static ControlLayoutParams getControlLayoutParams(View child) { static ControlLayoutParams getControlLayoutParams(View child) {
return (ControlLayoutParams) child.getLayoutParams(); return (ControlLayoutParams) child.getLayoutParams();
} }
private static View inflateLayout(Context context, int layoutId, ViewGroup root) {
// LayoutInflater may trigger accessing the disk.
try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
return LayoutInflater.from(context).inflate(layoutId, root, false);
}
}
} }
...@@ -22,7 +22,6 @@ android_library("weblayer_java_tests") { ...@@ -22,7 +22,6 @@ android_library("weblayer_java_tests") {
"src/org/chromium/weblayer/test/FullscreenCallbackTest.java", "src/org/chromium/weblayer/test/FullscreenCallbackTest.java",
"src/org/chromium/weblayer/test/InputTypesTest.java", "src/org/chromium/weblayer/test/InputTypesTest.java",
"src/org/chromium/weblayer/test/NavigationTest.java", "src/org/chromium/weblayer/test/NavigationTest.java",
"src/org/chromium/weblayer/test/NewTabCallbackImpl.java",
"src/org/chromium/weblayer/test/NewTabCallbackTest.java", "src/org/chromium/weblayer/test/NewTabCallbackTest.java",
"src/org/chromium/weblayer/test/OnTabRemovedTabListCallbackImpl.java", "src/org/chromium/weblayer/test/OnTabRemovedTabListCallbackImpl.java",
"src/org/chromium/weblayer/test/ProfileTest.java", "src/org/chromium/weblayer/test/ProfileTest.java",
...@@ -67,6 +66,7 @@ android_library("weblayer_private_java_tests") { ...@@ -67,6 +66,7 @@ android_library("weblayer_private_java_tests") {
"src/org/chromium/weblayer/test/GeolocationTest.java", "src/org/chromium/weblayer/test/GeolocationTest.java",
"src/org/chromium/weblayer/test/MediaCaptureTest.java", "src/org/chromium/weblayer/test/MediaCaptureTest.java",
"src/org/chromium/weblayer/test/NetworkChangeNotifierTest.java", "src/org/chromium/weblayer/test/NetworkChangeNotifierTest.java",
"src/org/chromium/weblayer/test/PopupTest.java",
"src/org/chromium/weblayer/test/ResourceLoadingTest.java", "src/org/chromium/weblayer/test/ResourceLoadingTest.java",
] ]
deps = [ deps = [
...@@ -94,6 +94,7 @@ android_library("weblayer_java_test_support") { ...@@ -94,6 +94,7 @@ android_library("weblayer_java_test_support") {
"src/org/chromium/weblayer/test/MinWebLayerVersion.java", "src/org/chromium/weblayer/test/MinWebLayerVersion.java",
"src/org/chromium/weblayer/test/MinWebLayerVersionSkipCheck.java", "src/org/chromium/weblayer/test/MinWebLayerVersionSkipCheck.java",
"src/org/chromium/weblayer/test/NavigationWaiter.java", "src/org/chromium/weblayer/test/NavigationWaiter.java",
"src/org/chromium/weblayer/test/NewTabCallbackImpl.java",
"src/org/chromium/weblayer/test/ResourceUtil.java", "src/org/chromium/weblayer/test/ResourceUtil.java",
"src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java", "src/org/chromium/weblayer/test/SiteSettingsActivityTestRule.java",
"src/org/chromium/weblayer/test/WebLayerActivityTestRule.java", "src/org/chromium/weblayer/test/WebLayerActivityTestRule.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.weblayer.test;
import android.content.Context;
import androidx.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.weblayer.TestWebLayer;
import org.chromium.weblayer.shell.InstrumentationActivity;
/**
* Tests that popup blocking works as expected.
*/
@RunWith(WebLayerJUnit4ClassRunner.class)
public final class PopupTest {
@Rule
public InstrumentationActivityTestRule mActivityTestRule =
new InstrumentationActivityTestRule();
private InstrumentationActivity mActivity;
private Context mRemoteContext;
@Before
public void setUp() {
mActivity = mActivityTestRule.launchShellWithUrl("about:blank");
Assert.assertNotNull(mActivity);
mRemoteContext = TestWebLayer.getRemoteContext(mActivity.getApplicationContext());
}
@Test
@SmallTest
public void testOpenPopupFromInfoBar() throws Exception {
NewTabCallbackImpl callback = new NewTabCallbackImpl();
TestThreadUtils.runOnUiThreadBlocking(
() -> { mActivity.getBrowser().getActiveTab().setNewTabCallback(callback); });
// Try to open a popup.
mActivityTestRule.executeScriptSync("window.open('about:blank')", true);
// Make sure the infobar shows up and the popup has not been opened.
int buttonId = ResourceUtil.getIdentifier(mRemoteContext, "id/button_primary");
CriteriaHelper.pollInstrumentationThread(
() -> { return mActivity.findViewById(buttonId) != null; });
TestThreadUtils.runOnUiThreadBlocking(
() -> { Assert.assertEquals(mActivity.getBrowser().getTabs().size(), 1); });
// Click the button on the infobar to open the popup.
EventUtils.simulateTouchCenterOfView(mActivity.findViewById(buttonId));
callback.waitForNewTab();
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment