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

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: Addressed Comments 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..817d5baa284eae08e3f7f89c628d7a7867208352 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,11 +17,14 @@ 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.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;
@@ -36,6 +39,7 @@ 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 java.io.InputStream;
import java.net.URL;
@@ -614,4 +618,164 @@ public class AwContentsTest extends AwTestBase {
mContentsClient.getOnEvaluateJavaScriptResultHelper(), "21 + 21"));
}
+ @DisableHardwareAccelerationForTest
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ public void testMovedAndRemovedAnchorViewIsNotTransferred() throws Throwable {
+ // 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) {
+ ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ View anchorView = delegate.acquireView();
+ assertEquals(expectedCount, containerView.getChildCount());
+ assertSame(anchorView, containerView.getChildAt(expectedCount - 1));
+ return anchorView;
+ }
+
+ private void removeAnchorViewTest(AwTestContainerView containerView, View anchorView,
+ int expectedCount) {
+ ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ delegate.removeView(anchorView);
+ assertEquals(expectedCount, containerView.getChildCount());
+ }
+
+ private LayoutParams setLayoutParams(AwTestContainerView containerView, View anchorView,
+ int coords, int dimension) {
+ ViewAndroidDelegate delegate =
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ delegate.setViewPosition(anchorView, coords, coords, dimension, dimension, 1f, 10, 10);
+ return anchorView.getLayoutParams();
+ }
+
+ private FrameLayout updateContainerView(AwTestContainerView containerView) {
+ FrameLayout updatedContainerView = new FrameLayout(getActivity());
+ AwViewAndroidDelegate delegate = (AwViewAndroidDelegate)
+ containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
+ delegate.updateCurrentContainerView(updatedContainerView);
+ return updatedContainerView;
+ }
+
+ 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