summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/printing
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/printing')
-rw-r--r--chromium/chrome/browser/printing/cloud_print/privet_traffic_detector.cc27
-rw-r--r--chromium/chrome/browser/printing/cloud_print/privet_url_loader.cc4
-rw-r--r--chromium/chrome/browser/printing/pdf_to_emf_converter_browsertest.cc20
-rw-r--r--chromium/chrome/browser/printing/print_browsertest.cc316
-rw-r--r--chromium/chrome/browser/printing/print_error_dialog.cc5
-rw-r--r--chromium/chrome/browser/printing/print_job.cc13
-rw-r--r--chromium/chrome/browser/printing/print_job_manager.h1
-rw-r--r--chromium/chrome/browser/printing/print_job_worker.cc39
-rw-r--r--chromium/chrome/browser/printing/print_preview_dialog_controller.cc2
-rw-r--r--chromium/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc40
-rw-r--r--chromium/chrome/browser/printing/print_preview_dialog_controller_unittest.cc15
-rw-r--r--chromium/chrome/browser/printing/print_preview_message_handler.cc52
-rw-r--r--chromium/chrome/browser/printing/print_preview_message_handler.h19
-rw-r--r--chromium/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc3
-rw-r--r--chromium/chrome/browser/printing/print_view_manager.cc8
-rw-r--r--chromium/chrome/browser/printing/print_view_manager_base.cc41
-rw-r--r--chromium/chrome/browser/printing/print_view_manager_base.h5
-rw-r--r--chromium/chrome/browser/printing/print_view_manager_unittest.cc4
-rw-r--r--chromium/chrome/browser/printing/printer_manager_dialog_linux.cc1
-rw-r--r--chromium/chrome/browser/printing/printer_query.cc4
-rw-r--r--chromium/chrome/browser/printing/printing_message_filter.cc8
-rw-r--r--chromium/chrome/browser/printing/printing_service.cc5
22 files changed, 378 insertions, 254 deletions
diff --git a/chromium/chrome/browser/printing/cloud_print/privet_traffic_detector.cc b/chromium/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
index 85cbf0f6248..c95548a75d8 100644
--- a/chromium/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
+++ b/chromium/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
@@ -9,7 +9,6 @@
#include "base/bind.h"
#include "base/stl_util.h"
#include "base/sys_byteorder.h"
-#include "base/task/post_task.h"
#include "base/threading/scoped_blocking_call.h"
#include "base/threading/thread_task_runner_handle.h"
#include "content/public/browser/browser_context.h"
@@ -51,8 +50,8 @@ void OnGetNetworkList(
"lo", "lo", 0, net::NetworkChangeNotifier::CONNECTION_UNKNOWN,
localhost_prefix, 8, net::IP_ADDRESS_ATTRIBUTE_NONE));
- base::PostTask(FROM_HERE, {content::BrowserThread::IO},
- base::BindOnce(std::move(callback), std::move(ip4_networks)));
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(std::move(callback), std::move(ip4_networks)));
}
void GetNetworkListOnUIThread(
@@ -85,22 +84,22 @@ PrivetTrafficDetector::PrivetTrafficDetector(
: helper_(new Helper(profile, on_traffic_detected)) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this);
- base::PostTask(FROM_HERE, {content::BrowserThread::IO},
- base::BindOnce(&PrivetTrafficDetector::Helper::ScheduleRestart,
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrivetTrafficDetector::Helper::ScheduleRestart,
base::Unretained(helper_)));
}
PrivetTrafficDetector::~PrivetTrafficDetector() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this);
- base::DeleteSoon(FROM_HERE, {content::BrowserThread::IO}, helper_);
+ content::GetIOThreadTaskRunner({})->DeleteSoon(FROM_HERE, helper_);
}
void PrivetTrafficDetector::OnConnectionChanged(
network::mojom::ConnectionType type) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrivetTrafficDetector::Helper::HandleConnectionChanged,
base::Unretained(helper_), type));
}
@@ -131,8 +130,8 @@ void PrivetTrafficDetector::Helper::ScheduleRestart() {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
ResetConnection();
weak_ptr_factory_.InvalidateWeakPtrs();
- base::PostDelayedTask(
- FROM_HERE, {content::BrowserThread::UI},
+ content::GetUIThreadTaskRunner({})->PostDelayedTask(
+ FROM_HERE,
base::BindOnce(
&GetNetworkListOnUIThread,
base::BindOnce(&Helper::Restart, weak_ptr_factory_.GetWeakPtr())),
@@ -149,8 +148,8 @@ void PrivetTrafficDetector::Helper::Restart(
void PrivetTrafficDetector::Helper::Bind() {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&CreateUDPSocketOnUIThread, profile_,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&CreateUDPSocketOnUIThread, profile_,
socket_.BindNewPipeAndPassReceiver(),
listener_receiver_.BindNewPipeAndPassRemote()));
@@ -251,8 +250,8 @@ void PrivetTrafficDetector::Helper::OnReceived(
recv_addr_ = src_addr.value();
if (IsPrivetPacket(data.value())) {
ResetConnection();
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- on_traffic_detected_);
+ content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE,
+ on_traffic_detected_);
} else {
socket_->ReceiveMoreWithBufferSize(1, net::dns_protocol::kMaxMulticastSize);
}
diff --git a/chromium/chrome/browser/printing/cloud_print/privet_url_loader.cc b/chromium/chrome/browser/printing/cloud_print/privet_url_loader.cc
index 81207239a71..2e7c95f9bb6 100644
--- a/chromium/chrome/browser/printing/cloud_print/privet_url_loader.cc
+++ b/chromium/chrome/browser/printing/cloud_print/privet_url_loader.cc
@@ -250,8 +250,8 @@ void PrivetURLLoader::OnDownloadedToString(
return;
}
- base::JSONReader json_reader(base::JSON_ALLOW_TRAILING_COMMAS);
- base::Optional<base::Value> value = json_reader.ReadToValue(*response_body);
+ base::Optional<base::Value> value =
+ base::JSONReader::Read(*response_body, base::JSON_ALLOW_TRAILING_COMMAS);
if (!value || !value->is_dict()) {
delegate_->OnError(0, JSON_PARSE_ERROR);
return;
diff --git a/chromium/chrome/browser/printing/pdf_to_emf_converter_browsertest.cc b/chromium/chrome/browser/printing/pdf_to_emf_converter_browsertest.cc
index 130fac6497a..46d81158e7a 100644
--- a/chromium/chrome/browser/printing/pdf_to_emf_converter_browsertest.cc
+++ b/chromium/chrome/browser/printing/pdf_to_emf_converter_browsertest.cc
@@ -298,8 +298,13 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel2Basic) {
for (int i = 0; i < kNumberOfPages; ++i) {
ASSERT_TRUE(GetPage(i));
// The output is PS encapsulated in EMF.
+#ifdef NTDDI_WIN10_VB // Windows 10.0.19041
+ ASSERT_TRUE(GetPageExpectedEmfData(
+ GetFileNameForPageNumber("pdf_converter_basic_ps_new_page_", i)));
+#else
ASSERT_TRUE(GetPageExpectedEmfData(
GetFileNameForPageNumber("pdf_converter_basic_ps_page_", i)));
+#endif
ComparePageEmfHeader();
ComparePageEmfPayload();
}
@@ -317,8 +322,13 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest, PostScriptLevel3Basic) {
for (int i = 0; i < kNumberOfPages; ++i) {
ASSERT_TRUE(GetPage(i));
// The output is PS encapsulated in EMF.
+#ifdef NTDDI_WIN10_VB // Windows 10.0.19041
+ ASSERT_TRUE(GetPageExpectedEmfData(
+ GetFileNameForPageNumber("pdf_converter_basic_ps_new_page_", i)));
+#else
ASSERT_TRUE(GetPageExpectedEmfData(
GetFileNameForPageNumber("pdf_converter_basic_ps_page_", i)));
+#endif
ComparePageEmfHeader();
ComparePageEmfPayload();
}
@@ -368,8 +378,13 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
/*autorotate=*/false, /*use_color=*/true,
PdfRenderSettings::Mode::POSTSCRIPT_LEVEL2);
+#ifdef NTDDI_WIN10_VB // Windows 10.0.19041
+ RunSinglePagePdfToPostScriptConverterTest(pdf_settings, "bug_806746.pdf",
+ "bug_806746_new.emf");
+#else
RunSinglePagePdfToPostScriptConverterTest(pdf_settings, "bug_806746.pdf",
"bug_806746.emf");
+#endif
}
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
@@ -378,8 +393,13 @@ IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
kLetter200DpiRect, gfx::Point(0, 0), k200DpiSize,
/*autorotate=*/false, /*use_color=*/true,
PdfRenderSettings::Mode::POSTSCRIPT_LEVEL3);
+#ifdef NTDDI_WIN10_VB // Windows 10.0.19041
+ RunSinglePagePdfToPostScriptConverterTest(pdf_settings, "bug_806746.pdf",
+ "bug_806746_new.emf");
+#else
RunSinglePagePdfToPostScriptConverterTest(pdf_settings, "bug_806746.pdf",
"bug_806746.emf");
+#endif
}
IN_PROC_BROWSER_TEST_F(PdfToEmfConverterBrowserTest,
diff --git a/chromium/chrome/browser/printing/print_browsertest.cc b/chromium/chrome/browser/printing/print_browsertest.cc
index 3de2b60a683..cc9c1fde80c 100644
--- a/chromium/chrome/browser/printing/print_browsertest.cc
+++ b/chromium/chrome/browser/printing/print_browsertest.cc
@@ -27,6 +27,7 @@
#include "components/prefs/pref_service.h"
#include "components/printing/browser/print_composite_client.h"
#include "components/printing/browser/print_manager_utils.h"
+#include "components/printing/common/print.mojom-test-utils.h"
#include "components/printing/common/print.mojom.h"
#include "components/printing/common/print_messages.h"
#include "content/public/browser/browser_message_filter.h"
@@ -41,6 +42,7 @@
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "printing/mojom/print.mojom.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
#include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h"
@@ -78,6 +80,8 @@ class PrintPreviewObserver : PrintPreviewUI::TestDelegate {
}
}
+ content::WebContents* GetPrintPreviewDialog() { return preview_dialog_; }
+
private:
// PrintPreviewUI::TestDelegate:
void DidGetPreviewPageCount(int page_count) override {
@@ -90,6 +94,7 @@ class PrintPreviewObserver : PrintPreviewUI::TestDelegate {
CHECK(rendered_page_count_ <= total_page_count_);
if (rendered_page_count_ == total_page_count_ && run_loop_) {
run_loop_->Quit();
+ preview_dialog_ = preview_dialog;
if (queue_.has_value()) {
content::ExecuteScriptAsync(
@@ -106,6 +111,7 @@ class PrintPreviewObserver : PrintPreviewUI::TestDelegate {
base::Optional<content::DOMMessageQueue> queue_;
int total_page_count_ = 1;
int rendered_page_count_ = 0;
+ content::WebContents* preview_dialog_ = nullptr;
base::RunLoop* run_loop_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(PrintPreviewObserver);
@@ -129,8 +135,8 @@ class NupPrintingTestDelegate : public PrintingMessageFilter::TestDelegate {
params.dpi = gfx::Size(72, 72);
params.document_cookie = kDefaultDocumentCookie;
params.pages_per_sheet = 4;
- params.printed_doc_type =
- IsOopifEnabled() ? SkiaDocumentType::MSKP : SkiaDocumentType::PDF;
+ params.printed_doc_type = IsOopifEnabled() ? mojom::SkiaDocumentType::kMSKP
+ : mojom::SkiaDocumentType::kPDF;
return params;
}
@@ -138,66 +144,127 @@ class NupPrintingTestDelegate : public PrintingMessageFilter::TestDelegate {
DISALLOW_COPY_AND_ASSIGN(NupPrintingTestDelegate);
};
-class TestPrintFrameContentMsgFilter : public content::BrowserMessageFilter {
+class TestPrintRenderFrame
+ : public mojom::PrintRenderFrameInterceptorForTesting {
public:
- TestPrintFrameContentMsgFilter(int document_cookie,
- base::RepeatingClosure msg_callback)
- : content::BrowserMessageFilter(PrintMsgStart),
+ TestPrintRenderFrame(content::RenderFrameHost* frame_host,
+ content::WebContents* web_contents,
+ int document_cookie,
+ base::RepeatingClosure msg_callback)
+ : frame_host_(frame_host),
+ web_contents_(web_contents),
document_cookie_(document_cookie),
task_runner_(base::SequencedTaskRunnerHandle::Get()),
msg_callback_(msg_callback) {}
+ ~TestPrintRenderFrame() override = default;
- bool OnMessageReceived(const IPC::Message& message) override {
- // Only expect PrintHostMsg_DidPrintFrameContent message.
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(TestPrintFrameContentMsgFilter, message)
- IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintFrameContent, CheckMessage)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- EXPECT_TRUE(handled);
+ void OnDidPrintFrameContent(int document_cookie,
+ mojom::DidPrintContentParamsPtr param,
+ PrintFrameContentCallback callback) const {
+ EXPECT_EQ(document_cookie, document_cookie_);
+ ASSERT_TRUE(param->metafile_data_region.IsValid());
+ EXPECT_GT(param->metafile_data_region.GetSize(), 0U);
task_runner_->PostTask(FROM_HERE, msg_callback_);
- return true;
- }
-
- private:
- ~TestPrintFrameContentMsgFilter() override = default;
+ std::move(callback).Run(document_cookie, std::move(param));
+ }
+
+ void Bind(mojo::ScopedInterfaceEndpointHandle handle) {
+ receiver_.Bind(mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame>(
+ std::move(handle)));
+ }
+
+ // mojom::PrintRenderFrameInterceptorForTesting
+ mojom::PrintRenderFrame* GetForwardingInterface() override {
+ NOTREACHED();
+ return nullptr;
+ }
+ void PrintFrameContent(mojom::PrintFrameContentParamsPtr params,
+ PrintFrameContentCallback callback) override {
+ // Sends the printed result back.
+ mojom::DidPrintContentParamsPtr printed_frame_params =
+ mojom::DidPrintContentParams::New();
+ // Creates a small amount of region to avoid passing empty data to mojo.
+ constexpr size_t kSize = 10;
+ base::MappedReadOnlyRegion region_mapping =
+ base::ReadOnlySharedMemoryRegion::Create(kSize);
+ printed_frame_params->metafile_data_region =
+ std::move(region_mapping.region);
+ OnDidPrintFrameContent(params->document_cookie,
+ std::move(printed_frame_params),
+ std::move(callback));
+
+ auto* client = PrintCompositeClient::FromWebContents(web_contents_);
+ if (!client)
+ return;
- void CheckMessage(int document_cookie,
- const PrintHostMsg_DidPrintContent_Params& param) {
- EXPECT_EQ(document_cookie, document_cookie_);
- ASSERT_TRUE(param.metafile_data_region.IsValid());
- EXPECT_GT(param.metafile_data_region.GetSize(), 0U);
+ // Prints its children.
+ content::RenderFrameHost* child = ChildFrameAt(frame_host_, 0);
+ for (size_t i = 1; child; i++) {
+ if (child->GetSiteInstance() != frame_host_->GetSiteInstance()) {
+ client->PrintCrossProcessSubframe(gfx::Rect(), params->document_cookie,
+ child);
+ }
+ child = ChildFrameAt(frame_host_, i);
+ }
}
+ private:
+ content::RenderFrameHost* frame_host_;
+ content::WebContents* web_contents_;
const int document_cookie_;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
base::RepeatingClosure msg_callback_;
+ mojo::AssociatedReceiver<mojom::PrintRenderFrame> receiver_{this};
};
-class KillPrintFrameContentMsgFilter : public content::BrowserMessageFilter {
+class KillPrintRenderFrame
+ : public mojom::PrintRenderFrameInterceptorForTesting {
public:
- explicit KillPrintFrameContentMsgFilter(content::RenderProcessHost* rph)
- : content::BrowserMessageFilter(PrintMsgStart), rph_(rph) {}
+ explicit KillPrintRenderFrame(content::RenderProcessHost* rph) : rph_(rph) {}
+ ~KillPrintRenderFrame() override = default;
- bool OnMessageReceived(const IPC::Message& message) override {
- // Only handle PrintHostMsg_DidPrintFrameContent message.
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(KillPrintFrameContentMsgFilter, message)
- IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintFrameContent, KillRenderProcess)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
+ void OverrideBinderForTesting(content::RenderFrameHost* render_frame_host) {
+ render_frame_host->GetRemoteAssociatedInterfaces()
+ ->OverrideBinderForTesting(
+ mojom::PrintRenderFrame::Name_,
+ base::BindRepeating(&KillPrintRenderFrame::Bind,
+ base::Unretained(this)));
}
- private:
- ~KillPrintFrameContentMsgFilter() override = default;
-
void KillRenderProcess(int document_cookie,
- const PrintHostMsg_DidPrintContent_Params& param) {
+ mojom::DidPrintContentParamsPtr param,
+ PrintFrameContentCallback callback) const {
+ std::move(callback).Run(document_cookie, std::move(param));
rph_->Shutdown(0);
}
- content::RenderProcessHost* rph_;
+ void Bind(mojo::ScopedInterfaceEndpointHandle handle) {
+ receiver_.Bind(mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame>(
+ std::move(handle)));
+ }
+
+ // mojom::PrintRenderFrameInterceptorForTesting
+ mojom::PrintRenderFrame* GetForwardingInterface() override {
+ NOTREACHED();
+ return nullptr;
+ }
+ void PrintFrameContent(mojom::PrintFrameContentParamsPtr params,
+ PrintFrameContentCallback callback) override {
+ // Sends the printed result back.
+ const size_t kSize = 10;
+ mojom::DidPrintContentParamsPtr printed_frame_params =
+ mojom::DidPrintContentParams::New();
+ base::MappedReadOnlyRegion region_mapping =
+ base::ReadOnlySharedMemoryRegion::Create(kSize);
+ printed_frame_params->metafile_data_region =
+ std::move(region_mapping.region);
+ KillRenderProcess(params->document_cookie, std::move(printed_frame_params),
+ std::move(callback));
+ }
+
+ private:
+ content::RenderProcessHost* const rph_;
+ mojo::AssociatedReceiver<mojom::PrintRenderFrame> receiver_{this};
};
} // namespace
@@ -210,7 +277,6 @@ class PrintBrowserTest : public InProcessBrowserTest {
void SetUp() override {
num_expected_messages_ = 1; // By default, only wait on one message.
num_received_messages_ = 0;
- run_loop_.reset();
InProcessBrowserTest::SetUp();
}
@@ -246,23 +312,27 @@ class PrintBrowserTest : public InProcessBrowserTest {
num_expected_messages_ = num;
}
- void WaitUntilMessagesReceived() {
- run_loop_ = std::make_unique<base::RunLoop>();
- run_loop_->Run();
+ void WaitUntilCallbackReceived() {
+ base::RunLoop run_loop;
+ quit_callback_ = run_loop.QuitClosure();
+ run_loop.Run();
}
void CheckForQuit() {
- if (++num_received_messages_ == num_expected_messages_) {
- run_loop_->QuitWhenIdle();
- }
+ if (++num_received_messages_ != num_expected_messages_)
+ return;
+ if (quit_callback_)
+ std::move(quit_callback_).Run();
}
- void AddFilterForFrame(content::RenderFrameHost* frame_host) {
- auto filter = base::MakeRefCounted<TestPrintFrameContentMsgFilter>(
- kDefaultDocumentCookie,
- base::BindRepeating(&PrintBrowserTest::CheckForQuit,
- base::Unretained(this)));
- frame_host->GetProcess()->AddFilter(filter.get());
+ void CreateTestPrintRenderFrame(content::RenderFrameHost* frame_host,
+ content::WebContents* web_contents) {
+ frame_content_.emplace(
+ frame_host, std::make_unique<TestPrintRenderFrame>(
+ frame_host, web_contents, kDefaultDocumentCookie,
+ base::BindRepeating(&PrintBrowserTest::CheckForQuit,
+ base::Unretained(this))));
+ OverrideBinderForTesting(frame_host);
}
static mojom::PrintFrameContentParamsPtr GetDefaultPrintFrameParams() {
@@ -270,17 +340,34 @@ class PrintBrowserTest : public InProcessBrowserTest {
kDefaultDocumentCookie);
}
- static const mojo::AssociatedRemote<mojom::PrintRenderFrame>
- GetPrintRenderFrame(content::RenderFrameHost* rfh) {
- mojo::AssociatedRemote<mojom::PrintRenderFrame> remote;
- rfh->GetRemoteAssociatedInterfaces()->GetInterface(&remote);
- return remote;
+ const mojo::AssociatedRemote<mojom::PrintRenderFrame>& GetPrintRenderFrame(
+ content::RenderFrameHost* rfh) {
+ if (!remote_)
+ rfh->GetRemoteAssociatedInterfaces()->GetInterface(&remote_);
+ return remote_;
}
private:
+ TestPrintRenderFrame* GetFrameContent(content::RenderFrameHost* host) const {
+ auto iter = frame_content_.find(host);
+ return iter != frame_content_.end() ? iter->second.get() : nullptr;
+ }
+
+ void OverrideBinderForTesting(content::RenderFrameHost* render_frame_host) {
+ render_frame_host->GetRemoteAssociatedInterfaces()
+ ->OverrideBinderForTesting(
+ mojom::PrintRenderFrame::Name_,
+ base::BindRepeating(
+ &TestPrintRenderFrame::Bind,
+ base::Unretained(GetFrameContent(render_frame_host))));
+ }
+
unsigned int num_expected_messages_;
unsigned int num_received_messages_;
- std::unique_ptr<base::RunLoop> run_loop_;
+ base::OnceClosure quit_callback_;
+ mojo::AssociatedRemote<mojom::PrintRenderFrame> remote_;
+ std::map<content::RenderFrameHost*, std::unique_ptr<TestPrintRenderFrame>>
+ frame_content_;
};
class SitePerProcessPrintBrowserTest : public PrintBrowserTest {
@@ -444,7 +531,7 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, SelectionContainsIframe) {
// Printing frame content for the main frame of a generic webpage.
// This test passes when the printed result is sent back and checked in
-// TestPrintFrameContentMsgFilter::CheckMessage().
+// TestPrintRenderFrame::OnDidPrintFrameContent().
IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintFrameContent) {
ASSERT_TRUE(embedded_test_server()->Started());
GURL url(embedded_test_server()->GetURL("/printing/test1.html"));
@@ -453,18 +540,18 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintFrameContent) {
content::WebContents* original_contents =
browser()->tab_strip_model()->GetActiveWebContents();
content::RenderFrameHost* rfh = original_contents->GetMainFrame();
- AddFilterForFrame(rfh);
-
- GetPrintRenderFrame(rfh)->PrintFrameContent(GetDefaultPrintFrameParams());
+ CreateTestPrintRenderFrame(rfh, original_contents);
+ GetPrintRenderFrame(rfh)->PrintFrameContent(GetDefaultPrintFrameParams(),
+ base::DoNothing());
// The printed result will be received and checked in
- // TestPrintFrameContentMsgFilter.
- WaitUntilMessagesReceived();
+ // TestPrintRenderFrame.
+ WaitUntilCallbackReceived();
}
// Printing frame content for a cross-site iframe.
// This test passes when the iframe responds to the print message.
-// The response is checked in TestPrintFrameContentMsgFilter::CheckMessage().
+// The response is checked in TestPrintRenderFrame::OnDidPrintFrameContent().
IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeContent) {
ASSERT_TRUE(embedded_test_server()->Started());
GURL url(
@@ -477,21 +564,20 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeContent) {
content::RenderFrameHost* test_frame = original_contents->GetAllFrames()[1];
ASSERT_TRUE(test_frame);
- AddFilterForFrame(test_frame);
-
+ CreateTestPrintRenderFrame(test_frame, original_contents);
GetPrintRenderFrame(test_frame)
- ->PrintFrameContent(GetDefaultPrintFrameParams());
+ ->PrintFrameContent(GetDefaultPrintFrameParams(), base::DoNothing());
// The printed result will be received and checked in
- // TestPrintFrameContentMsgFilter.
- WaitUntilMessagesReceived();
+ // TestPrintRenderFrame.
+ WaitUntilCallbackReceived();
}
// Printing frame content with a cross-site iframe which also has a cross-site
// iframe. The site reference chain is a.com --> b.com --> c.com.
// This test passes when both cross-site frames are printed and their
// responses which are checked in
-// TestPrintFrameContentMsgFilter::CheckMessage().
+// TestPrintRenderFrame::OnDidPrintFrameContent().
IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeChain) {
ASSERT_TRUE(embedded_test_server()->Started());
GURL url(embedded_test_server()->GetURL(
@@ -518,19 +604,19 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeChain) {
ASSERT_NE(grandchild_frame->GetProcess(), main_frame->GetProcess());
}
- AddFilterForFrame(main_frame);
+ CreateTestPrintRenderFrame(main_frame, original_contents);
if (oopif_enabled) {
- AddFilterForFrame(child_frame);
- AddFilterForFrame(grandchild_frame);
+ CreateTestPrintRenderFrame(child_frame, original_contents);
+ CreateTestPrintRenderFrame(grandchild_frame, original_contents);
}
GetPrintRenderFrame(main_frame)
- ->PrintFrameContent(GetDefaultPrintFrameParams());
+ ->PrintFrameContent(GetDefaultPrintFrameParams(), base::DoNothing());
// The printed result will be received and checked in
- // TestPrintFrameContentMsgFilter.
+ // TestPrintRenderFrame.
SetNumExpectedMessages(oopif_enabled ? 3 : 1);
- WaitUntilMessagesReceived();
+ WaitUntilCallbackReceived();
}
// Printing frame content with a cross-site iframe who also has a cross site
@@ -538,7 +624,7 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeChain) {
// The site reference loop is a.com --> b.com --> a.com.
// This test passes when both cross-site frames are printed and send back
// responses which are checked in
-// TestPrintFrameContentMsgFilter::CheckMessage().
+// TestPrintRenderFrame::OnDidPrintFrameContent().
IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeABA) {
ASSERT_TRUE(embedded_test_server()->Started());
GURL url(embedded_test_server()->GetURL(
@@ -564,17 +650,19 @@ IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PrintSubframeABA) {
// enabled, they will be in the same process.
ASSERT_EQ(grandchild_frame->GetProcess(), main_frame->GetProcess());
- AddFilterForFrame(main_frame);
- if (oopif_enabled)
- AddFilterForFrame(child_frame);
+ CreateTestPrintRenderFrame(main_frame, original_contents);
+ if (oopif_enabled) {
+ CreateTestPrintRenderFrame(child_frame, original_contents);
+ CreateTestPrintRenderFrame(grandchild_frame, original_contents);
+ }
GetPrintRenderFrame(main_frame)
- ->PrintFrameContent(GetDefaultPrintFrameParams());
+ ->PrintFrameContent(GetDefaultPrintFrameParams(), base::DoNothing());
// The printed result will be received and checked in
- // TestPrintFrameContentMsgFilter.
+ // TestPrintRenderFrame.
SetNumExpectedMessages(oopif_enabled ? 3 : 1);
- WaitUntilMessagesReceived();
+ WaitUntilCallbackReceived();
}
// Printing preview a simple webpage when site per process is enabled.
@@ -635,10 +723,9 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessPrintBrowserTest,
ASSERT_TRUE(subframe);
auto* subframe_rph = subframe->GetProcess();
- auto filter =
- base::MakeRefCounted<KillPrintFrameContentMsgFilter>(subframe_rph);
+ KillPrintRenderFrame frame_content(subframe_rph);
+ frame_content.OverrideBinderForTesting(subframe);
content::ScopedAllowRendererCrashes allow_renderer_crashes(subframe_rph);
- subframe_rph->AddFilter(filter.get());
PrintAndWaitUntilPreviewIsReady(/*print_only_selection=*/false);
}
@@ -762,4 +849,57 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessPrintBrowserTest, MultipagePrint) {
PrintAndWaitUntilPreviewIsReadyAndLoaded(/*print_only_selection=*/false);
}
+IN_PROC_BROWSER_TEST_F(PrintBrowserTest, PDFPluginNotKeyboardFocusable) {
+ ASSERT_TRUE(embedded_test_server()->Started());
+ GURL url(embedded_test_server()->GetURL("/printing/multipage.html"));
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ PrintPreviewObserver print_preview_observer(/*wait_for_loaded=*/true);
+ StartPrint(browser()->tab_strip_model()->GetActiveWebContents(),
+ /*print_renderer=*/mojo::NullAssociatedRemote(),
+ /*print_preview_disabled=*/false, /*print_only_selection=*/false);
+ print_preview_observer.WaitUntilPreviewIsReady();
+
+ content::WebContents* preview_dialog =
+ print_preview_observer.GetPrintPreviewDialog();
+ ASSERT_TRUE(preview_dialog);
+
+ // The script will ensure we return the id of <zoom-out-button> when
+ // focused. Focus the element after PDF plugin in tab order.
+ const char kScript[] = R"(
+ const button = document.getElementsByTagName('print-preview-app')[0]
+ .$['previewArea']
+ .$$('iframe')
+ .contentDocument.querySelector('pdf-viewer-pp')
+ .shadowRoot.querySelector('#zoom-toolbar')
+ .$['zoom-out-button'];
+ button.addEventListener('focus', (e) => {
+ window.domAutomationController.send(e.target.id);
+ });
+
+ const select_tag = document.getElementsByTagName('print-preview-app')[0]
+ .$['sidebar']
+ .$['destinationSettings']
+ .$['destinationSelect']
+ .$$('select');
+ select_tag.addEventListener('focus', () => {
+ window.domAutomationController.send(true);
+ });
+ select_tag.focus();)";
+ bool success = false;
+ ASSERT_TRUE(
+ content::ExecuteScriptAndExtractBool(preview_dialog, kScript, &success));
+ ASSERT_TRUE(success);
+
+ // Simulate a <shift-tab> press and wait for a focus message.
+ content::DOMMessageQueue msg_queue;
+ SimulateKeyPress(preview_dialog, ui::DomKey::TAB, ui::DomCode::TAB,
+ ui::VKEY_TAB, false, true, false, false);
+ std::string reply;
+ ASSERT_TRUE(msg_queue.WaitForMessage(&reply));
+ // Pressing <shift-tab> should focus the last toolbar element
+ // (zoom-out-button) instead of PDF plugin.
+ EXPECT_EQ("\"zoom-out-button\"", reply);
+}
+
} // namespace printing
diff --git a/chromium/chrome/browser/printing/print_error_dialog.cc b/chromium/chrome/browser/printing/print_error_dialog.cc
index 1f95636f43a..15ffdb16ed4 100644
--- a/chromium/chrome/browser/printing/print_error_dialog.cc
+++ b/chromium/chrome/browser/printing/print_error_dialog.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/printing/print_error_dialog.h"
#include "base/bind.h"
-#include "base/task/post_task.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/simple_message_box.h"
@@ -28,6 +27,6 @@ void ShowPrintErrorDialogTask() {
void ShowPrintErrorDialog() {
// Nested loop may destroy caller.
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&ShowPrintErrorDialogTask));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&ShowPrintErrorDialogTask));
}
diff --git a/chromium/chrome/browser/printing/print_job.cc b/chromium/chrome/browser/printing/print_job.cc
index 806e3e3a72e..668a14bff46 100644
--- a/chromium/chrome/browser/printing/print_job.cc
+++ b/chromium/chrome/browser/printing/print_job.cc
@@ -248,8 +248,8 @@ bool PrintJob::FlushJob(base::TimeDelta timeout) {
base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed);
quit_closure_ = loop.QuitClosure();
- base::PostDelayedTask(FROM_HERE, {content::BrowserThread::UI},
- loop.QuitClosure(), timeout);
+ content::GetUIThreadTaskRunner({})->PostDelayedTask(
+ FROM_HERE, loop.QuitClosure(), timeout);
loop.Run();
@@ -515,8 +515,8 @@ void PrintJob::OnNotifyPrintJobEvent(const JobEventDetails& event_details) {
}
case JobEventDetails::DOC_DONE: {
// This will call Stop() and broadcast a JOB_DONE message.
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&PrintJob::OnDocumentDone, this));
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintJob::OnDocumentDone, this));
break;
}
#if defined(OS_WIN)
@@ -573,9 +573,8 @@ void PrintJob::ControlledWorkerShutdown() {
// Delay shutdown until the worker terminates. We want this code path
// to wait on the thread to quit before continuing.
if (worker_->IsRunning()) {
- base::PostDelayedTask(
- FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&PrintJob::ControlledWorkerShutdown, this),
+ content::GetUIThreadTaskRunner({})->PostDelayedTask(
+ FROM_HERE, base::BindOnce(&PrintJob::ControlledWorkerShutdown, this),
base::TimeDelta::FromMilliseconds(100));
return;
}
diff --git a/chromium/chrome/browser/printing/print_job_manager.h b/chromium/chrome/browser/printing/print_job_manager.h
index e66e7f1ae21..bdeba8404b7 100644
--- a/chromium/chrome/browser/printing/print_job_manager.h
+++ b/chromium/chrome/browser/printing/print_job_manager.h
@@ -9,7 +9,6 @@
#include <set>
#include <vector>
-#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
diff --git a/chromium/chrome/browser/printing/print_job_worker.cc b/chromium/chrome/browser/printing/print_job_worker.cc
index 9122bbf4f15..52efa2037a3 100644
--- a/chromium/chrome/browser/printing/print_job_worker.cc
+++ b/chromium/chrome/browser/printing/print_job_worker.cc
@@ -14,7 +14,6 @@
#include "base/compiler_specific.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
-#include "base/task/post_task.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/values.h"
#include "build/build_config.h"
@@ -169,14 +168,14 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings,
// When we delegate to a destination, we don't ask the user for settings.
// TODO(mad): Ask the destination for settings.
if (ask_user_for_settings) {
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrintJobWorker::GetSettingsWithUI,
base::Unretained(this), document_page_count,
has_selection, is_scripted, std::move(callback)));
} else {
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(&PrintJobWorker::UseDefaultSettings,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintJobWorker::UseDefaultSettings,
base::Unretained(this), std::move(callback)));
}
}
@@ -185,8 +184,8 @@ void PrintJobWorker::SetSettings(base::Value new_settings,
SettingsCallback callback) {
DCHECK(task_runner_->RunsTasksInCurrentSequence());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(&PrintJobWorker::UpdatePrintSettings,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintJobWorker::UpdatePrintSettings,
base::Unretained(this), std::move(new_settings),
std::move(callback)));
}
@@ -197,8 +196,8 @@ void PrintJobWorker::SetSettingsFromPOD(
SettingsCallback callback) {
DCHECK(task_runner_->RunsTasksInCurrentSequence());
- base::PostTask(FROM_HERE, {BrowserThread::UI},
- base::BindOnce(&PrintJobWorker::UpdatePrintSettingsFromPOD,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintJobWorker::UpdatePrintSettingsFromPOD,
base::Unretained(this), std::move(new_settings),
std::move(callback)));
}
@@ -222,6 +221,18 @@ void PrintJobWorker::UpdatePrintSettings(base::Value new_settings,
std::string printer_name = *new_settings.FindStringKey(kSettingDeviceName);
crash_key = std::make_unique<crash_keys::ScopedPrinterInfo>(
print_backend->GetPrinterDriverInfo(printer_name));
+
+#if defined(OS_LINUX) && defined(USE_CUPS) && !defined(OS_CHROMEOS)
+ PrinterBasicInfo basic_info;
+ if (print_backend->GetPrinterBasicInfo(printer_name, &basic_info)) {
+ base::Value advanced_settings(base::Value::Type::DICTIONARY);
+ for (const auto& pair : basic_info.options)
+ advanced_settings.SetStringKey(pair.first, pair.second);
+
+ new_settings.SetKey(kSettingAdvancedSettings,
+ std::move(advanced_settings));
+ }
+#endif // defined(OS_LINUX) && defined(USE_CUPS) && !defined(OS_CHROMEOS)
}
PrintingContext::Result result;
@@ -292,7 +303,15 @@ void PrintJobWorker::GetSettingsWithUI(int document_page_count,
}
void PrintJobWorker::UseDefaultSettings(SettingsCallback callback) {
- PrintingContext::Result result = printing_context_->UseDefaultSettings();
+ PrintingContext::Result result;
+ {
+#if defined(OS_WIN)
+ // Blocking is needed here because Windows printer drivers are oftentimes
+ // not thread-safe and have to be accessed on the UI thread.
+ base::ScopedAllowBlocking allow_blocking;
+#endif
+ result = printing_context_->UseDefaultSettings();
+ }
GetSettingsDone(std::move(callback), result);
}
diff --git a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
index 84818167bce..3fadaba3336 100644
--- a/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chromium/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -256,7 +256,7 @@ void PrintPreviewDialogController::PrintPreview(WebContents* initiator) {
ModuleDatabase::DisableThirdPartyBlocking();
#endif
- if (initiator->ShowingInterstitialPage() || initiator->IsCrashed())
+ if (initiator->IsCrashed())
return;
PrintPreviewDialogController* dialog_controller = GetInstance();
diff --git a/chromium/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc b/chromium/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
index a76b50bba43..86b77391c64 100644
--- a/chromium/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
+++ b/chromium/chrome/browser/printing/print_preview_dialog_controller_browsertest.cc
@@ -206,16 +206,10 @@ class PrintPreviewDialogControllerBrowserTest : public InProcessBrowserTest {
DISALLOW_COPY_AND_ASSIGN(PrintPreviewDialogControllerBrowserTest);
};
-// Flaky on Linux: crbug.com/1021545
-#if defined(OS_LINUX)
-#define MAYBE_NavigateFromInitiatorTab DISABLED_NavigateFromInitiatorTab
-#else
-#define MAYBE_NavigateFromInitiatorTab NavigateFromInitiatorTab
-#endif
// Test to verify that when a initiator navigates, we can create a new preview
// dialog for the new tab contents.
IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
- MAYBE_NavigateFromInitiatorTab) {
+ NavigateFromInitiatorTab) {
// Print for the first time.
PrintPreview();
@@ -242,16 +236,10 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
EXPECT_TRUE(new_preview_dialog);
}
-// Flaky on Linux: crbug.com/1021545
-#if defined(OS_LINUX)
-#define MAYBE_ReloadInitiatorTab DISABLED_ReloadInitiatorTab
-#else
-#define MAYBE_ReloadInitiatorTab ReloadInitiatorTab
-#endif
// Test to verify that after reloading the initiator, it creates a new print
// preview dialog.
IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
- MAYBE_ReloadInitiatorTab) {
+ ReloadInitiatorTab) {
// Print for the first time.
PrintPreview();
@@ -282,16 +270,10 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
EXPECT_TRUE(new_preview_dialog);
}
-// Flaky on Linux: crbug.com/1021545
-#if defined(OS_LINUX)
-#define MAYBE_PdfPluginDisabled DISABLED_PdfPluginDisabled
-#else
-#define MAYBE_PdfPluginDisabled PdfPluginDisabled
-#endif
// Test to verify that after print preview works even when the PDF plugin is
// disabled for webpages.
IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
- MAYBE_PdfPluginDisabled) {
+ PdfPluginDisabled) {
// Make sure plugins are loaded.
{
base::RunLoop run_loop;
@@ -355,14 +337,8 @@ const std::vector<task_manager::WebContentsTag*>& GetTrackedTags() {
} // namespace
-// Flaky on Linux: crbug.com/1021545
-#if defined(OS_LINUX)
-#define MAYBE_TaskManagementTest DISABLED_TaskManagementTest
-#else
-#define MAYBE_TaskManagementTest TaskManagementTest
-#endif
IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
- MAYBE_TaskManagementTest) {
+ TaskManagementTest) {
// This test starts with two tabs open.
EXPECT_EQ(2U, GetTrackedTags().size());
@@ -403,14 +379,8 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
base::CompareCase::INSENSITIVE_ASCII));
}
-// Flaky on Linux: crbug.com/1021545
-#if defined(OS_LINUX)
-#define MAYBE_PrintPreviewPdfAccessibility DISABLED_PrintPreviewPdfAccessibility
-#else
-#define MAYBE_PrintPreviewPdfAccessibility PrintPreviewPdfAccessibility
-#endif
IN_PROC_BROWSER_TEST_F(PrintPreviewDialogControllerBrowserTest,
- MAYBE_PrintPreviewPdfAccessibility) {
+ PrintPreviewPdfAccessibility) {
content::BrowserAccessibilityState::GetInstance()->EnableAccessibility();
ui_test_utils::NavigateToURL(browser(), GURL("data:text/html,HelloWorld"));
PrintPreview();
diff --git a/chromium/chrome/browser/printing/print_preview_dialog_controller_unittest.cc b/chromium/chrome/browser/printing/print_preview_dialog_controller_unittest.cc
index 674f46509eb..ed7636e0eee 100644
--- a/chromium/chrome/browser/printing/print_preview_dialog_controller_unittest.cc
+++ b/chromium/chrome/browser/printing/print_preview_dialog_controller_unittest.cc
@@ -199,7 +199,7 @@ TEST_F(PrintPreviewDialogControllerUnitTest, CloseDialogOnNavigation) {
// Two similar URLs (same webpage, different URL fragment/query)
// Gmail navigates from fragment to query when opening an email to print.
GURL tiger("https://www.google.com/#q=tiger");
- GURL tiger_barb("https://www.google.com/?q=tiger+barb");
+ GURL tiger_barb("https://www.google.com/#?q=tiger+barb");
// Set up by opening a new tab and getting web contents
EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
@@ -275,12 +275,13 @@ TEST_F(PrintPreviewDialogControllerUnitTest, CloseDialogOnNavigation) {
// Try to simulate Gmail navigation: Navigate to an existing page (via
// Forward) but modify the navigation type while pending to look like an
// address bar + typed transition (like Gmail auto navigation)
- content::NavigationController& nav_controller = web_contents->GetController();
- nav_controller.GoForward();
- nav_controller.GetPendingEntry()->SetTransitionType(ui::PageTransitionFromInt(
- ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR));
- CommitPendingLoad(&nav_controller);
-
+ std::unique_ptr<content::NavigationSimulator> forward_nav =
+ content::NavigationSimulator::CreateHistoryNavigation(1, web_contents);
+ forward_nav->Start();
+ web_contents->GetController().GetPendingEntry()->SetTransitionType(
+ ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
+ ui::PAGE_TRANSITION_FROM_ADDRESS_BAR));
+ forward_nav->Commit();
// Navigation successful
EXPECT_EQ(tiger_barb, web_contents->GetLastCommittedURL());
diff --git a/chromium/chrome/browser/printing/print_preview_message_handler.cc b/chromium/chrome/browser/printing/print_preview_message_handler.cc
index 124a5736168..2c7559cf28d 100644
--- a/chromium/chrome/browser/printing/print_preview_message_handler.cc
+++ b/chromium/chrome/browser/printing/print_preview_message_handler.cc
@@ -14,7 +14,6 @@
#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_memory.h"
-#include "base/task/post_task.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/printing/pdf_nup_converter_client.h"
#include "chrome/browser/printing/print_job_manager.h"
@@ -24,6 +23,7 @@
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
#include "components/printing/browser/print_composite_client.h"
#include "components/printing/browser/print_manager_utils.h"
+#include "components/printing/common/print.mojom.h"
#include "components/printing/common/print_messages.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
@@ -32,6 +32,7 @@
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
+#include "printing/mojom/print.mojom.h"
#include "printing/nup_parameters.h"
#include "printing/page_setup.h"
#include "printing/print_job_constants.h"
@@ -54,8 +55,8 @@ void StopWorker(int document_cookie) {
std::unique_ptr<PrinterQuery> printer_query =
queue->PopPrinterQuery(document_cookie);
if (printer_query) {
- base::PostTask(
- FROM_HERE, {BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrinterQuery::StopWorker, std::move(printer_query)));
}
}
@@ -109,7 +110,7 @@ void PrintPreviewMessageHandler::OnRequestPrintPreview(
}
void PrintPreviewMessageHandler::OnDidStartPreview(
- const PrintHostMsg_DidStartPreview_Params& params,
+ const mojom::DidStartPreviewParams& params,
const PrintHostMsg_PreviewIds& ids) {
if (params.page_count <= 0 || params.pages_to_render.empty()) {
NOTREACHED();
@@ -175,7 +176,7 @@ void PrintPreviewMessageHandler::OnDidPreviewPage(
const PrintHostMsg_DidPreviewPage_Params& params,
const PrintHostMsg_PreviewIds& ids) {
int page_number = params.page_number;
- const PrintHostMsg_DidPrintContent_Params& content = params.content;
+ const mojom::DidPrintContentParams& content = params.content;
if (page_number < FIRST_PAGE_INDEX || !content.metafile_data_region.IsValid())
return;
@@ -268,7 +269,7 @@ void PrintPreviewMessageHandler::OnMetafileReadyForPrinting(
}
void PrintPreviewMessageHandler::OnDidGetDefaultPageLayout(
- const PageSizeMargins& page_layout_in_points,
+ const mojom::PageSizeMargins& page_layout_in_points,
const gfx::Rect& printable_area_in_points,
bool has_custom_page_size_style,
const PrintHostMsg_PreviewIds& ids) {
@@ -281,29 +282,6 @@ void PrintPreviewMessageHandler::OnDidGetDefaultPageLayout(
has_custom_page_size_style, ids.request_id);
}
-void PrintPreviewMessageHandler::OnPrintPreviewCancelled(
- int document_cookie,
- const PrintHostMsg_PreviewIds& ids) {
- // Always need to stop the worker.
- StopWorker(document_cookie);
-
- // Notify UI
- PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
- if (!print_preview_ui)
- return;
- print_preview_ui->OnPrintPreviewCancelled(ids.request_id);
-}
-
-void PrintPreviewMessageHandler::OnInvalidPrinterSettings(
- int document_cookie,
- const PrintHostMsg_PreviewIds& ids) {
- StopWorker(document_cookie);
- PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
- if (!print_preview_ui)
- return;
- print_preview_ui->OnInvalidPrinterSettings(ids.request_id);
-}
-
void PrintPreviewMessageHandler::NotifyUIPreviewPageReady(
PrintPreviewUI* print_preview_ui,
int page_number,
@@ -342,6 +320,10 @@ void PrintPreviewMessageHandler::OnCompositePdfPageDone(
mojom::PrintCompositor::Status status,
base::ReadOnlySharedMemoryRegion region) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ if (PrintPreviewUI::ShouldCancelRequest(ids))
+ return;
+
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (status != mojom::PrintCompositor::Status::kSuccess) {
DLOG(ERROR) << "Compositing pdf failed with error " << status;
@@ -420,6 +402,10 @@ void PrintPreviewMessageHandler::OnCompositeToPdfDone(
mojom::PrintCompositor::Status status,
base::ReadOnlySharedMemoryRegion region) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ if (PrintPreviewUI::ShouldCancelRequest(ids))
+ return;
+
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (status != mojom::PrintCompositor::Status::kSuccess) {
DLOG(ERROR) << "Completion of document to pdf failed with error " << status;
@@ -460,6 +446,10 @@ void PrintPreviewMessageHandler::OnPrepareForDocumentToPdfDone(
const PrintHostMsg_PreviewIds& ids,
mojom::PrintCompositor::Status status) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ if (PrintPreviewUI::ShouldCancelRequest(ids))
+ return;
+
if (status != mojom::PrintCompositor::Status::kSuccess) {
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (print_preview_ui)
@@ -511,10 +501,6 @@ bool PrintPreviewMessageHandler::OnMessageReceived(
OnDidPrepareForDocumentToPdf)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDefaultPageLayout,
OnDidGetDefaultPageLayout)
- IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewCancelled,
- OnPrintPreviewCancelled)
- IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewInvalidPrinterSettings,
- OnInvalidPrinterSettings)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
diff --git a/chromium/chrome/browser/printing/print_preview_message_handler.h b/chromium/chrome/browser/printing/print_preview_message_handler.h
index d1354decb3d..a2a0727e760 100644
--- a/chromium/chrome/browser/printing/print_preview_message_handler.h
+++ b/chromium/chrome/browser/printing/print_preview_message_handler.h
@@ -9,13 +9,14 @@
#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/weak_ptr.h"
#include "chrome/services/printing/public/mojom/pdf_nup_converter.mojom.h"
+#include "components/printing/common/print.mojom-forward.h"
#include "components/services/print_compositor/public/mojom/print_compositor.mojom.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
+#include "printing/mojom/print.mojom-forward.h"
struct PrintHostMsg_DidPreviewDocument_Params;
struct PrintHostMsg_DidPreviewPage_Params;
-struct PrintHostMsg_DidStartPreview_Params;
struct PrintHostMsg_PreviewIds;
struct PrintHostMsg_RequestPrintPreview_Params;
@@ -35,7 +36,6 @@ class Rect;
namespace printing {
class PrintPreviewUI;
-struct PageSizeMargins;
// Manages the print preview handling for a WebContents.
class PrintPreviewMessageHandler
@@ -65,11 +65,12 @@ class PrintPreviewMessageHandler
void OnRequestPrintPreview(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_RequestPrintPreview_Params& params);
- void OnDidGetDefaultPageLayout(const PageSizeMargins& page_layout_in_points,
- const gfx::Rect& printable_area_in_points,
- bool has_custom_page_size_style,
- const PrintHostMsg_PreviewIds& ids);
- void OnDidStartPreview(const PrintHostMsg_DidStartPreview_Params& params,
+ void OnDidGetDefaultPageLayout(
+ const mojom::PageSizeMargins& page_layout_in_points,
+ const gfx::Rect& printable_area_in_points,
+ bool has_custom_page_size_style,
+ const PrintHostMsg_PreviewIds& ids);
+ void OnDidStartPreview(const mojom::DidStartPreviewParams& params,
const PrintHostMsg_PreviewIds& ids);
void OnDidPrepareForDocumentToPdf(int document_cookie,
const PrintHostMsg_PreviewIds& ids);
@@ -80,10 +81,6 @@ class PrintPreviewMessageHandler
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPreviewDocument_Params& params,
const PrintHostMsg_PreviewIds& ids);
- void OnPrintPreviewCancelled(int document_cookie,
- const PrintHostMsg_PreviewIds& ids);
- void OnInvalidPrinterSettings(int document_cookie,
- const PrintHostMsg_PreviewIds& ids);
void NotifyUIPreviewPageReady(
PrintPreviewUI* print_preview_ui,
diff --git a/chromium/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc b/chromium/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
index 84ff5278fb3..a5ac123c871 100644
--- a/chromium/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
+++ b/chromium/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
@@ -39,6 +39,7 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
+#include "components/printing/common/print.mojom.h"
#include "components/printing/common/print_messages.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui_message_handler.h"
@@ -269,7 +270,7 @@ class PrintPreviewObserver : public WebContentsObserver {
// Called when the observer gets the IPC message with the preview document's
// properties.
- void OnDidStartPreview(const PrintHostMsg_DidStartPreview_Params& params,
+ void OnDidStartPreview(const mojom::DidStartPreviewParams& params,
const PrintHostMsg_PreviewIds& ids) {
WebContents* web_contents = GetDialog();
ASSERT_TRUE(web_contents);
diff --git a/chromium/chrome/browser/printing/print_view_manager.cc b/chromium/chrome/browser/printing/print_view_manager.cc
index d31f5ca49b4..7c28f751858 100644
--- a/chromium/chrome/browser/printing/print_view_manager.cc
+++ b/chromium/chrome/browser/printing/print_view_manager.cc
@@ -89,8 +89,8 @@ bool PrintViewManager::PrintForSystemDialogNow(
SetPrintingRFH(print_preview_rfh_);
- // Don't print / print preview interstitials or crashed tabs.
- if (IsInterstitialOrCrashed())
+ // Don't print / print preview crashed tabs.
+ if (IsCrashed())
return false;
GetPrintRenderFrame(print_preview_rfh_)->PrintForSystemDialog();
@@ -203,8 +203,8 @@ bool PrintViewManager::PrintPreview(
if (print_preview_state_ != NOT_PREVIEWING)
return false;
- // Don't print / print preview interstitials or crashed tabs.
- if (IsInterstitialOrCrashed())
+ // Don't print / print preview crashed tabs.
+ if (IsCrashed())
return false;
GetPrintRenderFrame(rfh)->InitiatePrintPreview(std::move(print_renderer),
diff --git a/chromium/chrome/browser/printing/print_view_manager_base.cc b/chromium/chrome/browser/printing/print_view_manager_base.cc
index a058d93622f..8a743d0dd74 100644
--- a/chromium/chrome/browser/printing/print_view_manager_base.cc
+++ b/chromium/chrome/browser/printing/print_view_manager_base.cc
@@ -17,7 +17,6 @@
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/utf_string_conversions.h"
-#include "base/task/post_task.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/timer/timer.h"
#include "build/build_config.h"
@@ -36,6 +35,7 @@
#include "components/prefs/pref_service.h"
#include "components/printing/browser/print_composite_client.h"
#include "components/printing/browser/print_manager_utils.h"
+#include "components/printing/common/print.mojom.h"
#include "components/printing/common/print_messages.h"
#include "components/services/print_compositor/public/cpp/print_service_mojo_types.h"
#include "content/public/browser/browser_task_traits.h"
@@ -85,8 +85,8 @@ void OnPrintSettingsDoneWrapper(PrintSettingsCallback settings_callback,
std::unique_ptr<PrinterQuery> query) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- base::PostTask(
- FROM_HERE, {content::BrowserThread::UI},
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(std::move(settings_callback), std::move(query)));
}
@@ -132,8 +132,8 @@ PrintViewManagerBase::~PrintViewManagerBase() {
bool PrintViewManagerBase::PrintNow(content::RenderFrameHost* rfh) {
DisconnectFromCurrentPrintJob();
- // Don't print / print preview interstitials or crashed tabs.
- if (IsInterstitialOrCrashed())
+ // Don't print / print preview crashed tabs.
+ if (IsCrashed())
return false;
SetPrintingRFH(rfh);
@@ -153,8 +153,8 @@ void PrintViewManagerBase::PrintForPrintPreview(
weak_ptr_factory_.GetWeakPtr(), print_data,
job_settings.FindIntKey(kSettingPreviewPageCount).value(),
std::move(callback));
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(CreateQueryWithSettings, std::move(job_settings),
rfh->GetProcess()->GetID(), rfh->GetRoutingID(), queue_,
std::move(settings_callback)));
@@ -200,8 +200,8 @@ void PrintViewManagerBase::OnPrintSettingsDone(
if (printer_query->last_status() == PrintingContext::CANCEL) {
queue_->QueuePrinterQuery(std::move(printer_query));
#if defined(OS_WIN)
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&PrintViewManagerBase::SystemDialogCancelled,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintViewManagerBase::SystemDialogCancelled,
weak_ptr_factory_.GetWeakPtr()));
#endif
std::move(callback).Run(base::Value());
@@ -209,8 +209,8 @@ void PrintViewManagerBase::OnPrintSettingsDone(
}
if (!printer_query->cookie() || !printer_query->settings().dpi()) {
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrinterQuery::StopWorker, std::move(printer_query)));
std::move(callback).Run(base::Value("Update settings failed"));
return;
@@ -220,8 +220,8 @@ void PrintViewManagerBase::OnPrintSettingsDone(
// OnDidGetPrintedPagesCount().
int cookie = printer_query->cookie();
queue_->QueuePrinterQuery(std::move(printer_query));
- base::PostTask(FROM_HERE, {content::BrowserThread::UI},
- base::BindOnce(&PrintViewManagerBase::StartLocalPrintJob,
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&PrintViewManagerBase::StartLocalPrintJob,
weak_ptr_factory_.GetWeakPtr(), print_data,
page_count, cookie, std::move(callback)));
}
@@ -323,7 +323,7 @@ void PrintViewManagerBase::OnDidPrintDocument(
if (!PrintJobHasDocument(params.document_cookie))
return;
- const PrintHostMsg_DidPrintContent_Params& content = params.content;
+ const mojom::DidPrintContentParams& content = params.content;
if (!content.metafile_data_region.IsValid()) {
NOTREACHED() << "invalid memory handle";
web_contents()->Stop();
@@ -703,16 +703,15 @@ bool PrintViewManagerBase::OpportunisticallyCreatePrintJob(int cookie) {
return true;
}
-bool PrintViewManagerBase::IsInterstitialOrCrashed() {
- return web_contents()->ShowingInterstitialPage() ||
- web_contents()->IsCrashed();
+bool PrintViewManagerBase::IsCrashed() {
+ return web_contents()->IsCrashed();
}
bool PrintViewManagerBase::PrintNowInternal(
content::RenderFrameHost* rfh,
std::unique_ptr<IPC::Message> message) {
- // Don't print / print preview interstitials or crashed tabs.
- if (IsInterstitialOrCrashed())
+ // Don't print / print preview crashed tabs.
+ if (IsCrashed())
return false;
return rfh->Send(message.release());
}
@@ -737,8 +736,8 @@ void PrintViewManagerBase::ReleasePrinterQuery() {
std::unique_ptr<PrinterQuery> printer_query = queue_->PopPrinterQuery(cookie);
if (!printer_query)
return;
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrinterQuery::StopWorker, std::move(printer_query)));
}
diff --git a/chromium/chrome/browser/printing/print_view_manager_base.h b/chromium/chrome/browser/printing/print_view_manager_base.h
index 3d434244927..94b65e85561 100644
--- a/chromium/chrome/browser/printing/print_view_manager_base.h
+++ b/chromium/chrome/browser/printing/print_view_manager_base.h
@@ -73,9 +73,8 @@ class PrintViewManagerBase : public content::NotificationObserver,
protected:
explicit PrintViewManagerBase(content::WebContents* web_contents);
- // Helper method for checking whether the WebContents is showing an
- // interstitial page or is crashed.
- bool IsInterstitialOrCrashed();
+ // Helper method for checking whether the WebContents is crashed.
+ bool IsCrashed();
// Helper method for Print*Now().
bool PrintNowInternal(content::RenderFrameHost* rfh,
diff --git a/chromium/chrome/browser/printing/print_view_manager_unittest.cc b/chromium/chrome/browser/printing/print_view_manager_unittest.cc
index 81d6a2c91a8..1040cf633da 100644
--- a/chromium/chrome/browser/printing/print_view_manager_unittest.cc
+++ b/chromium/chrome/browser/printing/print_view_manager_unittest.cc
@@ -42,8 +42,8 @@ class TestPrintViewManager : public PrintViewManagerBase {
// Mostly copied from PrintViewManager::PrintPreviewNow(). We can't override
// PrintViewManager since it is a user data class.
bool PrintPreviewNow(content::RenderFrameHost* rfh, bool has_selection) {
- // Don't print / print preview interstitials or crashed tabs.
- if (IsInterstitialOrCrashed())
+ // Don't print / print preview crashed tabs.
+ if (IsCrashed())
return false;
mojo::AssociatedRemote<mojom::PrintRenderFrame> print_render_frame;
diff --git a/chromium/chrome/browser/printing/printer_manager_dialog_linux.cc b/chromium/chrome/browser/printing/printer_manager_dialog_linux.cc
index 07d9dee216a..8515ec8a5ee 100644
--- a/chromium/chrome/browser/printing/printer_manager_dialog_linux.cc
+++ b/chromium/chrome/browser/printing/printer_manager_dialog_linux.cc
@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/environment.h"
#include "base/files/file_util.h"
+#include "base/logging.h"
#include "base/nix/xdg_util.h"
#include "base/process/kill.h"
#include "base/process/launch.h"
diff --git a/chromium/chrome/browser/printing/printer_query.cc b/chromium/chrome/browser/printing/printer_query.cc
index db7ee262b81..689a59232c6 100644
--- a/chromium/chrome/browser/printing/printer_query.cc
+++ b/chromium/chrome/browser/printing/printer_query.cc
@@ -58,8 +58,8 @@ void PrinterQuery::PostSettingsDoneToIO(
std::unique_ptr<PrintSettings> new_settings,
PrintingContext::Result result) {
// |this| is owned by |callback|, so |base::Unretained()| is safe.
- base::PostTask(
- FROM_HERE, {content::BrowserThread::IO},
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrinterQuery::GetSettingsDone, base::Unretained(this),
std::move(callback), std::move(new_settings), result));
}
diff --git a/chromium/chrome/browser/printing/printing_message_filter.cc b/chromium/chrome/browser/printing/printing_message_filter.cc
index d105aae9c8b..fb5d48349ee 100644
--- a/chromium/chrome/browser/printing/printing_message_filter.cc
+++ b/chromium/chrome/browser/printing/printing_message_filter.cc
@@ -10,7 +10,6 @@
#include "base/bind.h"
#include "base/memory/singleton.h"
-#include "base/task/post_task.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
@@ -102,8 +101,7 @@ PrintingMessageFilter::PrintingMessageFilter(int render_process_id,
->Subscribe(base::Bind(&PrintingMessageFilter::ShutdownOnUIThread,
base::Unretained(this)));
is_printing_enabled_.Init(prefs::kPrintingEnabled, profile->GetPrefs());
- is_printing_enabled_.MoveToSequence(
- base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
+ is_printing_enabled_.MoveToSequence(content::GetIOThreadTaskRunner({}));
}
PrintingMessageFilter::~PrintingMessageFilter() {
@@ -278,8 +276,8 @@ void PrintingMessageFilter::OnUpdatePrintSettingsReply(
#if defined(OS_WIN) && BUILDFLAG(ENABLE_PRINT_PREVIEW)
if (canceled) {
int routing_id = reply_msg->routing_id();
- base::PostTask(
- FROM_HERE, {BrowserThread::UI},
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
base::BindOnce(&PrintingMessageFilter::NotifySystemDialogCancelled,
this, routing_id));
}
diff --git a/chromium/chrome/browser/printing/printing_service.cc b/chromium/chrome/browser/printing/printing_service.cc
index 1c9e0853250..2b73b110049 100644
--- a/chromium/chrome/browser/printing/printing_service.cc
+++ b/chromium/chrome/browser/printing/printing_service.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/printing/printing_service.h"
#include "base/no_destructor.h"
-#include "build/build_config.h"
+#include "chrome/browser/service_sandbox_type.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/service_process_host.h"
@@ -17,9 +17,6 @@ const mojo::Remote<printing::mojom::PrintingService>& GetPrintingService() {
remote->BindNewPipeAndPassReceiver(),
content::ServiceProcessHost::Options()
.WithDisplayName(IDS_UTILITY_PROCESS_PRINTING_SERVICE_NAME)
-#if defined(OS_WIN)
- .WithSandboxType(service_manager::SandboxType::kPdfConversion)
-#endif
.Pass());
// Ensure that if the interface is ever disconnected (e.g. the service