Commit 08280f72 authored by Shimi Zhang's avatar Shimi Zhang Committed by Commit Bot

[Printing] Return early in pdfWritingDone() if there is no printing task

pdfWritingDone() will be called even there is no printing task. This is
because native will report printing failure as |pageCount| = 0 for
pdfWritingDone().

This CL makes pdfWritingDone() do the clean up tasks for only
PRINTING_STATE_STARTED_FROM_ONWRITE state.

Bug: 974581
Change-Id: Id69025ecdd2b874e0412b1dbabdb9a00b3a252f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1674689
Commit-Queue: Shimi Zhang <ctzsm@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#672551}
parent 93d16f76
...@@ -15,6 +15,7 @@ import android.print.PrintDocumentAdapter; ...@@ -15,6 +15,7 @@ import android.print.PrintDocumentAdapter;
import android.print.PrintDocumentInfo; import android.print.PrintDocumentInfo;
import android.support.test.filters.LargeTest; import android.support.test.filters.LargeTest;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
...@@ -379,6 +380,25 @@ public class PrintingControllerTest { ...@@ -379,6 +380,25 @@ public class PrintingControllerTest {
} }
} }
/**
* Regresstion test for crbug.com/974581. In some cases, native printing code will fail without
* starting a printing task in Java side. pdfWritingDone() will be called with |pageCount| = 0
* in this case. We don't need to do anything for this in Java side for now.
*/
@Test
@SmallTest
@Feature({"Printing"})
public void testPdfWritingDoneCalledWithoutInitailizePrintingTask() throws Throwable {
if (!ApiCompatibilityUtils.isPrintingSupported()) return;
mActivityTestRule.startMainActivityWithURL(URL);
final PrintingControllerImpl controller = createControllerOnUiThread();
// Calling pdfWritingDone() with |pageCount| = 0 before onWrite() was called. It shouldn't
// crash.
TestThreadUtils.runOnUiThreadBlocking(() -> controller.pdfWritingDone(0));
}
private PrintingControllerImpl createControllerOnUiThread() { private PrintingControllerImpl createControllerOnUiThread() {
return TestThreadUtils.runOnUiThreadBlockingNoException(() -> { return TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
return (PrintingControllerImpl) PrintingControllerImpl.create( return (PrintingControllerImpl) PrintingControllerImpl.create(
......
...@@ -213,7 +213,13 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator ...@@ -213,7 +213,13 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator
@Override @Override
public void pdfWritingDone(int pageCount) { public void pdfWritingDone(int pageCount) {
if (mPrintingState == PRINTING_STATE_FINISHED) return; if (mPrintingState == PRINTING_STATE_READY) {
assert pageCount
== 0 : "There is no pending printing task, should only be a failure report";
}
if (mPrintingState != PRINTING_STATE_STARTED_FROM_ONWRITE) return;
mPrintingState = PRINTING_STATE_READY; mPrintingState = PRINTING_STATE_READY;
closeFileDescriptor(); closeFileDescriptor();
if (pageCount > 0) { if (pageCount > 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment