0

Remove PrintManagerHost::DidGetDocumentCookie() interface.

In PrintManager and derived classes, set the document cookie used for
printing in those classes in the browser process. Don't pass it to a
renderer, get the value back, and then set it.

Bug: 1202661
Change-Id: I9482c886d7aa3d2e17f06d8d218f87f8e27784f4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2909373
Reviewed-by: Alan Screen <awscreen@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#886032}
This commit is contained in:
Lei Zhang
2021-05-24 19:27:31 +00:00
committed by Chromium LUCI CQ
parent 15aa757cd8
commit eead1ba5da
8 changed files with 77 additions and 67 deletions

@ -148,16 +148,6 @@ void CreateQueryWithSettings(base::Value job_settings,
} }
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Runs |callback| with |params| to reply to
// mojom::PrintManagerHost::GetDefaultPrintSettings.
void GetDefaultPrintSettingsReply(
mojom::PrintManagerHost::GetDefaultPrintSettingsCallback callback,
mojom::PrintParamsPtr params) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(params);
std::move(callback).Run(std::move(params));
}
void GetDefaultPrintSettingsReplyOnIO( void GetDefaultPrintSettingsReplyOnIO(
scoped_refptr<PrintQueriesQueue> queue, scoped_refptr<PrintQueriesQueue> queue,
std::unique_ptr<PrinterQuery> printer_query, std::unique_ptr<PrinterQuery> printer_query,
@ -170,8 +160,7 @@ void GetDefaultPrintSettingsReplyOnIO(
} }
content::GetUIThreadTaskRunner({})->PostTask( content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(&GetDefaultPrintSettingsReply, FROM_HERE, base::BindOnce(std::move(callback), std::move(params)));
std::move(callback), std::move(params)));
// If printing was enabled. // If printing was enabled.
if (printer_query) { if (printer_query) {
@ -212,17 +201,6 @@ mojom::PrintPagesParamsPtr CreateEmptyPrintPagesParamsPtr() {
} }
#if BUILDFLAG(ENABLE_PRINT_PREVIEW) #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Runs |callback| with |params| to reply to
// mojom::PrintManagerHost::UpdatePrintSettings.
void UpdatePrintSettingsReply(
mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
mojom::PrintPagesParamsPtr params,
bool canceled) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(params);
std::move(callback).Run(std::move(params), canceled);
}
#if defined(OS_WIN) #if defined(OS_WIN)
content::WebContents* GetWebContentsForRenderFrame(int render_process_id, content::WebContents* GetWebContentsForRenderFrame(int render_process_id,
int render_frame_id) { int render_frame_id) {
@ -274,8 +252,8 @@ void UpdatePrintSettingsReplyOnIO(
#endif #endif
content::GetUIThreadTaskRunner({})->PostTask( content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(&UpdatePrintSettingsReply, std::move(callback), FROM_HERE,
std::move(params), canceled)); base::BindOnce(std::move(callback), std::move(params), canceled));
if (printer_query->cookie() && printer_query->settings().dpi()) { if (printer_query->cookie() && printer_query->settings().dpi()) {
queue->QueuePrinterQuery(std::move(printer_query)); queue->QueuePrinterQuery(std::move(printer_query));
@ -306,27 +284,10 @@ void UpdatePrintSettingsOnIO(
} }
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Runs |callback| with |params| to reply to
// mojom::PrintManagerHost::ScriptedPrint.
void ScriptedPrintReply(mojom::PrintManagerHost::ScriptedPrintCallback callback,
mojom::PrintPagesParamsPtr params,
int process_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!content::RenderProcessHost::FromID(process_id)) {
// Early return if the renderer is not alive.
return;
}
DCHECK(params);
std::move(callback).Run(std::move(params));
}
void ScriptedPrintReplyOnIO( void ScriptedPrintReplyOnIO(
scoped_refptr<PrintQueriesQueue> queue, scoped_refptr<PrintQueriesQueue> queue,
std::unique_ptr<PrinterQuery> printer_query, std::unique_ptr<PrinterQuery> printer_query,
mojom::PrintManagerHost::ScriptedPrintCallback callback, mojom::PrintManagerHost::ScriptedPrintCallback callback) {
int process_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
mojom::PrintPagesParamsPtr params = CreateEmptyPrintPagesParamsPtr(); mojom::PrintPagesParamsPtr params = CreateEmptyPrintPagesParamsPtr();
if (printer_query->last_status() == PrintingContext::OK && if (printer_query->last_status() == PrintingContext::OK &&
@ -339,8 +300,7 @@ void ScriptedPrintReplyOnIO(
bool has_valid_cookie = params->params->document_cookie; bool has_valid_cookie = params->params->document_cookie;
bool has_dpi = !params->params->dpi.IsEmpty(); bool has_dpi = !params->params->dpi.IsEmpty();
content::GetUIThreadTaskRunner({})->PostTask( content::GetUIThreadTaskRunner({})->PostTask(
FROM_HERE, base::BindOnce(&ScriptedPrintReply, std::move(callback), FROM_HERE, base::BindOnce(std::move(callback), std::move(params)));
std::move(params), process_id));
if (has_dpi && has_valid_cookie) { if (has_dpi && has_valid_cookie) {
queue->QueuePrinterQuery(std::move(printer_query)); queue->QueuePrinterQuery(std::move(printer_query));
@ -370,7 +330,7 @@ void ScriptedPrintOnIO(mojom::ScriptedPrintParamsPtr params,
params->has_selection, params->margin_type, params->is_scripted, params->has_selection, params->margin_type, params->is_scripted,
params->is_modifiable, params->is_modifiable,
base::BindOnce(&ScriptedPrintReplyOnIO, queue, std::move(printer_query), base::BindOnce(&ScriptedPrintReplyOnIO, queue, std::move(printer_query),
std::move(callback), process_id)); std::move(callback)));
} }
} // namespace } // namespace
@ -496,6 +456,7 @@ void PrintViewManagerBase::StartLocalPrintJob(
PrinterHandler::PrintCallback callback) { PrinterHandler::PrintCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
set_cookie(cookie);
DidGetPrintedPagesCount(cookie, page_count); DidGetPrintedPagesCount(cookie, page_count);
if (!PrintJobHasDocument(cookie)) { if (!PrintJobHasDocument(cookie)) {
@ -516,8 +477,41 @@ void PrintViewManagerBase::StartLocalPrintJob(
settings.page_setup_device_units().printable_area().origin()); settings.page_setup_device_units().printable_area().origin());
std::move(callback).Run(base::Value()); std::move(callback).Run(base::Value());
} }
void PrintViewManagerBase::UpdatePrintSettingsReply(
mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
mojom::PrintPagesParamsPtr params,
bool canceled) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
set_cookie(params->params->document_cookie);
std::move(callback).Run(std::move(params), canceled);
}
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
void PrintViewManagerBase::GetDefaultPrintSettingsReply(
GetDefaultPrintSettingsCallback callback,
mojom::PrintParamsPtr params) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
set_cookie(params->document_cookie);
std::move(callback).Run(std::move(params));
}
void PrintViewManagerBase::ScriptedPrintReply(
ScriptedPrintCallback callback,
int process_id,
mojom::PrintPagesParamsPtr params) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!content::RenderProcessHost::FromID(process_id)) {
// Early return if the renderer is not alive.
return;
}
set_cookie(params->params->document_cookie);
std::move(callback).Run(std::move(params));
}
void PrintViewManagerBase::UpdatePrintingEnabled() { void PrintViewManagerBase::UpdatePrintingEnabled() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
// The Unretained() is safe because ForEachFrame() is synchronous. // The Unretained() is safe because ForEachFrame() is synchronous.
@ -644,10 +638,13 @@ void PrintViewManagerBase::GetDefaultPrintSettings(
} }
content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame(); content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame();
auto callback_wrapper =
base::BindOnce(&PrintViewManagerBase::GetDefaultPrintSettingsReply,
weak_ptr_factory_.GetWeakPtr(), std::move(callback));
content::GetIOThreadTaskRunner({})->PostTask( content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&GetDefaultPrintSettingsOnIO, std::move(callback), queue_, base::BindOnce(&GetDefaultPrintSettingsOnIO, std::move(callback_wrapper),
render_frame_host->GetProcess()->GetID(), queue_, render_frame_host->GetProcess()->GetID(),
render_frame_host->GetRoutingID())); render_frame_host->GetRoutingID()));
} }
@ -670,12 +667,15 @@ void PrintViewManagerBase::UpdatePrintSettings(
} }
content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame(); content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame();
auto callback_wrapper =
base::BindOnce(&PrintViewManagerBase::UpdatePrintSettingsReply,
weak_ptr_factory_.GetWeakPtr(), std::move(callback));
content::GetIOThreadTaskRunner({})->PostTask( content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(&UpdatePrintSettingsOnIO, cookie,
base::BindOnce(&UpdatePrintSettingsOnIO, cookie, std::move(callback), std::move(callback_wrapper), queue_,
queue_, std::move(job_settings), std::move(job_settings),
render_frame_host->GetProcess()->GetID(), render_frame_host->GetProcess()->GetID(),
render_frame_host->GetRoutingID())); render_frame_host->GetRoutingID()));
} }
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
@ -684,11 +684,15 @@ void PrintViewManagerBase::ScriptedPrint(mojom::ScriptedPrintParamsPtr params,
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame(); content::RenderFrameHost* render_frame_host = GetCurrentTargetFrame();
int process_id = render_frame_host->GetProcess()->GetID();
int routing_id = render_frame_host->GetRoutingID();
auto callback_wrapper = base::BindOnce(
&PrintViewManagerBase::ScriptedPrintReply, weak_ptr_factory_.GetWeakPtr(),
std::move(callback), process_id);
content::GetIOThreadTaskRunner({})->PostTask( content::GetIOThreadTaskRunner({})->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(&ScriptedPrintOnIO, std::move(params),
base::BindOnce(&ScriptedPrintOnIO, std::move(params), std::move(callback), std::move(callback_wrapper), queue_, process_id,
queue_, render_frame_host->GetProcess()->GetID(), routing_id));
render_frame_host->GetRoutingID()));
} }
void PrintViewManagerBase::PrintingFailed(int32_t cookie) { void PrintViewManagerBase::PrintingFailed(int32_t cookie) {

@ -157,8 +157,23 @@ class PrintViewManagerBase : public content::NotificationObserver,
uint32_t page_count, uint32_t page_count,
int cookie, int cookie,
PrinterHandler::PrintCallback callback); PrinterHandler::PrintCallback callback);
// Runs `callback` with `params` to reply to UpdatePrintSettings().
void UpdatePrintSettingsReply(
mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
mojom::PrintPagesParamsPtr params,
bool canceled);
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Runs `callback` with `params` to reply to GetDefaultPrintSettings().
void GetDefaultPrintSettingsReply(GetDefaultPrintSettingsCallback callback,
mojom::PrintParamsPtr params);
// Runs `callback` with `params` to reply to ScriptedPrint().
void ScriptedPrintReply(ScriptedPrintCallback callback,
int process_id,
mojom::PrintPagesParamsPtr params);
// Processes a NOTIFY_PRINT_JOB_EVENT notification. // Processes a NOTIFY_PRINT_JOB_EVENT notification.
void OnNotifyPrintJobEvent(const JobEventDetails& event_details); void OnNotifyPrintJobEvent(const JobEventDetails& event_details);

