| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/local_discovery/privetv3_setup_flow.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "chrome/browser/local_discovery/gcd_registration_ticket_request.h" | |
| 9 | |
| 10 namespace local_discovery { | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 const char kTicketJsonKeyName[] = "registration.ticketID"; | |
| 15 const char kUserJsonKeyName[] = "registration.user"; | |
| 16 | |
| 17 } // namespace | |
| 18 | |
| 19 PrivetV3SetupFlow::Delegate::~Delegate() { | |
| 20 } | |
| 21 | |
| 22 PrivetV3SetupFlow::PrivetV3SetupFlow(Delegate* delegate) | |
| 23 : delegate_(delegate), weak_ptr_factory_(this) { | |
| 24 } | |
| 25 | |
| 26 PrivetV3SetupFlow::~PrivetV3SetupFlow() { | |
| 27 } | |
| 28 | |
| 29 void PrivetV3SetupFlow::Register(const std::string& service_name) { | |
| 30 service_name_ = service_name; | |
| 31 ticket_request_ = delegate_->CreateApiFlow(); | |
| 32 if (!ticket_request_) { | |
| 33 OnSetupError(); | |
| 34 return; | |
| 35 } | |
| 36 scoped_ptr<GCDApiFlow::Request> ticket_request( | |
| 37 new GCDRegistrationTicketRequest( | |
| 38 base::Bind(&PrivetV3SetupFlow::OnTicketCreated, | |
| 39 weak_ptr_factory_.GetWeakPtr()))); | |
| 40 ticket_request_->Start(ticket_request.Pass()); | |
| 41 } | |
| 42 | |
| 43 #if defined(ENABLE_WIFI_BOOTSTRAPPING) | |
| 44 void PrivetV3SetupFlow::SetupWifiAndRegister(const std::string& device_ssid) { | |
| 45 NOTIMPLEMENTED(); | |
| 46 } | |
| 47 #endif // ENABLE_WIFI_BOOTSTRAPPING | |
| 48 | |
| 49 void PrivetV3SetupFlow::OnSetupError() { | |
| 50 delegate_->OnSetupError(); | |
| 51 } | |
| 52 | |
| 53 void PrivetV3SetupFlow::OnTicketCreated(const std::string& ticket_id, | |
| 54 const std::string& device_id) { | |
| 55 if (ticket_id.empty() || device_id.empty()) { | |
| 56 OnSetupError(); | |
| 57 return; | |
| 58 } | |
| 59 // TODO(vitalybuka): Implement success check by polling status of device_id_. | |
| 60 device_id_ = device_id; | |
| 61 ticket_id_ = ticket_id; | |
| 62 delegate_->CreatePrivetV3Client( | |
| 63 service_name_, | |
| 64 base::Bind(&PrivetV3SetupFlow::OnPrivetClientCreated, | |
| 65 weak_ptr_factory_.GetWeakPtr())); | |
| 66 } | |
| 67 | |
| 68 void PrivetV3SetupFlow::OnPrivetClientCreated( | |
| 69 scoped_ptr<PrivetHTTPClient> privet_http_client) { | |
| 70 if (!privet_http_client) { | |
| 71 OnSetupError(); | |
| 72 return; | |
| 73 } | |
| 74 session_.reset(new PrivetV3Session(privet_http_client.Pass())); | |
| 75 session_->Init(base::Bind(&PrivetV3SetupFlow::OnSessionInitialized, | |
| 76 weak_ptr_factory_.GetWeakPtr())); | |
| 77 } | |
| 78 | |
| 79 void PrivetV3SetupFlow::OnCodeConfirmed(bool success) { | |
| 80 if (!success) | |
| 81 return OnSetupError(); | |
| 82 session_->ConfirmCode("1234", base::Bind(&PrivetV3SetupFlow::OnPairingDone, | |
| 83 weak_ptr_factory_.GetWeakPtr())); | |
| 84 } | |
| 85 | |
| 86 void PrivetV3SetupFlow::OnSessionInitialized( | |
| 87 PrivetV3Session::Result result, | |
| 88 const std::vector<PrivetV3Session::PairingType>& types) { | |
| 89 if (result != PrivetV3Session::Result::STATUS_SUCCESS) | |
| 90 return OnSetupError(); | |
| 91 session_->StartPairing(PrivetV3Session::PairingType::PAIRING_TYPE_PINCODE, | |
| 92 base::Bind(&PrivetV3SetupFlow::OnPairingStarted, | |
| 93 weak_ptr_factory_.GetWeakPtr())); | |
| 94 } | |
| 95 | |
| 96 void PrivetV3SetupFlow::OnPairingStarted(PrivetV3Session::Result result) { | |
| 97 if (result != PrivetV3Session::Result::STATUS_SUCCESS) | |
| 98 return OnSetupError(); | |
| 99 delegate_->ConfirmSecurityCode(base::Bind(&PrivetV3SetupFlow::OnCodeConfirmed, | |
| 100 weak_ptr_factory_.GetWeakPtr())); | |
| 101 } | |
| 102 | |
| 103 void PrivetV3SetupFlow::OnPairingDone(PrivetV3Session::Result result) { | |
| 104 if (result != PrivetV3Session::Result::STATUS_SUCCESS) | |
| 105 return OnSetupError(); | |
| 106 base::DictionaryValue message; | |
| 107 message.SetString(kTicketJsonKeyName, ticket_id_); | |
| 108 message.SetString(kUserJsonKeyName, "me"); | |
| 109 session_->SendMessage("/privet/v3/setup/start", message, | |
| 110 base::Bind(&PrivetV3SetupFlow::OnSetupMessageSent, | |
| 111 weak_ptr_factory_.GetWeakPtr())); | |
| 112 } | |
| 113 | |
| 114 void PrivetV3SetupFlow::OnSetupMessageSent( | |
| 115 PrivetV3Session::Result result, | |
| 116 const base::DictionaryValue& response) { | |
| 117 if (result != PrivetV3Session::Result::STATUS_SUCCESS) | |
| 118 return OnSetupError(); | |
| 119 delegate_->OnSetupDone(); | |
| 120 } | |
| 121 | |
| 122 } // namespace local_discovery | |
| OLD | NEW |