blob: 7a4444514ecbace1edba99c6df6781da62412d12 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// 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 "chrome/services/printing/public/mojom/printing_service.mojom.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)
.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::Seconds(5));
}
return *remote;
}