Revert "Reland "[Default Nav Transition] Remove top controls in NTP screenshot""
This reverts commit26c52b7ed0
. Reason for revert: Test added is consistently failing. See details in https://b.corp.google.com/issues/331814846#comment18. Original change's description: > Reland "[Default Nav Transition] Remove top controls in NTP screenshot" > > This reverts commitc2fd4d5853
. > > The tests are using NavigationHandler which only > works in 3-button nav mode and the test failed on OS > which defaults to gesture nav mode. > > Original change's description: > > Revert "[Default Nav Transition] Remove top controls in NTP screenshot" > > > > This reverts commit7938c61cf2
. > > > > Reason for revert: Causing bots to fail on CI: https://crbug.com/351979006 > > > > Original change's description: > > > [Default Nav Transition] Remove top controls in NTP screenshot > > > > > > In order to match the viewport of the webpage screenshot, this CL > > > excludes the area of top controls of NTP and maintain the > > > size of the screenshot. As a result, the bottom part of the screenshot > > > will be filled with the default background color of the NTP because > > > it is impossible to draw off-screen views in Android. > > > > > > Screenshot (with top controls): https://screenshot.googleplex.com/AJFcDYvXCbnvXgj.png > > > Screen record (w/o top controls): http://screencast/cast/NDY4NTA0OTc2ODE4MTc2MHxjODkyNWE0Zi1jOQ > > > > > > Bug: 331814846 > > > Change-Id: Ieb8959ad2f202b15e055346f889a73355cdc4e06 > > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5560151 > > > Reviewed-by: Rakina Zata Amni <rakina@chromium.org> > > > Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com> > > > Reviewed-by: Khushal Sagar <khushalsagar@chromium.org> > > > Commit-Queue: Lijin Shen <lazzzis@google.com> > > > Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org> > > > Cr-Commit-Position: refs/heads/main@{#1324606} > > > > Bug: 331814846 > > Change-Id: Idee7cef1905d173ae74233fb5aa566e58f070691 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5687334 > > Owners-Override: Rupert Wiser <bewise@chromium.org> > > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > > Commit-Queue: Rupert Wiser <bewise@chromium.org> > > Cr-Commit-Position: refs/heads/main@{#1324742} > > Bug: 331814846, 351979006 > Change-Id: Iac27e3d8cba61a2312d457bedcb61d16048ae5f4 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5689652 > Reviewed-by: Rakina Zata Amni <rakina@chromium.org> > Reviewed-by: Rupert Wiser <bewise@chromium.org> > Commit-Queue: Lijin Shen <lazzzis@google.com> > Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org> > Reviewed-by: Khushal Sagar <khushalsagar@chromium.org> > Cr-Commit-Position: refs/heads/main@{#1326304} Bug: 331814846, 351979006 Change-Id: I16afc5760780350eb4d22635cc1814807d5bee2d No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5697875 Reviewed-by: Yue Zhang <yuezhanggg@chromium.org> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Yue Zhang <yuezhanggg@chromium.org> Owners-Override: Yue Zhang <yuezhanggg@chromium.org> Cr-Commit-Position: refs/heads/main@{#1326454}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
ef915b42e4
commit
918efe49d3
chrome
android
java
src
org
chromium
chrome
browser
javatests
src
org
chromium
chrome
browser
browser
gesturenav
android
content
browser
web_contents
public
android
java
src
org
chromium
test
android
javatests
src
org
chromium
content_public
browser
test
@ -429,8 +429,7 @@ final class TabWebContentsDelegateAndroidImpl extends TabWebContentsDelegateAndr
|
||||
|
||||
@Override
|
||||
public boolean maybeCopyContentAreaAsBitmap(Callback<Bitmap> callback) {
|
||||
return NativePageBitmapCapturer.maybeCaptureNativeView(
|
||||
mTab, callback, getTopControlsHeight());
|
||||
return NativePageBitmapCapturer.maybeCaptureNativeView(mTab, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -47,7 +47,6 @@ import org.chromium.chrome.browser.ui.native_page.BasicSmoothTransitionDelegate;
|
||||
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
|
||||
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
|
||||
import org.chromium.chrome.test.util.ChromeTabUtils;
|
||||
import org.chromium.chrome.test.util.NewTabPageTestUtils;
|
||||
import org.chromium.components.embedder_support.util.UrlConstants;
|
||||
import org.chromium.content_public.browser.LoadUrlParams;
|
||||
import org.chromium.content_public.browser.back_forward_transition.AnimationStage;
|
||||
@ -71,7 +70,6 @@ import java.util.concurrent.TimeoutException;
|
||||
@Batch(Batch.PER_CLASS)
|
||||
public class NavigationHandlerTest {
|
||||
private static final String RENDERED_PAGE = "/chrome/test/data/android/navigate/simple.html";
|
||||
private static final String TEST_PAGE = "/chrome/test/data/android/test.html";
|
||||
private static final boolean LEFT_EDGE = true;
|
||||
private static final boolean RIGHT_EDGE = false;
|
||||
|
||||
@ -86,10 +84,7 @@ public class NavigationHandlerTest {
|
||||
|
||||
@Before
|
||||
public void setUp() throws InterruptedException {
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.startMainActivityWithURL(mTestServer.getURL(TEST_PAGE));
|
||||
mActivityTestRule.startMainActivityOnBlankPage();
|
||||
CompositorAnimationHandler.setTestingMode(true);
|
||||
mNavUtils = new GestureNavigationUtils(mActivityTestRule);
|
||||
mNavigationHandler = mNavUtils.getNavigationHandler();
|
||||
@ -130,12 +125,12 @@ public class NavigationHandlerTest {
|
||||
@Test
|
||||
@SmallTest
|
||||
@EnableFeatures({ChromeFeatureList.BACK_FORWARD_TRANSITIONS})
|
||||
public void testSwipeBackToNTPWithTransition() throws InterruptedException {
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
public void testSwipeBackToNTPWithTransition() {
|
||||
final Tab tab = mActivityTestRule.getActivity().getActivityTab();
|
||||
mActivityTestRule.loadUrl(UrlConstants.NTP_URL);
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
NewTabPageTestUtils.waitForNtpLoaded(mActivityTestRule.getActivity().getActivityTab());
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
|
||||
mNavUtils.swipeFromEdgeAndHold(true);
|
||||
@ -177,6 +172,9 @@ public class NavigationHandlerTest {
|
||||
final Tab tab = mActivityTestRule.getActivity().getActivityTab();
|
||||
mActivityTestRule.loadUrl("chrome-native://bookmarks/folder/0");
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
|
||||
mNavUtils.swipeFromEdgeAndHold(true);
|
||||
@ -253,6 +251,9 @@ public class NavigationHandlerTest {
|
||||
@Test
|
||||
@SmallTest
|
||||
public void testReleaseGlowWithoutPrecedingPullIgnored() {
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
TestThreadUtils.runOnUiThreadBlocking(
|
||||
() -> {
|
||||
@ -315,6 +316,9 @@ public class NavigationHandlerTest {
|
||||
public void testSwipeNavigateOnRenderedPage() {
|
||||
// TODO(crbug.com/40899221): Write a test variation running with
|
||||
// ChromeFeatureList.BACK_FORWARD_TRANSITIONS enabled when the feature is completed.
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
mActivityTestRule.loadUrl(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL);
|
||||
|
||||
@ -369,6 +373,9 @@ public class NavigationHandlerTest {
|
||||
@Test
|
||||
@SmallTest
|
||||
public void testSwipeAfterDestroy() {
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
TestThreadUtils.runOnUiThreadBlocking(mNavigationHandler::destroy);
|
||||
|
||||
@ -388,6 +395,9 @@ public class NavigationHandlerTest {
|
||||
@Test
|
||||
@SmallTest
|
||||
public void testSwipeAfterTabDestroy() {
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(RENDERED_PAGE));
|
||||
TestThreadUtils.runOnUiThreadBlocking(currentTab()::destroy);
|
||||
|
||||
@ -401,6 +411,9 @@ public class NavigationHandlerTest {
|
||||
@Test
|
||||
@SmallTest
|
||||
public void testSwipeAfterDestroyActivity_NativePage() {
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
InstrumentationRegistry.getInstrumentation().getContext());
|
||||
mActivityTestRule.loadUrl(UrlConstants.NTP_URL);
|
||||
TestThreadUtils.runOnUiThreadBlocking(mActivityTestRule.getActivity()::finish);
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
package org.chromium.chrome.browser.gesturenav;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.filters.MediumTest;
|
||||
@ -24,25 +23,19 @@ import org.chromium.base.test.params.ParameterAnnotations;
|
||||
import org.chromium.base.test.params.ParameterizedRunner;
|
||||
import org.chromium.base.test.util.CallbackHelper;
|
||||
import org.chromium.base.test.util.CommandLineFlags;
|
||||
import org.chromium.base.test.util.DisableIf;
|
||||
import org.chromium.base.test.util.DoNotBatch;
|
||||
import org.chromium.base.test.util.Feature;
|
||||
import org.chromium.base.test.util.Features.EnableFeatures;
|
||||
import org.chromium.base.test.util.UrlUtils;
|
||||
import org.chromium.blink_public.common.BlinkFeatures;
|
||||
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
||||
import org.chromium.chrome.browser.flags.ChromeSwitches;
|
||||
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
|
||||
import org.chromium.chrome.browser.fullscreen.FullscreenManagerTestUtils;
|
||||
import org.chromium.chrome.browser.night_mode.ChromeNightModeTestUtils;
|
||||
import org.chromium.chrome.browser.tab.TabStateBrowserControlsVisibilityDelegate;
|
||||
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
|
||||
import org.chromium.chrome.test.util.ChromeRenderTestRule;
|
||||
import org.chromium.chrome.test.util.NewTabPageTestUtils;
|
||||
import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule;
|
||||
import org.chromium.chrome.test.util.browser.suggestions.mostvisited.FakeMostVisitedSites;
|
||||
import org.chromium.components.embedder_support.util.UrlConstants;
|
||||
import org.chromium.content_public.browser.test.util.TestThreadUtils;
|
||||
import org.chromium.content_public.browser.test.util.UiUtils;
|
||||
import org.chromium.content_public.browser.test.util.WebContentsUtils;
|
||||
import org.chromium.net.test.EmbeddedTestServer;
|
||||
@ -77,15 +70,6 @@ public class ScreenshotCaptureTest {
|
||||
|
||||
private static final String TEST_PAGE = "/chrome/test/data/android/simple.html";
|
||||
private static final String TEST_PAGE_2 = "/chrome/test/data/android/google.html";
|
||||
private static final String LONG_HTML_TEST_PAGE =
|
||||
UrlUtils.encodeHtmlDataUri(
|
||||
"<html>"
|
||||
+ "<head>"
|
||||
+ " <meta name=\"viewport\" content=\"width=device-width\">"
|
||||
+ "</head>"
|
||||
+ "<body style='height:100000px;'>"
|
||||
+ "</body>"
|
||||
+ "</html>");
|
||||
|
||||
private EmbeddedTestServer mTestServer;
|
||||
private Bitmap mCapturedBitmap;
|
||||
@ -109,10 +93,9 @@ public class ScreenshotCaptureTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
// Fix the port cause the screenshot includes the url bar
|
||||
mTestServer =
|
||||
EmbeddedTestServer.createAndStartServerWithPort(
|
||||
ApplicationProvider.getApplicationContext(), 46985);
|
||||
EmbeddedTestServer.createAndStartServer(
|
||||
ApplicationProvider.getApplicationContext());
|
||||
|
||||
var mSiteSuggestions = NewTabPageTestUtils.createFakeSiteSuggestions(mTestServer);
|
||||
var mMostVisitedSites = new FakeMostVisitedSites();
|
||||
@ -206,91 +189,6 @@ public class ScreenshotCaptureTest {
|
||||
mRenderTestRule.compareForResult(mCapturedBitmap, "navigate_away_from_ntp_to_webui_page");
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
@Feature({"RenderTest"})
|
||||
// The test is based on 3-button mode. The newer version defaults to gesture mode.
|
||||
@DisableIf.Build(sdk_is_greater_than = VERSION_CODES.R)
|
||||
@ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
|
||||
public void testNavigatingBackToNtpFromNormalPage(boolean nightModeEnabled)
|
||||
throws IOException, TimeoutException, InterruptedException {
|
||||
mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL);
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
NewTabPageTestUtils.waitForNtpLoaded(mActivityTestRule.getActivity().getActivityTab());
|
||||
|
||||
mActivityTestRule.loadUrl(mTestServer.getURL(TEST_PAGE));
|
||||
|
||||
GestureNavigationUtils mNavUtils = new GestureNavigationUtils(mActivityTestRule);
|
||||
mNavUtils.swipeFromEdgeAndHold(/* leftEdge= */ true);
|
||||
|
||||
CallbackHelper callbackHelper = new CallbackHelper();
|
||||
mActivityTestRule
|
||||
.getWebContents()
|
||||
.captureContentAsBitmapForTesting(
|
||||
bitmap -> {
|
||||
try {
|
||||
mRenderTestRule.compareForResult(
|
||||
bitmap, "navigate_back_to_ntp_from_normal_page");
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
callbackHelper.notifyCalled();
|
||||
});
|
||||
callbackHelper.waitForOnly();
|
||||
TestThreadUtils.runOnUiThreadBlocking(() -> mNavUtils.getNavigationHandler().release(true));
|
||||
// Wait animation to be finished. Reduce flakiness caused by being destroyed during a
|
||||
// running animation.
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
@Feature({"RenderTest"})
|
||||
// The test is based on 3-button mode. The newer version defaults to gesture mode.
|
||||
@DisableIf.Build(sdk_is_greater_than = VERSION_CODES.R)
|
||||
@ParameterAnnotations.UseMethodParameter(NightModeTestUtils.NightModeParams.class)
|
||||
public void testNavigatingBackToNtpFromNormalPageWithoutTopControls(boolean nightModeEnabled)
|
||||
throws Throwable {
|
||||
TestThreadUtils.runOnUiThreadBlocking(
|
||||
TabStateBrowserControlsVisibilityDelegate::disablePageLoadDelayForTests);
|
||||
mActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL);
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
NewTabPageTestUtils.waitForNtpLoaded(mActivityTestRule.getActivity().getActivityTab());
|
||||
FullscreenManagerTestUtils.disableBrowserOverrides();
|
||||
mActivityTestRule.loadUrl(LONG_HTML_TEST_PAGE);
|
||||
BrowserControlsManager browserControlManager =
|
||||
mActivityTestRule.getActivity().getBrowserControlsManager();
|
||||
int browserControlsHeight = browserControlManager.getTopControlsHeight();
|
||||
FullscreenManagerTestUtils.waitForBrowserControlsToBeMoveable(
|
||||
mActivityTestRule, mActivityTestRule.getActivity().getActivityTab());
|
||||
FullscreenManagerTestUtils.scrollBrowserControls(mActivityTestRule, false);
|
||||
|
||||
FullscreenManagerTestUtils.waitForBrowserControlsPosition(
|
||||
mActivityTestRule, -browserControlsHeight);
|
||||
GestureNavigationUtils mNavUtils = new GestureNavigationUtils(mActivityTestRule);
|
||||
mNavUtils.swipeFromEdgeAndHold(/* leftEdge= */ true);
|
||||
|
||||
CallbackHelper callbackHelper = new CallbackHelper();
|
||||
mActivityTestRule
|
||||
.getWebContents()
|
||||
.captureContentAsBitmapForTesting(
|
||||
bitmap -> {
|
||||
try {
|
||||
mRenderTestRule.compareForResult(
|
||||
bitmap,
|
||||
"navigate_back_to_ntp_from_normal_page_without_top_controls");
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
callbackHelper.notifyCalled();
|
||||
});
|
||||
callbackHelper.waitForOnly();
|
||||
TestThreadUtils.runOnUiThreadBlocking(() -> mNavUtils.getNavigationHandler().release(true));
|
||||
// Wait animation to be finished. Reduce flakiness caused by being destroyed during a
|
||||
// running animation.
|
||||
UiUtils.settleDownUI(InstrumentationRegistry.getInstrumentation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
public void testNotCaptureSadTab() throws TimeoutException, InterruptedException {
|
||||
|
@ -15,7 +15,6 @@ android_library("java") {
|
||||
"//base:base_java",
|
||||
"//chrome/browser/flags:java",
|
||||
"//chrome/browser/tab:java",
|
||||
"//chrome/browser/ui/android/native_page:java",
|
||||
"//third_party/androidx:androidx_annotation_annotation_java",
|
||||
"//third_party/jni_zero:jni_zero_java",
|
||||
"//ui/android:ui_no_recycler_view_java",
|
||||
|
@ -5,6 +5,7 @@ package org.chromium.chrome.browser.gesturenav;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@ -17,7 +18,7 @@ import org.chromium.base.task.PostTask;
|
||||
import org.chromium.base.task.TaskTraits;
|
||||
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.ui.resources.dynamics.CaptureUtils;
|
||||
import org.chromium.ui.resources.dynamics.CaptureObserver;
|
||||
import org.chromium.ui.resources.dynamics.SoftwareDraw;
|
||||
|
||||
/** Capture native page as a bitmap. */
|
||||
@ -36,11 +37,10 @@ public class NativePageBitmapCapturer implements UnownedUserData {
|
||||
* @param tab The target tab to be captured.
|
||||
* @param callback Executed with a non-null bitmap if the tab is presenting a native page. Empty
|
||||
* bitmap if capturing fails, such as out of memory error.
|
||||
* @param topControlsHeight Height of the top controls.
|
||||
* @return True if the capture is successfully triggered; otherwise false.
|
||||
*/
|
||||
public static boolean maybeCaptureNativeView(
|
||||
@NonNull Tab tab, @NonNull Callback<Bitmap> callback, int topControlsHeight) {
|
||||
@NonNull Tab tab, @NonNull Callback<Bitmap> callback) {
|
||||
if (!tab.isNativePage()) {
|
||||
return false;
|
||||
}
|
||||
@ -53,19 +53,25 @@ public class NativePageBitmapCapturer implements UnownedUserData {
|
||||
final var capturer = CAPTURER_KEY.retrieveDataFromHost(host);
|
||||
|
||||
View view = tab.getView();
|
||||
|
||||
Bitmap bitmap = CaptureUtils.createBitmap(view.getWidth(), view.getHeight());
|
||||
bitmap.eraseColor(tab.getNativePage().getBackgroundColor());
|
||||
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
float scale = capturer.getScale();
|
||||
Rect viewBound = new Rect(0, 0, view.getWidth(), view.getHeight());
|
||||
|
||||
// TODO(crbug.com/330230340): capture bitmap asynchronously.
|
||||
// Translate to exclude the area of the top controls.
|
||||
canvas.translate(0, -topControlsHeight);
|
||||
canvas.scale(scale, scale);
|
||||
view.draw(canvas);
|
||||
PostTask.postTask(TaskTraits.UI_USER_VISIBLE, () -> callback.onResult(bitmap));
|
||||
capturer.mSoftwareDraw.startBitmapCapture(
|
||||
view,
|
||||
viewBound,
|
||||
capturer.getScale(),
|
||||
new CaptureObserver() {
|
||||
@Override
|
||||
public void onCaptureStart(Canvas canvas, Rect dirtyRect) {}
|
||||
|
||||
@Override
|
||||
public void onCaptureEnd() {}
|
||||
},
|
||||
(bitmap) -> {
|
||||
// The screenshot callback must be dispatched asynchronously. See
|
||||
// WebContentsDelegateAndroid#maybeCopyContentAreaAsBitmap.
|
||||
PostTask.postTask(TaskTraits.UI_USER_VISIBLE, () -> callback.onResult(bitmap));
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -19,8 +19,6 @@ import org.chromium.base.test.util.CommandLineFlags;
|
||||
import org.chromium.base.test.util.Features;
|
||||
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
||||
import org.chromium.chrome.browser.flags.ChromeSwitches;
|
||||
import org.chromium.chrome.browser.tab.TabTestUtils;
|
||||
import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
|
||||
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
|
||||
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
|
||||
import org.chromium.components.embedder_support.util.UrlConstants;
|
||||
@ -41,12 +39,6 @@ public class NativePageBitmapCapturerTest {
|
||||
@SmallTest
|
||||
public void testWithNativePage() throws TimeoutException {
|
||||
mTabbedActivityTestRule.startMainActivityWithURL(UrlConstants.NTP_URL);
|
||||
|
||||
final TabWebContentsDelegateAndroid delegate =
|
||||
TabTestUtils.getTabWebContentsDelegate(
|
||||
mTabbedActivityTestRule.getActivity().getActivityTab());
|
||||
final int topControlsHeight = delegate.getTopControlsHeight();
|
||||
|
||||
CallbackHelper callbackHelper = new CallbackHelper();
|
||||
ThreadUtils.runOnUiThreadBlocking(
|
||||
() -> {
|
||||
@ -55,8 +47,7 @@ public class NativePageBitmapCapturerTest {
|
||||
mTabbedActivityTestRule.getActivity().getActivityTab(),
|
||||
(bitmap) -> {
|
||||
callbackHelper.notifyCalled();
|
||||
},
|
||||
topControlsHeight));
|
||||
}));
|
||||
});
|
||||
|
||||
callbackHelper.waitForOnly();
|
||||
@ -66,12 +57,6 @@ public class NativePageBitmapCapturerTest {
|
||||
@SmallTest
|
||||
public void testWithNonNativePage() {
|
||||
mTabbedActivityTestRule.startMainActivityOnBlankPage();
|
||||
|
||||
final TabWebContentsDelegateAndroid delegate =
|
||||
TabTestUtils.getTabWebContentsDelegate(
|
||||
mTabbedActivityTestRule.getActivity().getActivityTab());
|
||||
final int topControlsHeight = delegate.getTopControlsHeight();
|
||||
|
||||
CallbackHelper callbackHelper = new CallbackHelper();
|
||||
ThreadUtils.runOnUiThreadBlocking(
|
||||
() -> {
|
||||
@ -80,8 +65,7 @@ public class NativePageBitmapCapturerTest {
|
||||
mTabbedActivityTestRule.getActivity().getActivityTab(),
|
||||
(bitmap) -> {
|
||||
callbackHelper.notifyCalled();
|
||||
},
|
||||
topControlsHeight));
|
||||
}));
|
||||
});
|
||||
|
||||
// Capture will be finished before the following task.
|
||||
|
@ -15,7 +15,6 @@
|
||||
#include "base/android/jni_android.h"
|
||||
#include "base/android/jni_array.h"
|
||||
#include "base/android/jni_string.h"
|
||||
#include "base/check.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/functional/callback_helpers.h"
|
||||
#include "base/json/json_writer.h"
|
||||
@ -49,7 +48,6 @@
|
||||
#include "ui/gfx/android/java_bitmap.h"
|
||||
#include "ui/gfx/geometry/point.h"
|
||||
#include "ui/gfx/geometry/rect.h"
|
||||
#include "ui/snapshot/snapshot.h"
|
||||
#include "url/android/gurl_android.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
@ -258,28 +256,6 @@ WebContentsAndroid::GetJavaObject() {
|
||||
return base::android::ScopedJavaLocalRef<jobject>(obj_);
|
||||
}
|
||||
|
||||
void WebContentsAndroid::CaptureContentAsBitmapForTesting(
|
||||
JNIEnv* env,
|
||||
const base::android::JavaParamRef<jobject>& jcallback) {
|
||||
ui::GrabViewSnapshot(
|
||||
web_contents_->GetNativeView(), gfx::Rect(web_contents_->GetSize()),
|
||||
base::BindOnce(
|
||||
&WebContentsAndroid::OnFinishGetContentBitmapForTesting,
|
||||
weak_factory_.GetWeakPtr(),
|
||||
base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
|
||||
}
|
||||
|
||||
void WebContentsAndroid::OnFinishGetContentBitmapForTesting(
|
||||
const base::android::JavaRef<jobject>& callback,
|
||||
gfx::Image snapshot) {
|
||||
const SkBitmap bitmap = snapshot.AsBitmap();
|
||||
CHECK(!bitmap.isNull());
|
||||
CHECK(!bitmap.empty());
|
||||
base::android::RunObjectCallbackAndroid(
|
||||
callback,
|
||||
gfx::ConvertToJavaBitmap(bitmap, gfx::OomBehavior::kReturnNullOnOom));
|
||||
}
|
||||
|
||||
void WebContentsAndroid::ClearNativeReference(JNIEnv* env) {
|
||||
return web_contents_->ClearWebContentsAndroid();
|
||||
}
|
||||
|
@ -235,13 +235,6 @@ class CONTENT_EXPORT WebContentsAndroid {
|
||||
void OnContentForNavigationEntryShown(JNIEnv* env);
|
||||
jint GetCurrentBackForwardTransitionStage(JNIEnv* env);
|
||||
|
||||
void CaptureContentAsBitmapForTesting(
|
||||
JNIEnv* env,
|
||||
const base::android::JavaParamRef<jobject>& jcallback);
|
||||
void OnFinishGetContentBitmapForTesting(
|
||||
const base::android::JavaRef<jobject>& callback,
|
||||
gfx::Image snapshot);
|
||||
|
||||
// Adds a crash report, like DumpWithoutCrashing(), including the Java stack
|
||||
// trace from which `web_contents` was created. This is meant to help debug
|
||||
// cases where BrowserContext is destroyed before its WebContents.
|
||||
|
@ -25,7 +25,6 @@ import org.jni_zero.CalledByNative;
|
||||
import org.jni_zero.JNINamespace;
|
||||
import org.jni_zero.NativeMethods;
|
||||
|
||||
import org.chromium.base.Callback;
|
||||
import org.chromium.base.JavaExceptionReporter;
|
||||
import org.chromium.base.Log;
|
||||
import org.chromium.base.ObserverList;
|
||||
@ -1249,16 +1248,9 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
|
||||
"Native WebContents already destroyed", mNativeDestroyThrowable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void captureContentAsBitmapForTesting(Callback<Bitmap> callback) {
|
||||
WebContentsImplJni.get()
|
||||
.captureContentAsBitmapForTesting(mNativeWebContentsAndroid, callback);
|
||||
}
|
||||
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
|
||||
@NativeMethods
|
||||
public interface Natives {
|
||||
|
||||
// This is static to avoid exposing a public destroy method on the native side of this
|
||||
// class.
|
||||
void destroyWebContents(long webContentsAndroidPtr);
|
||||
@ -1462,8 +1454,5 @@ public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, Wi
|
||||
long nativeWebContentsAndroid,
|
||||
BrowserControlsOffsetTagsInfo oldOffsetTagsInfo,
|
||||
BrowserControlsOffsetTagsInfo offsetTagsInfo);
|
||||
|
||||
void captureContentAsBitmapForTesting(
|
||||
long nativeWebContentsAndroid, Callback<Bitmap> callback);
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
package org.chromium.content_public.browser;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Handler;
|
||||
import android.os.Parcelable;
|
||||
@ -12,7 +11,6 @@ import android.os.Parcelable;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.chromium.base.Callback;
|
||||
import org.chromium.blink_public.input.SelectionGranularity;
|
||||
import org.chromium.cc.input.BrowserControlsOffsetTagsInfo;
|
||||
import org.chromium.content_public.browser.back_forward_transition.AnimationStage;
|
||||
@ -623,6 +621,4 @@ public interface WebContents extends Parcelable {
|
||||
void notifyControlsConstraintsChanged(
|
||||
BrowserControlsOffsetTagsInfo oldOffsetTagsInfo,
|
||||
BrowserControlsOffsetTagsInfo offsetTagsInfo);
|
||||
|
||||
void captureContentAsBitmapForTesting(Callback<Bitmap> callback);
|
||||
}
|
||||
|
@ -5,14 +5,12 @@
|
||||
package org.chromium.content_public.browser.test.mock;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Handler;
|
||||
import android.os.Parcel;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.chromium.base.Callback;
|
||||
import org.chromium.blink_public.input.SelectionGranularity;
|
||||
import org.chromium.cc.input.BrowserControlsOffsetTagsInfo;
|
||||
import org.chromium.content_public.browser.GlobalRenderFrameHostId;
|
||||
@ -377,9 +375,6 @@ public class MockWebContents implements WebContents {
|
||||
return AnimationStage.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void captureContentAsBitmapForTesting(Callback<Bitmap> callback) {}
|
||||
|
||||
@Override
|
||||
public void notifyControlsConstraintsChanged(
|
||||
BrowserControlsOffsetTagsInfo oldOffsetTagsInfo,
|
||||
|
Reference in New Issue
Block a user