Index: components/arc/arc_bridge_service.cc |
diff --git a/components/arc/arc_bridge_service.cc b/components/arc/arc_bridge_service.cc |
index 00516d1b270218e76d9e469dae14cc26060f0005..e5dc41842ec067d146e51817446a4f7c0f925a3f 100644 |
--- a/components/arc/arc_bridge_service.cc |
+++ b/components/arc/arc_bridge_service.cc |
@@ -72,6 +72,8 @@ void ArcBridgeService::AddObserver(Observer* observer) { |
observer->OnNetInstanceReady(); |
if (notifications_instance()) |
observer->OnNotificationsInstanceReady(); |
+ if (policy_instance()) |
+ observer->OnPolicyInstanceReady(); |
if (power_instance()) |
observer->OnPowerInstanceReady(); |
if (process_instance()) |
@@ -283,6 +285,30 @@ void ArcBridgeService::CloseNotificationsChannel() { |
FOR_EACH_OBSERVER(Observer, observer_list(), OnNotificationsInstanceClosed()); |
} |
+void ArcBridgeService::OnPolicyInstanceReady(PolicyInstancePtr policy_ptr) { |
+ DCHECK(CalledOnValidThread()); |
+ temporary_policy_ptr_ = std::move(policy_ptr); |
+ temporary_policy_ptr_.QueryVersion(base::Bind( |
+ &ArcBridgeService::OnPolicyVersionReady, weak_factory_.GetWeakPtr())); |
+} |
+ |
+void ArcBridgeService::OnPolicyVersionReady(int32_t version) { |
+ DCHECK(CalledOnValidThread()); |
+ policy_ptr_ = std::move(temporary_policy_ptr_); |
+ policy_ptr_.set_connection_error_handler(base::Bind( |
+ &ArcBridgeService::ClosePolicyChannel, weak_factory_.GetWeakPtr())); |
+ FOR_EACH_OBSERVER(Observer, observer_list(), OnPolicyInstanceReady()); |
+} |
+ |
+void ArcBridgeService::ClosePolicyChannel() { |
+ DCHECK(CalledOnValidThread()); |
+ if (!policy_ptr_) |
+ return; |
+ |
+ policy_ptr_.reset(); |
+ FOR_EACH_OBSERVER(Observer, observer_list(), OnPolicyInstanceClosed()); |
+} |
+ |
void ArcBridgeService::OnPowerInstanceReady(PowerInstancePtr power_ptr) { |
DCHECK(CalledOnValidThread()); |
temporary_power_ptr_ = std::move(power_ptr); |
@@ -385,6 +411,7 @@ void ArcBridgeService::CloseAllChannels() { |
CloseIntentHelperChannel(); |
CloseNetChannel(); |
CloseNotificationsChannel(); |
+ ClosePolicyChannel(); |
ClosePowerChannel(); |
CloseProcessChannel(); |
CloseVideoChannel(); |