Index: components/arc/arc_bridge_service.cc |
diff --git a/components/arc/arc_bridge_service.cc b/components/arc/arc_bridge_service.cc |
index f2c990238fdd42b5ca582e04a5b679191445e2dc..51796de5020a4a8410701f9b1aecf527d3ff5480 100644 |
--- a/components/arc/arc_bridge_service.cc |
+++ b/components/arc/arc_bridge_service.cc |
@@ -85,6 +85,8 @@ void ArcBridgeService::AddObserver(Observer* observer) { |
observer->OnPolicyInstanceReady(); |
if (power_instance()) |
observer->OnPowerInstanceReady(); |
+ if (print_instance()) |
+ observer->OnPrintInstanceReady(); |
if (process_instance()) |
observer->OnProcessInstanceReady(); |
if (storage_manager_instance()) |
@@ -478,6 +480,30 @@ void ArcBridgeService::ClosePowerChannel() { |
FOR_EACH_OBSERVER(Observer, observer_list(), OnPowerInstanceClosed()); |
} |
+void ArcBridgeService::OnPrintInstanceReady(mojom::PrintInstancePtr print_ptr) { |
+ DCHECK(CalledOnValidThread()); |
+ temporary_print_ptr_ = std::move(print_ptr); |
+ temporary_print_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnPrintVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnPrintVersionReady(uint32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ print_ptr_ = std::move(temporary_print_ptr_); |
+ print_ptr_.set_connection_error_handler(base::Bind( |
+ &ArcBridgeService::ClosePrintChannel, weak_factory_.GetWeakPtr())); |
+ FOR_EACH_OBSERVER(Observer, observer_list(), OnPrintInstanceReady()); |
+} |
+ |
+void ArcBridgeService::ClosePrintChannel() { |
+ DCHECK(CalledOnValidThread()); |
+ if (!print_ptr_) |
+ return; |
+ |
+ print_ptr_.reset(); |
+ FOR_EACH_OBSERVER(Observer, observer_list(), OnPrintInstanceClosed()); |
+} |
+ |
void ArcBridgeService::OnProcessInstanceReady( |
mojom::ProcessInstancePtr process_ptr) { |
DCHECK(CalledOnValidThread()); |
@@ -624,6 +650,7 @@ void ArcBridgeService::CloseAllChannels() { |
CloseObbMounterChannel(); |
ClosePolicyChannel(); |
ClosePowerChannel(); |
+ ClosePrintChannel(); |
CloseProcessChannel(); |
CloseStorageManagerChannel(); |
CloseVideoChannel(); |