OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/gcd_private/gcd_private_api.h" | 5 #include "chrome/browser/extensions/api/gcd_private/gcd_private_api.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/linked_ptr.h" | 8 #include "base/memory/linked_ptr.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 virtual ~GcdPrivateAPIImpl(); | 117 virtual ~GcdPrivateAPIImpl(); |
118 | 118 |
119 static GcdPrivateAPIImpl* Get(content::BrowserContext* context); | 119 static GcdPrivateAPIImpl* Get(content::BrowserContext* context); |
120 | 120 |
121 bool QueryForDevices(); | 121 bool QueryForDevices(); |
122 | 122 |
123 void EstablishSession(const std::string& ip_address, | 123 void EstablishSession(const std::string& ip_address, |
124 int port, | 124 int port, |
125 ConfirmationCodeCallback callback); | 125 ConfirmationCodeCallback callback); |
126 | 126 |
127 void ConfirmCode(int session_id, SessionEstablishedCallback callback); | 127 void ConfirmCode(int session_id, |
| 128 const std::string& code, |
| 129 SessionEstablishedCallback callback); |
128 | 130 |
129 void SendMessage(int session_id, | 131 void SendMessage(int session_id, |
130 const std::string& api, | 132 const std::string& api, |
131 const base::DictionaryValue& input, | 133 const base::DictionaryValue& input, |
132 MessageResponseCallback callback); | 134 MessageResponseCallback callback); |
133 | 135 |
134 void RequestWifiPassword(const std::string& ssid, | 136 void RequestWifiPassword(const std::string& ssid, |
135 const SuccessCallback& callback); | 137 const SuccessCallback& callback); |
136 | 138 |
137 void RemoveSession(int session_id); | 139 void RemoveSession(int session_id); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 ConfirmationCodeCallback; | 224 ConfirmationCodeCallback; |
223 | 225 |
224 GcdPrivateSessionHolder(const std::string& ip_address, | 226 GcdPrivateSessionHolder(const std::string& ip_address, |
225 int port, | 227 int port, |
226 net::URLRequestContextGetter* request_context); | 228 net::URLRequestContextGetter* request_context); |
227 virtual ~GcdPrivateSessionHolder(); | 229 virtual ~GcdPrivateSessionHolder(); |
228 | 230 |
229 void Start(const ConfirmationCodeCallback& callback); | 231 void Start(const ConfirmationCodeCallback& callback); |
230 | 232 |
231 void ConfirmCode( | 233 void ConfirmCode( |
| 234 const std::string& code, |
232 const GcdPrivateAPIImpl::SessionEstablishedCallback& callback); | 235 const GcdPrivateAPIImpl::SessionEstablishedCallback& callback); |
233 | 236 |
234 void SendMessage(const std::string& api, | 237 void SendMessage(const std::string& api, |
235 const base::DictionaryValue& input, | 238 const base::DictionaryValue& input, |
236 GcdPrivateAPIImpl::MessageResponseCallback callback); | 239 GcdPrivateAPIImpl::MessageResponseCallback callback); |
237 | 240 |
238 void DeleteRequest(GcdPrivateRequest* request); | 241 void DeleteRequest(GcdPrivateRequest* request); |
239 | 242 |
240 private: | 243 private: |
241 // local_discovery::PrivetV3Session::Delegate implementation. | 244 // local_discovery::PrivetV3Session::Delegate implementation. |
242 virtual void OnSetupConfirmationNeeded( | 245 virtual void OnSetupConfirmationNeeded( |
243 const std::string& confirmation_code) OVERRIDE; | 246 const std::string& confirmation_code, |
244 virtual void OnSessionEstablished() OVERRIDE; | 247 api::gcd_private::ConfirmationType confirmation_type) OVERRIDE; |
245 virtual void OnCannotEstablishSession() OVERRIDE; | 248 virtual void OnSessionStatus(api::gcd_private::Status status) OVERRIDE; |
246 | 249 |
247 scoped_ptr<local_discovery::PrivetHTTPClient> http_client_; | 250 scoped_ptr<local_discovery::PrivetHTTPClient> http_client_; |
248 scoped_ptr<local_discovery::PrivetV3Session> privet_session_; | 251 scoped_ptr<local_discovery::PrivetV3Session> privet_session_; |
249 typedef ScopedVector<GcdPrivateRequest> RequestVector; | 252 typedef ScopedVector<GcdPrivateRequest> RequestVector; |
250 RequestVector requests_; | 253 RequestVector requests_; |
251 | 254 |
252 ConfirmationCodeCallback confirm_callback_; | 255 ConfirmationCodeCallback confirm_callback_; |
253 GcdPrivateAPIImpl::SessionEstablishedCallback session_established_callback_; | 256 GcdPrivateAPIImpl::SessionEstablishedCallback session_established_callback_; |
254 }; | 257 }; |
255 | 258 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 ConfirmationCodeCallback callback) { | 367 ConfirmationCodeCallback callback) { |
365 int session_id = last_session_id_++; | 368 int session_id = last_session_id_++; |
366 linked_ptr<GcdPrivateSessionHolder> session_handler( | 369 linked_ptr<GcdPrivateSessionHolder> session_handler( |
367 new GcdPrivateSessionHolder( | 370 new GcdPrivateSessionHolder( |
368 ip_address, port, browser_context_->GetRequestContext())); | 371 ip_address, port, browser_context_->GetRequestContext())); |
369 sessions_[session_id] = session_handler; | 372 sessions_[session_id] = session_handler; |
370 session_handler->Start(base::Bind(callback, session_id)); | 373 session_handler->Start(base::Bind(callback, session_id)); |
371 } | 374 } |
372 | 375 |
373 void GcdPrivateAPIImpl::ConfirmCode(int session_id, | 376 void GcdPrivateAPIImpl::ConfirmCode(int session_id, |
| 377 const std::string& code, |
374 SessionEstablishedCallback callback) { | 378 SessionEstablishedCallback callback) { |
375 GCDSessionMap::iterator found = sessions_.find(session_id); | 379 GCDSessionMap::iterator found = sessions_.find(session_id); |
376 | 380 |
377 if (found == sessions_.end()) { | 381 if (found == sessions_.end()) { |
378 callback.Run(gcd_private::STATUS_UNKNOWNSESSIONERROR); | 382 callback.Run(gcd_private::STATUS_UNKNOWNSESSIONERROR); |
379 return; | 383 return; |
380 } | 384 } |
381 | 385 |
382 found->second->ConfirmCode(callback); | 386 found->second->ConfirmCode(code, callback); |
383 } | 387 } |
384 | 388 |
385 void GcdPrivateAPIImpl::SendMessage(int session_id, | 389 void GcdPrivateAPIImpl::SendMessage(int session_id, |
386 const std::string& api, | 390 const std::string& api, |
387 const base::DictionaryValue& input, | 391 const base::DictionaryValue& input, |
388 MessageResponseCallback callback) { | 392 MessageResponseCallback callback) { |
389 const base::DictionaryValue* input_actual = &input; | 393 const base::DictionaryValue* input_actual = &input; |
390 #if defined(ENABLE_WIFI_BOOTSTRAPPING) | 394 #if defined(ENABLE_WIFI_BOOTSTRAPPING) |
391 scoped_ptr<base::DictionaryValue> input_cloned; | 395 scoped_ptr<base::DictionaryValue> input_cloned; |
392 | 396 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 | 548 |
545 void GcdPrivateSessionHolder::Start(const ConfirmationCodeCallback& callback) { | 549 void GcdPrivateSessionHolder::Start(const ConfirmationCodeCallback& callback) { |
546 confirm_callback_ = callback; | 550 confirm_callback_ = callback; |
547 | 551 |
548 privet_session_.reset( | 552 privet_session_.reset( |
549 new local_discovery::PrivetV3Session(http_client_.Pass(), this)); | 553 new local_discovery::PrivetV3Session(http_client_.Pass(), this)); |
550 privet_session_->Start(); | 554 privet_session_->Start(); |
551 } | 555 } |
552 | 556 |
553 void GcdPrivateSessionHolder::ConfirmCode( | 557 void GcdPrivateSessionHolder::ConfirmCode( |
| 558 const std::string& code, |
554 const GcdPrivateAPIImpl::SessionEstablishedCallback& callback) { | 559 const GcdPrivateAPIImpl::SessionEstablishedCallback& callback) { |
555 session_established_callback_ = callback; | 560 session_established_callback_ = callback; |
556 privet_session_->ConfirmCode(); | 561 privet_session_->ConfirmCode(code); |
557 } | 562 } |
558 | 563 |
559 void GcdPrivateSessionHolder::SendMessage( | 564 void GcdPrivateSessionHolder::SendMessage( |
560 const std::string& api, | 565 const std::string& api, |
561 const base::DictionaryValue& input, | 566 const base::DictionaryValue& input, |
562 GcdPrivateAPIImpl::MessageResponseCallback callback) { | 567 GcdPrivateAPIImpl::MessageResponseCallback callback) { |
563 GcdPrivateRequest* request = | 568 GcdPrivateRequest* request = |
564 new GcdPrivateRequest(api, input, callback, this); | 569 new GcdPrivateRequest(api, input, callback, this); |
565 requests_.push_back(request); | 570 requests_.push_back(request); |
566 privet_session_->StartRequest(request); | 571 privet_session_->StartRequest(request); |
567 } | 572 } |
568 | 573 |
569 void GcdPrivateSessionHolder::DeleteRequest(GcdPrivateRequest* request) { | 574 void GcdPrivateSessionHolder::DeleteRequest(GcdPrivateRequest* request) { |
570 // TODO(noamsml): Does this need to be optimized? | 575 // TODO(noamsml): Does this need to be optimized? |
571 for (RequestVector::iterator i = requests_.begin(); i != requests_.end(); | 576 for (RequestVector::iterator i = requests_.begin(); i != requests_.end(); |
572 i++) { | 577 i++) { |
573 if (*i == request) { | 578 if (*i == request) { |
574 requests_.erase(i); | 579 requests_.erase(i); |
575 break; | 580 break; |
576 } | 581 } |
577 } | 582 } |
578 } | 583 } |
579 | 584 |
580 void GcdPrivateSessionHolder::OnSetupConfirmationNeeded( | 585 void GcdPrivateSessionHolder::OnSetupConfirmationNeeded( |
581 const std::string& confirmation_code) { | 586 const std::string& confirmation_code, |
582 confirm_callback_.Run(gcd_private::STATUS_SUCCESS, | 587 gcd_private::ConfirmationType confirmation_type) { |
583 confirmation_code, | 588 confirm_callback_.Run( |
584 gcd_private::CONFIRMATION_TYPE_DISPLAYCODE); | 589 gcd_private::STATUS_SUCCESS, confirmation_code, confirmation_type); |
585 | 590 |
586 confirm_callback_.Reset(); | 591 confirm_callback_.Reset(); |
587 } | 592 } |
588 | 593 |
589 void GcdPrivateSessionHolder::OnSessionEstablished() { | 594 void GcdPrivateSessionHolder::OnSessionStatus(gcd_private::Status status) { |
590 session_established_callback_.Run(gcd_private::STATUS_SUCCESS); | 595 session_established_callback_.Run(status); |
591 | 596 |
592 session_established_callback_.Reset(); | 597 session_established_callback_.Reset(); |
593 } | 598 } |
594 | |
595 void GcdPrivateSessionHolder::OnCannotEstablishSession() { | |
596 session_established_callback_.Run(gcd_private::STATUS_SESSIONERROR); | |
597 | |
598 session_established_callback_.Reset(); | |
599 } | |
600 | 599 |
601 GcdPrivateAPI::GcdPrivateAPI(content::BrowserContext* context) | 600 GcdPrivateAPI::GcdPrivateAPI(content::BrowserContext* context) |
602 : impl_(new GcdPrivateAPIImpl(context)) { | 601 : impl_(new GcdPrivateAPIImpl(context)) { |
603 } | 602 } |
604 | 603 |
605 GcdPrivateAPI::~GcdPrivateAPI() { | 604 GcdPrivateAPI::~GcdPrivateAPI() { |
606 } | 605 } |
607 | 606 |
608 // static | 607 // static |
609 BrowserContextKeyedAPIFactory<GcdPrivateAPI>* | 608 BrowserContextKeyedAPIFactory<GcdPrivateAPI>* |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 this)); | 766 this)); |
768 | 767 |
769 return true; | 768 return true; |
770 } | 769 } |
771 | 770 |
772 void GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback( | 771 void GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback( |
773 int session_id, | 772 int session_id, |
774 gcd_private::Status status, | 773 gcd_private::Status status, |
775 const std::string& confirm_code, | 774 const std::string& confirm_code, |
776 gcd_private::ConfirmationType confirmation_type) { | 775 gcd_private::ConfirmationType confirmation_type) { |
777 results_ = gcd_private::EstablishSession::Results::Create( | 776 gcd_private::ConfirmationInfo info; |
778 session_id, status, confirm_code, confirmation_type); | 777 |
| 778 info.type = confirmation_type; |
| 779 if (!confirm_code.empty()) { |
| 780 info.code.reset(new std::string(confirm_code)); |
| 781 } |
| 782 |
| 783 results_ = |
| 784 gcd_private::EstablishSession::Results::Create(session_id, status, info); |
779 SendResponse(true); | 785 SendResponse(true); |
780 } | 786 } |
781 | 787 |
782 GcdPrivateConfirmCodeFunction::GcdPrivateConfirmCodeFunction() { | 788 GcdPrivateConfirmCodeFunction::GcdPrivateConfirmCodeFunction() { |
783 } | 789 } |
784 | 790 |
785 GcdPrivateConfirmCodeFunction::~GcdPrivateConfirmCodeFunction() { | 791 GcdPrivateConfirmCodeFunction::~GcdPrivateConfirmCodeFunction() { |
786 } | 792 } |
787 | 793 |
788 bool GcdPrivateConfirmCodeFunction::RunAsync() { | 794 bool GcdPrivateConfirmCodeFunction::RunAsync() { |
789 scoped_ptr<gcd_private::ConfirmCode::Params> params = | 795 scoped_ptr<gcd_private::ConfirmCode::Params> params = |
790 gcd_private::ConfirmCode::Params::Create(*args_); | 796 gcd_private::ConfirmCode::Params::Create(*args_); |
791 | 797 |
792 if (!params) | 798 if (!params) |
793 return false; | 799 return false; |
794 | 800 |
795 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 801 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
796 | 802 |
797 gcd_api->ConfirmCode( | 803 gcd_api->ConfirmCode( |
798 params->session_id, | 804 params->session_id, |
| 805 params->code, |
799 base::Bind(&GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback, | 806 base::Bind(&GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback, |
800 this)); | 807 this)); |
801 | 808 |
802 return true; | 809 return true; |
803 } | 810 } |
804 | 811 |
805 void GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback( | 812 void GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback( |
806 api::gcd_private::Status status) { | 813 api::gcd_private::Status status) { |
807 results_ = gcd_private::ConfirmCode::Results::Create(status); | 814 results_ = gcd_private::ConfirmCode::Results::Create(status); |
808 SendResponse(true); | 815 SendResponse(true); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 } | 935 } |
929 | 936 |
930 GcdPrivateGetCommandsListFunction::~GcdPrivateGetCommandsListFunction() { | 937 GcdPrivateGetCommandsListFunction::~GcdPrivateGetCommandsListFunction() { |
931 } | 938 } |
932 | 939 |
933 bool GcdPrivateGetCommandsListFunction::RunAsync() { | 940 bool GcdPrivateGetCommandsListFunction::RunAsync() { |
934 return false; | 941 return false; |
935 } | 942 } |
936 | 943 |
937 } // namespace extensions | 944 } // namespace extensions |
OLD | NEW |