From 0f5dbc42e69e700a20f58dda74da646a60db9770 Mon Sep 17 00:00:00 2001 From: Grace Cham <hscham@google.com> Date: Wed, 30 Apr 2025 18:23:27 -0700 Subject: [PATCH] [context menu] add print page test for empty space CM chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java \ --gtest_filter=ContextMenuTest.testPrintPage Bug: 391719844 Test: tools/autotest.py -C out/android_x64/ \ Change-Id: If88bd2f4278be0b6117a373c6a431724686e0ca2 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6482169 Reviewed-by: Lei Zhang <thestig@chromium.org> Reviewed-by: Sinan Sahin <sinansahin@google.com> Commit-Queue: Lei Zhang <thestig@chromium.org> Auto-Submit: Grace Cham <hscham@chromium.org> Reviewed-by: Benjamin Gordon <bmgordon@chromium.org> Cr-Commit-Position: refs/heads/main@{#1454276} --- .../browser/contextmenu/ContextMenuTest.java | 29 +++++++++++++++++++ .../printing/PrintingControllerImpl.java | 15 ++++++++++ 2 files changed, 44 insertions(+) diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java index 9f4b2a2651fb8..0e52e01fd46a0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java @@ -95,6 +95,9 @@ import org.chromium.content_public.browser.test.util.DOMUtils; import org.chromium.content_public.browser.test.util.TestTouchUtils; import org.chromium.content_public.common.ContentFeatures; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.printing.Printable; +import org.chromium.printing.PrintingController; +import org.chromium.printing.PrintingControllerImpl; import org.chromium.ui.base.Clipboard; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.mojom.MenuSourceType; @@ -118,6 +121,7 @@ public class ContextMenuTest { @Mock private TabContextMenuItemDelegate mItemDelegate; @Mock private ShareDelegate mShareDelegate; + @Mock private PrintingController mPrintingController; @Mock private DataProtectionBridge.Natives mDataProtectionBridgeMock; @ClassRule @@ -1192,6 +1196,31 @@ public class ContextMenuTest { chromeExtrasCaptor.getValue().saveLastUsed()); } + @Test + @MediumTest + @Restriction(DeviceFormFactor.DESKTOP) + @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_EMPTY_SPACE}) + public void testPrintPage() throws Exception { + Tab tab = sDownloadTestRule.getActivity().getActivityTab(); + ThreadUtils.runOnUiThreadBlocking( + // Set printing controller to use the mock instance. + () -> { + PrintingControllerImpl.setInstanceForTesting(mPrintingController); + }); + + ContextMenuUtils.selectContextMenuItemFromRightClick( + InstrumentationRegistry.getInstrumentation(), + sDownloadTestRule.getActivity(), + tab, + "testEmptySpace", + R.id.contextmenu_print_page); + + // Check that the started print job has the same title as the current tab. + ArgumentCaptor<Printable> printableCaptor = ArgumentCaptor.forClass(Printable.class); + verify(mPrintingController).startPrint(printableCaptor.capture(), any()); + Assert.assertEquals(tab.getTitle(), printableCaptor.getValue().getTitle()); + } + // TODO(benwgold): Add more test coverage for histogram recording of other context menu types. /** diff --git a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java index 0e567b52132ea..2f9382105b74b 100644 --- a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java +++ b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java @@ -16,6 +16,7 @@ import android.print.PrintDocumentInfo; import androidx.annotation.VisibleForTesting; import org.chromium.base.Log; +import org.chromium.base.ResettersForTesting; import org.chromium.base.ThreadUtils; import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.Nullable; @@ -58,6 +59,8 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator /** The singleton instance for this class. */ @VisibleForTesting protected static @Nullable PrintingController sInstance; + private static @Nullable PrintingController sInstanceForTesting; + private @Nullable String mErrorMessage; private int mRenderProcessId; @@ -103,6 +106,11 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator mPrintDocumentAdapterWrapper = new PrintDocumentAdapterWrapper(this); } + public static void setInstanceForTesting(PrintingController instanceForTesting) { + sInstanceForTesting = instanceForTesting; + ResettersForTesting.register(() -> sInstanceForTesting = null); + } + /** * Returns the singleton instance, lazily creating one if needed. * @@ -111,6 +119,8 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator public static PrintingController getInstance() { ThreadUtils.assertOnUiThread(); + if (sInstanceForTesting != null) return sInstanceForTesting; + if (sInstance == null) { sInstance = new PrintingControllerImpl(); } @@ -152,6 +162,11 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator return mIsBusy; } + @VisibleForTesting + public @Nullable Printable getPrintable() { + return mPrintable; + } + @Override public void setPendingPrint( final Printable printable,