@ -29,10 +29,6 @@ void PrintManager::DidGetPrintedPagesCount(int32_t cookie,
number_pages_ = number_pages; number_pages_ = number_pages;
} }
void PrintManager::DidGetDocumentCookie(int32_t cookie) {
cookie_ = cookie;
}
void PrintManager::DidShowPrintDialog() {} void PrintManager::DidShowPrintDialog() {}
void PrintManager::DidPrintDocument(mojom::DidPrintDocumentParamsPtr params, void PrintManager::DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,

@ -40,7 +40,6 @@ class PrintManager : public content::WebContentsObserver,
// printing::mojom::PrintManagerHost: // printing::mojom::PrintManagerHost:
void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override; void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override;
void DidGetDocumentCookie(int32_t cookie) override;
void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params, void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override; DidPrintDocumentCallback callback) override;
void DidShowPrintDialog() override; void DidShowPrintDialog() override;

@ -322,9 +322,6 @@ interface PrintManagerHost {
// rendered pages according to the specified settings. // rendered pages according to the specified settings.
DidGetPrintedPagesCount(int32 cookie, uint32 number_pages); DidGetPrintedPagesCount(int32 cookie, uint32 number_pages);
// Sends the document cookie of the current printer query to the browser.
DidGetDocumentCookie(int32 cookie);
// Request the default print settings. // Request the default print settings.
[Sync] [Sync]
GetDefaultPrintSettings() => (PrintParams default_settings); GetDefaultPrintSettings() => (PrintParams default_settings);

@ -2884,7 +2884,6 @@ void PrintRenderFrameHelper::PrintPreviewContext::CalculatePluginAttributes() {
void PrintRenderFrameHelper::SetPrintPagesParams( void PrintRenderFrameHelper::SetPrintPagesParams(
const mojom::PrintPagesParams& settings) { const mojom::PrintPagesParams& settings) {
print_pages_params_ = settings.Clone(); print_pages_params_ = settings.Clone();
GetPrintManagerHost()->DidGetDocumentCookie(settings.params->document_cookie);
} }
void PrintRenderFrameHelper::QuitActiveRunLoops() { void PrintRenderFrameHelper::QuitActiveRunLoops() {

@ -297,7 +297,6 @@ class TestPrintManagerHost
EXPECT_EQ(number_pages, number_pages_); EXPECT_EQ(number_pages, number_pages_);
printer_->SetPrintedPagesCount(cookie, number_pages); printer_->SetPrintedPagesCount(cookie, number_pages);
} }
void DidGetDocumentCookie(int32_t cookie) override {}
void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params, void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override { DidPrintDocumentCallback callback) override {
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();

@ -166,6 +166,7 @@ void HeadlessPrintManager::GetPDFContents(content::RenderFrameHost* rfh,
print_params_ = GetPrintParamsFromSettings(settings); print_params_ = GetPrintParamsFromSettings(settings);
page_ranges_text_ = settings.page_ranges; page_ranges_text_ = settings.page_ranges;
ignore_invalid_page_ranges_ = settings.ignore_invalid_page_ranges; ignore_invalid_page_ranges_ = settings.ignore_invalid_page_ranges;
set_cookie(print_params_->params->document_cookie);
GetPrintRenderFrame(rfh)->PrintRequestedPages(); GetPrintRenderFrame(rfh)->PrintRequestedPages();
} }