Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2284)

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java

Issue 2103243002: Factor out ContentViewAndroidDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed isValidView() Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
index 05331b2bd09888cfdf8f0950e9b7c4bc9c8b8dd1..0343b7be888e81600a3b353187e739e68e382fe9 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -17,16 +17,21 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.util.Pair;
import android.view.KeyEvent;
import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.webkit.JavascriptInterface;
+import android.widget.FrameLayout;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.chromium.android_webview.AwContents;
+import org.chromium.android_webview.AwContents.AwViewAndroidDelegate;
import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.AwSwitches;
import org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature;
@@ -36,6 +41,8 @@ import org.chromium.content.browser.ChildProcessConnection;
import org.chromium.content.browser.ChildProcessLauncher;
import org.chromium.content.browser.test.util.CallbackHelper;
import org.chromium.net.test.util.TestWebServer;
+import org.chromium.ui.base.ViewAndroidDelegate;
+import org.chromium.ui.gfx.DeviceDisplayInfo;
import java.io.InputStream;
import java.net.URL;
@@ -614,4 +621,206 @@ public class AwContentsTest extends AwTestBase {
mContentsClient.getOnEvaluateJavaScriptResultHelper(), "21 + 21"));
}
+ @DisableHardwareAccelerationForTest
boliu 2016/07/25 22:15:26 why?
Jinsuk Kim 2016/07/27 10:02:43 Without it, the container starts with a hardware v
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testMovedAndRemovedAnchorViewIsNotTransferred() throws Throwable {
boliu 2016/07/25 22:15:26 pull everything out into a new file, maybe AwAncho
Jinsuk Kim 2016/07/27 10:02:43 AwContentAnchorViewTest.java
+ // Add, move and remove anchorView
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView = addAnchorViewTest(containerView, 1);
+ setLayoutParams(containerView, anchorView, 1, 2);
+ removeAnchorViewTest(containerView, anchorView, 0);
+
+ // Replace container view
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+
+ // Verify that no anchor view is transferred between containerViews
+ assertEquals(0, containerView.getChildCount());
+ assertEquals(0, updatedContainerView.getChildCount());
+ }
+
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testTransferAnchorView() throws Throwable {
+ // Add anchor view
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView = addAnchorViewTest(containerView, 1);
+ LayoutParams layoutParams = anchorView.getLayoutParams();
+
+ // Replace container view
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+ verifyAnchorViewCorrectlyTransferred(
+ containerView, anchorView, updatedContainerView, layoutParams);
+ }
+
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testTransferMovedAnchorView() throws Throwable {
+ // Add anchor view and move it
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView = addAnchorViewTest(containerView, 1);
+ LayoutParams layoutParams = setLayoutParams(containerView, anchorView, 1, 2);
+
+ // Replace container view
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+
+ verifyAnchorViewCorrectlyTransferred(
+ containerView, anchorView, updatedContainerView, layoutParams);
+ }
+
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testRemoveTransferedAnchorView() throws Throwable {
+ // Add anchor view
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView = addAnchorViewTest(containerView, 1);
+
+ // Replace container view
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+
+ verifyAnchorViewCorrectlyTransferred(containerView, anchorView, updatedContainerView);
+
+ // Remove transferred anchor view
+ removeAnchorViewTest(containerView, anchorView, 0);
+ }
+
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testMoveTransferedAnchorView() throws Throwable {
+ // Add anchor view
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView = addAnchorViewTest(containerView, 1);
+ LayoutParams layoutParams = anchorView.getLayoutParams();
+
+ // Replace container view
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+
+ verifyAnchorViewCorrectlyTransferred(
+ containerView, anchorView, updatedContainerView, layoutParams);
+
+ // Move transferred anchor view
+ assertFalse(areEqual(layoutParams, setLayoutParams(containerView, anchorView, 1, 2)));
+ }
+
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testTransferMultipleMovedAnchorViews() throws Throwable {
+ // Add and move anchorView1
+ AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
+ View anchorView1 = addAnchorViewTest(containerView, 1);
+ LayoutParams layoutParams1 = setLayoutParams(containerView, anchorView1, 1, 2);
+
+ // Add and move anchorView2
+ View anchorView2 = addAnchorViewTest(containerView, 2);
+ LayoutParams layoutParams2 = setLayoutParams(containerView, anchorView2, 2, 4);
+
+ // Replace containerView
+ FrameLayout updatedContainerView = updateContainerView(containerView);
+
+ // Verify that anchor views are transfered in the same order
+ // and with the same layout params.
+ assertEquals(0, containerView.getChildCount());
+ assertEquals(2, updatedContainerView.getChildCount());
+ assertSame(anchorView1, updatedContainerView.getChildAt(0));
+ assertTrue(areEqual(layoutParams1, anchorView1.getLayoutParams()));
+ assertSame(anchorView2, updatedContainerView.getChildAt(1));
+ assertTrue(areEqual(layoutParams2, anchorView2.getLayoutParams()));
+ }
+
+ private View addAnchorViewTest(AwTestContainerView containerView, int expectedCount) {
+ final ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ View anchorView = ThreadUtils.runOnUiThreadBlockingNoException(new Callable<View>() {
+ @Override
+ public View call() {
+ return delegate.acquireView();
+ }
+ });
+ assertEquals(expectedCount, containerView.getChildCount());
+ assertSame(anchorView, containerView.getChildAt(expectedCount - 1));
+ return anchorView;
+ }
+
+ private void removeAnchorViewTest(AwTestContainerView containerView, final View anchorView,
+ int expectedCount) {
+ final ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ delegate.removeView(anchorView);
+ }
+ });
+ assertEquals(expectedCount, containerView.getChildCount());
+ }
+
+ private LayoutParams setLayoutParams(final AwTestContainerView containerView,
+ final View anchorView, final int coords, final int dimension) {
+ final ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ final float scale =
+ (float) DeviceDisplayInfo.create(containerView.getContext()).getDIPScale();
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ delegate.setViewPosition(anchorView, coords, coords, dimension, dimension,
+ scale, 10, 10);
+ }
+ });
+ return anchorView.getLayoutParams();
+ }
+
+ private FrameLayout updateContainerView(final AwTestContainerView oldContainerView)
+ throws InterruptedException {
+ final FrameLayout containerView = new FrameLayout(getActivity());
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().addView(containerView);
+ }
+ });
+
+ // Waits for the layout of the new container view to be completed so that the anchor
+ // views can be positioned at the right place.
+ final Semaphore s = new Semaphore(0);
+ containerView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ s.release();
+ }
+ });
+ assertTrue(s.tryAcquire(WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+ final AwViewAndroidDelegate delegate = (AwViewAndroidDelegate)
+ oldContainerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ delegate.updateCurrentContainerView(containerView);
+ }
+ });
+ return containerView;
+ }
+
+ private void verifyAnchorViewCorrectlyTransferred(FrameLayout containerView, View anchorView,
+ FrameLayout updatedContainerView, LayoutParams expectedParams) {
+ assertTrue(areEqual(expectedParams, anchorView.getLayoutParams()));
+ verifyAnchorViewCorrectlyTransferred(containerView, anchorView, updatedContainerView);
+ }
+
+ private void verifyAnchorViewCorrectlyTransferred(FrameLayout containerView, View anchorView,
+ FrameLayout updatedContainerView) {
+ assertEquals(0, containerView.getChildCount());
+ assertEquals(1, updatedContainerView.getChildCount());
+ assertSame(anchorView, updatedContainerView.getChildAt(0));
+ }
+
+ private boolean areEqual(LayoutParams params1, LayoutParams params2) {
+ return params1.height == params2.height && params1.width == params2.width;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698