diff options
Diffstat (limited to 'chromium/chrome/browser/printing/printing_service.cc')
-rw-r--r-- | chromium/chrome/browser/printing/printing_service.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/chromium/chrome/browser/printing/printing_service.cc b/chromium/chrome/browser/printing/printing_service.cc new file mode 100644 index 00000000000..9b0f43d94ac --- /dev/null +++ b/chromium/chrome/browser/printing/printing_service.cc @@ -0,0 +1,32 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/printing/printing_service.h" + +#include "base/no_destructor.h" +#include "chrome/grit/generated_resources.h" +#include "content/public/browser/service_process_host.h" + +const mojo::Remote<printing::mojom::PrintingService>& GetPrintingService() { + static base::NoDestructor<mojo::Remote<printing::mojom::PrintingService>> + remote; + if (!*remote) { + content::ServiceProcessHost::Launch( + remote->BindNewPipeAndPassReceiver(), + content::ServiceProcessHost::Options() + .WithDisplayName(IDS_UTILITY_PROCESS_PRINTING_SERVICE_NAME) + .WithSandboxType(service_manager::SANDBOX_TYPE_UTILITY) + .Pass()); + + // Ensure that if the interface is ever disconnected (e.g. the service + // process crashes) or goes idle for a short period of time -- meaning there + // are no in-flight messages and no other interfaces bound through this + // one -- then we will reset |remote|, causing the service process to be + // terminated if it isn't already. + remote->reset_on_disconnect(); + remote->reset_on_idle_timeout(base::TimeDelta::FromSeconds(5)); + } + + return *remote; +} |