Index: components/proximity_auth/messenger_impl.cc |
diff --git a/components/proximity_auth/messenger_impl.cc b/components/proximity_auth/messenger_impl.cc |
index aab4adee94b075eb0c7d274a2d639fb1fa854058..6e23d6d1156c3ece4b69a4c0e7a9594ddbe3b0a4 100644 |
--- a/components/proximity_auth/messenger_impl.cc |
+++ b/components/proximity_auth/messenger_impl.cc |
@@ -94,7 +94,9 @@ void MessengerImpl::RemoveObserver(MessengerObserver* observer) { |
bool MessengerImpl::SupportsSignIn() const { |
return (secure_context_->GetProtocolVersion() == |
- SecureContext::PROTOCOL_VERSION_THREE_ONE); |
+ SecureContext::PROTOCOL_VERSION_THREE_ONE) && |
+ connection_->remote_device().bluetooth_type != |
+ RemoteDevice::BLUETOOTH_LE; |
} |
void MessengerImpl::DispatchUnlockEvent() { |
@@ -147,6 +149,9 @@ MessengerImpl::PendingMessage::PendingMessage( |
: json_message(SerializeValueToJson(message)), |
type(GetMessageType(message)) {} |
+MessengerImpl::PendingMessage::PendingMessage(const std::string& message) |
+ : json_message(message), type("") {} |
+ |
MessengerImpl::PendingMessage::~PendingMessage() {} |
void MessengerImpl::ProcessMessageQueue() { |
@@ -167,6 +172,21 @@ void MessengerImpl::OnMessageEncoded(const std::string& encoded_message) { |
} |
void MessengerImpl::OnMessageDecoded(const std::string& decoded_message) { |
+ // TODO(tengs): Unify the iOS status update protocol with the existing Android |
+ // protocol, so we don't have this special case. |
+ if (decoded_message == kScreenUnlocked || decoded_message == kScreenLocked) { |
+ RemoteStatusUpdate update; |
+ update.user_presence = |
+ (decoded_message == kScreenUnlocked ? USER_PRESENT : USER_ABSENT); |
+ update.secure_screen_lock_state = SECURE_SCREEN_LOCK_ENABLED; |
+ update.trust_agent_state = TRUST_AGENT_ENABLED; |
+ FOR_EACH_OBSERVER(MessengerObserver, observers_, |
+ OnRemoteStatusUpdate(update)); |
+ pending_message_.reset(); |
+ ProcessMessageQueue(); |
+ return; |
+ } |
+ |
// The decoded message should be a JSON string. |
scoped_ptr<base::Value> message_value = |
base::JSONReader::Read(decoded_message); |
@@ -264,7 +284,8 @@ void MessengerImpl::PollScreenStateForIOS() { |
return; |
// Sends message requesting screen state. |
- connection_->SendMessage(make_scoped_ptr(new WireMessage(kPollScreenState))); |
+ queued_messages_.push_back(PendingMessage(std::string(kPollScreenState))); |
+ ProcessMessageQueue(); |
// Schedules the next message in |kPollingIntervalSeconds|. |
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
@@ -288,20 +309,6 @@ void MessengerImpl::OnConnectionStatusChanged(Connection* connection, |
void MessengerImpl::OnMessageReceived(const Connection& connection, |
const WireMessage& wire_message) { |
- // TODO(tengs): Unify the iOS status update protocol with the existing Android |
- // protocol, so we don't have this special case. |
- std::string payload = wire_message.payload(); |
- if (payload == kScreenUnlocked || payload == kScreenLocked) { |
- RemoteStatusUpdate update; |
- update.user_presence = |
- (payload == kScreenUnlocked ? USER_PRESENT : USER_ABSENT); |
- update.secure_screen_lock_state = SECURE_SCREEN_LOCK_ENABLED; |
- update.trust_agent_state = TRUST_AGENT_ENABLED; |
- FOR_EACH_OBSERVER(MessengerObserver, observers_, |
- OnRemoteStatusUpdate(update)); |
- return; |
- } |
- |
secure_context_->Decode(wire_message.payload(), |
base::Bind(&MessengerImpl::OnMessageDecoded, |
weak_ptr_factory_.GetWeakPtr())); |