Index: printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java |
diff --git a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java |
index 16e045616abde9cf6d3c758e141c17de4e057b9a..dc400e76d62e82e223784a8f21ba53cdc5b6793c 100644 |
--- a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java |
+++ b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java |
@@ -47,6 +47,12 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator |
private PrintingContextInterface mPrintingContext; |
+ /** |
+ * The context of a query initiated by window.print(), stored here to allow syncrhonization |
+ * with javascript. |
+ */ |
+ private PrintingContextInterface mContextFromScriptInitiation; |
+ |
/** The file descriptor into which the PDF will be written. Provided by the framework. */ |
private int mFileDescriptor; |
@@ -86,6 +92,8 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator |
private boolean mIsBusy = false; |
+ private PrintManagerDelegate mPrintManager; |
+ |
private PrintingControllerImpl(PrintDocumentAdapterWrapper printDocumentAdapterWrapper, |
String errorText) { |
mErrorMessage = errorText; |
@@ -168,11 +176,29 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator |
} |
@Override |
- public void startPrint(final Printable printable, PrintManagerDelegate printManager) { |
+ public void setPendingPrint(final Printable printable, PrintManagerDelegate printManager) { |
if (mIsBusy) return; |
- mIsBusy = true; |
mPrintable = printable; |
- mPrintDocumentAdapterWrapper.print(printManager, printable.getTitle()); |
+ mPrintManager = printManager; |
+ } |
+ |
+ /* (non-Javadoc) |
+ * @see org.chromium.printing.PrintingController#startPrintFromPendingPrintable() |
+ */ |
+ @Override |
+ public void startPendingPrint(PrintingContextInterface printingContext) { |
+ if (mIsBusy || mPrintManager == null) return; |
+ mContextFromScriptInitiation = printingContext; |
+ mIsBusy = true; |
+ mPrintDocumentAdapterWrapper.print(mPrintManager, mPrintable.getTitle()); |
+ mPrintManager = null; |
+ } |
+ |
+ @Override |
+ public void startPrint(final Printable printable, PrintManagerDelegate printManager) { |
+ if (mIsBusy) return; |
+ setPendingPrint(printable, printManager); |
+ startPendingPrint(null); |
} |
@Override |
@@ -202,6 +228,7 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator |
CancellationSignal cancellationSignal, |
PrintDocumentAdapterWrapper.LayoutResultCallbackWrapper callback, |
Bundle metadata) { |
+ |
// NOTE: Chrome printing just supports one DPI, whereas Android has both vertical and |
// horizontal. These two values are most of the time same, so we just pass one of them. |
mDpi = newAttributes.getResolution().getHorizontalDpi(); |
@@ -321,6 +348,12 @@ public class PrintingControllerImpl implements PrintingController, PdfGenerator |
mPrintingContext.updatePrintingContextMap(mFileDescriptor, true); |
mPrintingContext = null; |
} |
+ |
+ if (mContextFromScriptInitiation != null) { |
+ mContextFromScriptInitiation.showSystemDialogDone(); |
+ mContextFromScriptInitiation = null; |
+ } |
+ |
mPrintingState = PRINTING_STATE_FINISHED; |
closeFileDescriptor(mFileDescriptor); |