| 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..57a2b86893918bad6bf5f3b21df9085925a2a4ad 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.AwContentViewAndroidDelegate;
|
| 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,162 @@ 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, 1f, 2f);
|
| + ViewAndroidDelegate delegate =
|
| + containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
|
| + removeAnchorViewTest(containerView, delegate, 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, 1f, 2f);
|
| + ViewAndroidDelegate delegate =
|
| + containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
|
| + LayoutParams layoutParams = anchorView.getLayoutParams();
|
| +
|
| + // 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
|
| + ViewAndroidDelegate delegate =
|
| + containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
|
| + removeAnchorViewTest(updatedContainerView, delegate, 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);
|
| + }
|
| +
|
| + @DisableHardwareAccelerationForTest
|
| + @Feature({"AndroidWebView"})
|
| + @SmallTest
|
| + public void testTransferMultipleMovedAnchorViews() throws Throwable {
|
| + // Add and move anchorView1
|
| + AwTestContainerView containerView = createAwTestContainerViewOnMainSync(mContentsClient);
|
| + View anchorView1 = addAnchorViewTest(containerView, 1, 1f, 2f);
|
| + ViewAndroidDelegate delegate =
|
| + containerView.getAwContents().getContentViewCore().getViewAndroidDelegate();
|
| + LayoutParams layoutParams1 = anchorView1.getLayoutParams();
|
| +
|
| + // Add and move anchorView2
|
| + View anchorView2 = addAnchorViewTest(containerView, 2, 2f, 4f);
|
| + LayoutParams layoutParams2 = anchorView2.getLayoutParams();
|
| +
|
| + // 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) {
|
| + return addAnchorViewTest(containerView, expectedCount, 0.f, 0.f);
|
| + }
|
| +
|
| + private View addAnchorViewTest(AwTestContainerView containerView, int expectedCount,
|
| + float coord, float dimen) {
|
| + View anchorView = containerView.getAwContents().getContentViewCore().acquireAnchorView(
|
| + coord, coord, dimen, dimen);
|
| + assertEquals(expectedCount, containerView.getChildCount());
|
| + assertSame(anchorView, containerView.getChildAt(expectedCount - 1));
|
| + return anchorView;
|
| + }
|
| +
|
| + private void removeAnchorViewTest(FrameLayout containerView, ViewAndroidDelegate delegate,
|
| + View anchorView1, int expectedCount) {
|
| + delegate.releaseAnchorView(anchorView1);
|
| + assertEquals(expectedCount, containerView.getChildCount());
|
| + }
|
| +
|
| + private FrameLayout updateContainerView(AwTestContainerView containerView) {
|
| + FrameLayout updatedContainerView = new FrameLayout(getActivity());
|
| + AwContentViewAndroidDelegate delegate = (AwContentViewAndroidDelegate)
|
| + 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;
|
| + }
|
| }
|
|
|