Commit 48ceab29 authored by Vladislav Kuzkokov's avatar Vladislav Kuzkokov Committed by Commit Bot

Make PrintingContext::PrintSettingsCallback non-repeatable.

Bug: 625126
Change-Id: If67d226a432060596cf424e148f16b7a5035aeb5
Reviewed-on: https://chromium-review.googlesource.com/914821Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Commit-Queue: Vladislav Kuzkokov <vkuzkokov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#536734}
parent 9afd0bad
......@@ -105,8 +105,9 @@ void NotificationCallback(PrintJobWorkerOwner* print_job,
void PostOnOwnerThread(scoped_refptr<PrintJobWorkerOwner> owner,
PrintingContext::PrintSettingsCallback callback,
PrintingContext::Result result) {
owner->PostTask(FROM_HERE, base::BindOnce(&HoldRefCallback, owner,
base::BindOnce(callback, result)));
owner->PostTask(FROM_HERE,
base::BindOnce(&HoldRefCallback, owner,
base::BindOnce(std::move(callback), result)));
}
#if defined(OS_WIN)
......@@ -263,9 +264,9 @@ void PrintJobWorker::GetSettingsWithUI(
// weak_factory_ creates pointers valid only on owner_ thread.
printing_context_->AskUserForSettings(
document_page_count, has_selection, is_scripted,
base::Bind(&PostOnOwnerThread, base::WrapRefCounted(owner_),
base::Bind(&PrintJobWorker::GetSettingsDone,
weak_factory_.GetWeakPtr())));
base::BindOnce(&PostOnOwnerThread, base::WrapRefCounted(owner_),
base::BindOnce(&PrintJobWorker::GetSettingsDone,
weak_factory_.GetWeakPtr())));
}
void PrintJobWorker::UseDefaultSettings() {
......
......@@ -83,9 +83,10 @@ void PrinterQuery::GetSettings(GetSettingsAskParam ask_user_for_settings,
ask_user_for_settings == GetSettingsAskParam::ASK_USER;
worker_->PostTask(
FROM_HERE,
base::Bind(&PrintJobWorker::GetSettings, base::Unretained(worker_.get()),
is_print_dialog_box_shown_, expected_page_count, has_selection,
margin_type, is_scripted, is_modifiable));
base::BindOnce(&PrintJobWorker::GetSettings,
base::Unretained(worker_.get()),
is_print_dialog_box_shown_, expected_page_count,
has_selection, margin_type, is_scripted, is_modifiable));
}
void PrinterQuery::SetSettings(
......
......@@ -323,8 +323,8 @@ bool PrintDialogGtk2::UpdateSettings(printing::PrintSettings* settings) {
void PrintDialogGtk2::ShowDialog(
gfx::NativeView parent_view,
bool has_selection,
const PrintingContextLinux::PrintSettingsCallback& callback) {
callback_ = callback;
PrintingContextLinux::PrintSettingsCallback callback) {
callback_ = std::move(callback);
DCHECK(!callback_.is_null());
dialog_ = gtk_print_unix_dialog_new(nullptr, nullptr);
......@@ -477,14 +477,12 @@ void PrintDialogGtk2::OnResponse(GtkWidget* dialog, int response_id) {
settings.set_selection_only(print_selection_only);
InitPrintSettingsGtk(gtk_settings_, page_setup_, &settings);
context_->InitWithSettings(settings);
callback_.Run(PrintingContextLinux::OK);
callback_.Reset();
std::move(callback_).Run(PrintingContextLinux::OK);
return;
}
case GTK_RESPONSE_DELETE_EVENT: // Fall through.
case GTK_RESPONSE_CANCEL: {
callback_.Run(PrintingContextLinux::CANCEL);
callback_.Reset();
std::move(callback_).Run(PrintingContextLinux::CANCEL);
return;
}
case GTK_RESPONSE_APPLY:
......@@ -551,8 +549,6 @@ void PrintDialogGtk2::OnWindowDestroying(aura::Window* window) {
libgtkui::ClearAuraTransientParent(dialog_);
window->RemoveObserver(this);
if (!callback_.is_null()) {
callback_.Run(PrintingContextLinux::CANCEL);
callback_.Reset();
}
if (!callback_.is_null())
std::move(callback_).Run(PrintingContextLinux::CANCEL);
}
......@@ -43,7 +43,7 @@ class PrintDialogGtk2 : public printing::PrintDialogGtkInterface,
void ShowDialog(
gfx::NativeView parent_view,
bool has_selection,
const PrintingContextLinux::PrintSettingsCallback& callback) override;
PrintingContextLinux::PrintSettingsCallback callback) override;
void PrintDocument(const printing::MetafilePlayer& metafile,
const base::string16& document_name) override;
void AddRefToDialog() override;
......
......@@ -31,7 +31,7 @@ class PrintDialogGtkInterface {
virtual void ShowDialog(
gfx::NativeView parent_view,
bool has_selection,
const PrintingContextLinux::PrintSettingsCallback& callback) = 0;
PrintingContextLinux::PrintSettingsCallback callback) = 0;
// Prints the document named |document_name| contained in |metafile|.
// Called from the print worker thread. Once called, the
......
......@@ -51,7 +51,7 @@ class PRINTING_EXPORT PrintingContext {
// Callback of AskUserForSettings, used to notify the PrintJobWorker when
// print settings are available.
typedef base::Callback<void(Result)> PrintSettingsCallback;
using PrintSettingsCallback = base::OnceCallback<void(Result)>;
// Asks the user what printer and format should be used to print. Updates the
// context with the select device settings. The result of the call is returned
......@@ -63,7 +63,7 @@ class PRINTING_EXPORT PrintingContext {
virtual void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) = 0;
PrintSettingsCallback callback) = 0;
// Selects the user's default printer and format. Updates the context with the
// default device settings.
......
......@@ -84,9 +84,9 @@ void PrintingContextAndroid::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
PrintSettingsCallback callback) {
// This method is always run in the UI thread.
callback_ = callback;
callback_ = std::move(callback);
JNIEnv* env = base::android::AttachCurrentThread();
if (j_printing_context_.is_null()) {
......@@ -107,9 +107,10 @@ void PrintingContextAndroid::AskUserForSettingsReply(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean success) {
DCHECK(callback_);
if (!success) {
// TODO(cimamoglu): Differentiate between FAILED And CANCEL.
callback_.Run(FAILED);
std::move(callback_).Run(FAILED);
return;
}
......@@ -134,14 +135,15 @@ void PrintingContextAndroid::AskUserForSettingsReply(
height = Round(ConvertUnitDouble(height, kInchToMil, 1.0) * dpi);
SetSizes(&settings_, dpi, width, height);
callback_.Run(OK);
std::move(callback_).Run(OK);
}
void PrintingContextAndroid::ShowSystemDialogDone(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
DCHECK(callback_);
// Settings are not updated, callback is called only to unblock javascript.
callback_.Run(CANCEL);
std::move(callback_).Run(CANCEL);
}
PrintingContext::Result PrintingContextAndroid::UseDefaultSettings() {
......
......@@ -40,7 +40,7 @@ class PRINTING_EXPORT PrintingContextAndroid : public PrintingContext {
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
PrintSettingsCallback callback) override;
Result UseDefaultSettings() override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UpdatePrinterSettings(bool external_preview,
......
......@@ -163,7 +163,7 @@ void PrintingContextChromeos::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
PrintSettingsCallback callback) {
// We don't want to bring up a dialog here. Ever. This should not be called.
NOTREACHED();
}
......
......@@ -25,7 +25,7 @@ class PRINTING_EXPORT PrintingContextChromeos : public PrintingContext {
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
PrintSettingsCallback callback) override;
Result UseDefaultSettings() override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UpdatePrinterSettings(bool external_preview,
......
......@@ -65,21 +65,20 @@ void PrintingContextLinux::PrintDocument(const MetafilePlayer& metafile) {
print_dialog_->PrintDocument(metafile, document_name_);
}
void PrintingContextLinux::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
void PrintingContextLinux::AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
PrintSettingsCallback callback) {
if (!print_dialog_) {
// Can only get here if the renderer is sending bad messages.
// http://crbug.com/341777
NOTREACHED();
callback.Run(FAILED);
std::move(callback).Run(FAILED);
return;
}
print_dialog_->ShowDialog(
delegate_->GetParentView(), has_selection, callback);
print_dialog_->ShowDialog(delegate_->GetParentView(), has_selection,
std::move(callback));
}
PrintingContext::Result PrintingContextLinux::UseDefaultSettings() {
......
......@@ -40,7 +40,7 @@ class PRINTING_EXPORT PrintingContextLinux : public PrintingContext {
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
PrintSettingsCallback callback) override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UseDefaultSettings() override;
Result UpdatePrinterSettings(bool external_preview,
......
......@@ -26,7 +26,7 @@ class PRINTING_EXPORT PrintingContextMac : public PrintingContext {
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
PrintSettingsCallback callback) override;
Result UseDefaultSettings() override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UpdatePrinterSettings(bool external_preview,
......
......@@ -81,11 +81,10 @@ PrintingContextMac::~PrintingContextMac() {
ReleaseContext();
}
void PrintingContextMac::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
void PrintingContextMac::AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
PrintSettingsCallback callback) {
// Exceptions can also happen when the NSPrintPanel is being
// deallocated, so it must be autoreleased within this scope.
base::mac::ScopedNSAutoreleasePool pool;
......@@ -127,9 +126,9 @@ void PrintingContextMac::AskUserForSettings(
print_info_.reset([[panel printInfo] retain]);
settings_.set_ranges(GetPageRangesFromPrintInfo());
InitPrintSettingsFromPrintInfo();
callback.Run(OK);
std::move(callback).Run(OK);
} else {
callback.Run(CANCEL);
std::move(callback).Run(CANCEL);
}
}
......
......@@ -36,9 +36,9 @@ void PrintingContextNoSystemDialog::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
PrintSettingsCallback callback) {
// We don't want to bring up a dialog here. Ever. Just signal the callback.
callback.Run(OK);
std::move(callback).Run(OK);
}
PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() {
......
......@@ -21,7 +21,7 @@ class PRINTING_EXPORT PrintingContextNoSystemDialog : public PrintingContext {
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
PrintSettingsCallback callback) override;
Result UseDefaultSettings() override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UpdatePrinterSettings(bool external_preview,
......
......@@ -23,7 +23,7 @@ void PrintingContextSystemDialogWin::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
PrintSettingsCallback callback) {
DCHECK(!in_print_job_);
HWND window = GetRootWindow(delegate_->GetParentView());
......@@ -66,12 +66,12 @@ void PrintingContextSystemDialogWin::AskUserForSettings(
if (ShowPrintDialog(&dialog_options) != S_OK) {
ResetSettings();
callback.Run(FAILED);
std::move(callback).Run(FAILED);
return;
}
// TODO(maruel): Support PD_PRINTTOFILE.
callback.Run(ParseDialogResultEx(dialog_options));
std::move(callback).Run(ParseDialogResultEx(dialog_options));
}
HRESULT PrintingContextSystemDialogWin::ShowPrintDialog(PRINTDLGEX* options) {
......
......@@ -23,11 +23,10 @@ class PRINTING_EXPORT PrintingContextSystemDialogWin
~PrintingContextSystemDialogWin() override;
// PrintingContext implementation.
void AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
PrintSettingsCallback callback) override;
private:
friend class MockPrintingContextWin;
......
......@@ -51,11 +51,10 @@ PrintingContextWin::~PrintingContextWin() {
ReleaseContext();
}
void PrintingContextWin::AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) {
void PrintingContextWin::AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
PrintSettingsCallback callback) {
NOTIMPLEMENTED();
}
......
......@@ -25,11 +25,10 @@ class PRINTING_EXPORT PrintingContextWin : public PrintingContext {
Result InitWithSettingsForTest(const PrintSettings& settings);
// PrintingContext implementation.
void AskUserForSettings(
int max_pages,
bool has_selection,
bool is_scripted,
const PrintSettingsCallback& callback) override;
void AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
PrintSettingsCallback callback) override;
Result UseDefaultSettings() override;
gfx::Size GetPdfPaperSizeDeviceUnits() override;
Result UpdatePrinterSettings(bool external_preview,
......
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