| 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()));
|
|
|