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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 void SendMessage(int session_id, | 129 void SendMessage(int session_id, |
130 const std::string& api, | 130 const std::string& api, |
131 const base::DictionaryValue& input, | 131 const base::DictionaryValue& input, |
132 MessageResponseCallback callback); | 132 MessageResponseCallback callback); |
133 | 133 |
134 void RequestWifiPassword(const std::string& ssid, | 134 void RequestWifiPassword(const std::string& ssid, |
135 const SuccessCallback& callback); | 135 const SuccessCallback& callback); |
136 | 136 |
137 void RemoveSession(int session_id); | 137 void RemoveSession(int session_id); |
138 | 138 |
| 139 scoped_ptr<base::ListValue> GetPrefetchedSSIDList(); |
| 140 |
139 private: | 141 private: |
140 typedef std::map<std::string /* id_string */, | 142 typedef std::map<std::string /* id_string */, |
141 linked_ptr<api::gcd_private::GCDDevice> > GCDDeviceMap; | 143 linked_ptr<api::gcd_private::GCDDevice> > GCDDeviceMap; |
142 | 144 |
143 typedef std::map<int /* session id*/, linked_ptr<GcdPrivateSessionHolder> > | 145 typedef std::map<int /* session id*/, linked_ptr<GcdPrivateSessionHolder> > |
144 GCDSessionMap; | 146 GCDSessionMap; |
145 | 147 |
146 typedef std::map<std::string /* ssid */, std::string /* password */> | 148 typedef std::map<std::string /* ssid */, std::string /* password */> |
147 PasswordMap; | 149 PasswordMap; |
148 | 150 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 const std::string& api, | 386 const std::string& api, |
385 const base::DictionaryValue& input, | 387 const base::DictionaryValue& input, |
386 MessageResponseCallback callback) { | 388 MessageResponseCallback callback) { |
387 const base::DictionaryValue* input_actual = &input; | 389 const base::DictionaryValue* input_actual = &input; |
388 #if defined(ENABLE_WIFI_BOOTSTRAPPING) | 390 #if defined(ENABLE_WIFI_BOOTSTRAPPING) |
389 scoped_ptr<base::DictionaryValue> input_cloned; | 391 scoped_ptr<base::DictionaryValue> input_cloned; |
390 | 392 |
391 if (api == kPrivatAPISetup) { | 393 if (api == kPrivatAPISetup) { |
392 const base::DictionaryValue* wifi = NULL; | 394 const base::DictionaryValue* wifi = NULL; |
393 | 395 |
394 if (input.GetDictionary(kPrivetKeyWifi, &wifi) && | 396 if (input.GetDictionary(kPrivetKeyWifi, &wifi)) { |
395 !wifi->HasKey(kPrivetKeyPassphrase)) { | |
396 // If the message is a setup message, has a wifi section, try sending the | |
397 // passphrase. | |
398 std::string ssid; | 397 std::string ssid; |
399 | 398 |
400 if (!wifi->GetString(kPrivetKeySSID, &ssid)) { | 399 if (!wifi->GetString(kPrivetKeySSID, &ssid)) { |
401 callback.Run(gcd_private::STATUS_SETUPPARSEERROR, | 400 callback.Run(gcd_private::STATUS_SETUPPARSEERROR, |
402 base::DictionaryValue()); | 401 base::DictionaryValue()); |
403 return; | 402 return; |
404 } | 403 } |
405 | 404 |
406 PasswordMap::iterator found = wifi_passwords_.find(ssid); | 405 if (!wifi->HasKey(kPrivetKeyPassphrase)) { |
407 if (found == wifi_passwords_.end()) { | 406 // If the message is a setup message, has a wifi section, try sending |
408 callback.Run(gcd_private::STATUS_WIFIPASSWORDERROR, | 407 // the passphrase. |
409 base::DictionaryValue()); | 408 |
410 return; | 409 PasswordMap::iterator found = wifi_passwords_.find(ssid); |
| 410 if (found == wifi_passwords_.end()) { |
| 411 callback.Run(gcd_private::STATUS_WIFIPASSWORDERROR, |
| 412 base::DictionaryValue()); |
| 413 return; |
| 414 } |
| 415 |
| 416 input_cloned.reset(input.DeepCopy()); |
| 417 input_cloned->SetString(kPrivetKeyPassphraseDotted, found->second); |
| 418 input_actual = input_cloned.get(); |
411 } | 419 } |
412 | |
413 input_cloned.reset(input.DeepCopy()); | |
414 input_cloned->SetString(kPrivetKeyPassphraseDotted, found->second); | |
415 input_actual = input_cloned.get(); | |
416 } | 420 } |
417 } | 421 } |
418 #endif | 422 #endif |
419 | 423 |
420 GCDSessionMap::iterator found = sessions_.find(session_id); | 424 GCDSessionMap::iterator found = sessions_.find(session_id); |
421 | 425 |
422 if (found == sessions_.end()) { | 426 if (found == sessions_.end()) { |
423 callback.Run(gcd_private::STATUS_UNKNOWNSESSIONERROR, | 427 callback.Run(gcd_private::STATUS_UNKNOWNSESSIONERROR, |
424 base::DictionaryValue()); | 428 base::DictionaryValue()); |
425 return; | 429 return; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 wifi_manager_->Start(); | 464 wifi_manager_->Start(); |
461 } | 465 } |
462 } | 466 } |
463 | 467 |
464 #endif | 468 #endif |
465 | 469 |
466 void GcdPrivateAPIImpl::RemoveSession(int session_id) { | 470 void GcdPrivateAPIImpl::RemoveSession(int session_id) { |
467 sessions_.erase(session_id); | 471 sessions_.erase(session_id); |
468 } | 472 } |
469 | 473 |
| 474 scoped_ptr<base::ListValue> GcdPrivateAPIImpl::GetPrefetchedSSIDList() { |
| 475 scoped_ptr<base::ListValue> retval(new base::ListValue); |
| 476 |
| 477 #if defined(ENABLE_WIFI_BOOTSTRAPPING) |
| 478 for (PasswordMap::iterator i = wifi_passwords_.begin(); |
| 479 i != wifi_passwords_.end(); |
| 480 i++) { |
| 481 retval->AppendString(i->first); |
| 482 } |
| 483 #endif |
| 484 |
| 485 return retval.Pass(); |
| 486 } |
| 487 |
470 GcdPrivateRequest::GcdPrivateRequest( | 488 GcdPrivateRequest::GcdPrivateRequest( |
471 const std::string& api, | 489 const std::string& api, |
472 const base::DictionaryValue& input, | 490 const base::DictionaryValue& input, |
473 const GcdPrivateAPIImpl::MessageResponseCallback& callback, | 491 const GcdPrivateAPIImpl::MessageResponseCallback& callback, |
474 GcdPrivateSessionHolder* session_holder) | 492 GcdPrivateSessionHolder* session_holder) |
475 : api_(api), | 493 : api_(api), |
476 input_(input.DeepCopy()), | 494 input_(input.DeepCopy()), |
477 callback_(callback), | 495 callback_(callback), |
478 session_holder_(session_holder) { | 496 session_holder_(session_holder) { |
479 } | 497 } |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 GcdPrivateQueryForNewLocalDevicesFunction() { | 697 GcdPrivateQueryForNewLocalDevicesFunction() { |
680 } | 698 } |
681 | 699 |
682 GcdPrivateQueryForNewLocalDevicesFunction:: | 700 GcdPrivateQueryForNewLocalDevicesFunction:: |
683 ~GcdPrivateQueryForNewLocalDevicesFunction() { | 701 ~GcdPrivateQueryForNewLocalDevicesFunction() { |
684 } | 702 } |
685 | 703 |
686 bool GcdPrivateQueryForNewLocalDevicesFunction::RunSync() { | 704 bool GcdPrivateQueryForNewLocalDevicesFunction::RunSync() { |
687 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 705 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
688 | 706 |
689 if (!gcd_api) | |
690 return false; | |
691 | |
692 if (!gcd_api->QueryForDevices()) { | 707 if (!gcd_api->QueryForDevices()) { |
693 error_ = | 708 error_ = |
694 "You must first subscribe to onDeviceStateChanged or onDeviceRemoved " | 709 "You must first subscribe to onDeviceStateChanged or onDeviceRemoved " |
695 "notifications"; | 710 "notifications"; |
696 return false; | 711 return false; |
697 } | 712 } |
698 | 713 |
699 return true; | 714 return true; |
700 } | 715 } |
701 | 716 |
702 GcdPrivatePrefetchWifiPasswordFunction:: | 717 GcdPrivatePrefetchWifiPasswordFunction:: |
703 GcdPrivatePrefetchWifiPasswordFunction() { | 718 GcdPrivatePrefetchWifiPasswordFunction() { |
704 } | 719 } |
705 | 720 |
706 GcdPrivatePrefetchWifiPasswordFunction:: | 721 GcdPrivatePrefetchWifiPasswordFunction:: |
707 ~GcdPrivatePrefetchWifiPasswordFunction() { | 722 ~GcdPrivatePrefetchWifiPasswordFunction() { |
708 } | 723 } |
709 | 724 |
710 bool GcdPrivatePrefetchWifiPasswordFunction::RunAsync() { | 725 bool GcdPrivatePrefetchWifiPasswordFunction::RunAsync() { |
711 scoped_ptr<gcd_private::PrefetchWifiPassword::Params> params = | 726 scoped_ptr<gcd_private::PrefetchWifiPassword::Params> params = |
712 gcd_private::PrefetchWifiPassword::Params::Create(*args_); | 727 gcd_private::PrefetchWifiPassword::Params::Create(*args_); |
713 | 728 |
714 if (!params) | 729 if (!params) |
715 return false; | 730 return false; |
716 | 731 |
717 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 732 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
718 | 733 |
719 if (!gcd_api) | |
720 return false; | |
721 | |
722 gcd_api->RequestWifiPassword( | 734 gcd_api->RequestWifiPassword( |
723 params->ssid, | 735 params->ssid, |
724 base::Bind(&GcdPrivatePrefetchWifiPasswordFunction::OnResponse, this)); | 736 base::Bind(&GcdPrivatePrefetchWifiPasswordFunction::OnResponse, this)); |
725 | 737 |
726 return true; | 738 return true; |
727 } | 739 } |
728 | 740 |
729 void GcdPrivatePrefetchWifiPasswordFunction::OnResponse(bool response) { | 741 void GcdPrivatePrefetchWifiPasswordFunction::OnResponse(bool response) { |
730 scoped_ptr<base::FundamentalValue> response_value( | 742 scoped_ptr<base::FundamentalValue> response_value( |
731 new base::FundamentalValue(response)); | 743 new base::FundamentalValue(response)); |
732 SetResult(response_value.release()); | 744 SetResult(response_value.release()); |
733 SendResponse(true); | 745 SendResponse(true); |
734 } | 746 } |
735 | 747 |
736 GcdPrivateEstablishSessionFunction::GcdPrivateEstablishSessionFunction() { | 748 GcdPrivateEstablishSessionFunction::GcdPrivateEstablishSessionFunction() { |
737 } | 749 } |
738 | 750 |
739 GcdPrivateEstablishSessionFunction::~GcdPrivateEstablishSessionFunction() { | 751 GcdPrivateEstablishSessionFunction::~GcdPrivateEstablishSessionFunction() { |
740 } | 752 } |
741 | 753 |
742 bool GcdPrivateEstablishSessionFunction::RunAsync() { | 754 bool GcdPrivateEstablishSessionFunction::RunAsync() { |
743 scoped_ptr<gcd_private::EstablishSession::Params> params = | 755 scoped_ptr<gcd_private::EstablishSession::Params> params = |
744 gcd_private::EstablishSession::Params::Create(*args_); | 756 gcd_private::EstablishSession::Params::Create(*args_); |
745 | 757 |
746 if (!params) | 758 if (!params) |
747 return false; | 759 return false; |
748 | 760 |
749 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 761 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
750 | 762 |
751 if (!gcd_api) | |
752 return false; | |
753 | |
754 gcd_api->EstablishSession( | 763 gcd_api->EstablishSession( |
755 params->ip_address, | 764 params->ip_address, |
756 params->port, | 765 params->port, |
757 base::Bind(&GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback, | 766 base::Bind(&GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback, |
758 this)); | 767 this)); |
759 | 768 |
760 return true; | 769 return true; |
761 } | 770 } |
762 | 771 |
763 void GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback( | 772 void GcdPrivateEstablishSessionFunction::OnConfirmCodeCallback( |
(...skipping 14 matching lines...) Expand all Loading... |
778 | 787 |
779 bool GcdPrivateConfirmCodeFunction::RunAsync() { | 788 bool GcdPrivateConfirmCodeFunction::RunAsync() { |
780 scoped_ptr<gcd_private::ConfirmCode::Params> params = | 789 scoped_ptr<gcd_private::ConfirmCode::Params> params = |
781 gcd_private::ConfirmCode::Params::Create(*args_); | 790 gcd_private::ConfirmCode::Params::Create(*args_); |
782 | 791 |
783 if (!params) | 792 if (!params) |
784 return false; | 793 return false; |
785 | 794 |
786 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 795 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
787 | 796 |
788 if (!gcd_api) | |
789 return false; | |
790 | |
791 gcd_api->ConfirmCode( | 797 gcd_api->ConfirmCode( |
792 params->session_id, | 798 params->session_id, |
793 base::Bind(&GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback, | 799 base::Bind(&GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback, |
794 this)); | 800 this)); |
795 | 801 |
796 return true; | 802 return true; |
797 } | 803 } |
798 | 804 |
799 void GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback( | 805 void GcdPrivateConfirmCodeFunction::OnSessionEstablishedCallback( |
800 api::gcd_private::Status status) { | 806 api::gcd_private::Status status) { |
801 results_ = gcd_private::ConfirmCode::Results::Create(status); | 807 results_ = gcd_private::ConfirmCode::Results::Create(status); |
802 SendResponse(true); | 808 SendResponse(true); |
803 } | 809 } |
804 | 810 |
805 GcdPrivateSendMessageFunction::GcdPrivateSendMessageFunction() { | 811 GcdPrivateSendMessageFunction::GcdPrivateSendMessageFunction() { |
806 } | 812 } |
807 | 813 |
808 GcdPrivateSendMessageFunction::~GcdPrivateSendMessageFunction() { | 814 GcdPrivateSendMessageFunction::~GcdPrivateSendMessageFunction() { |
809 } | 815 } |
810 | 816 |
811 bool GcdPrivateSendMessageFunction::RunAsync() { | 817 bool GcdPrivateSendMessageFunction::RunAsync() { |
812 scoped_ptr<gcd_private::PassMessage::Params> params = | 818 scoped_ptr<gcd_private::PassMessage::Params> params = |
813 gcd_private::PassMessage::Params::Create(*args_); | 819 gcd_private::PassMessage::Params::Create(*args_); |
814 | 820 |
815 if (!params) | 821 if (!params) |
816 return false; | 822 return false; |
817 | 823 |
818 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 824 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
819 | 825 |
820 if (!gcd_api) | |
821 return false; | |
822 | 826 |
823 gcd_api->SendMessage( | 827 gcd_api->SendMessage( |
824 params->session_id, | 828 params->session_id, |
825 params->api, | 829 params->api, |
826 params->input.additional_properties, | 830 params->input.additional_properties, |
827 base::Bind(&GcdPrivateSendMessageFunction::OnMessageSentCallback, this)); | 831 base::Bind(&GcdPrivateSendMessageFunction::OnMessageSentCallback, this)); |
828 | 832 |
829 return true; | 833 return true; |
830 } | 834 } |
831 | 835 |
(...skipping 15 matching lines...) Expand all Loading... |
847 | 851 |
848 bool GcdPrivateTerminateSessionFunction::RunAsync() { | 852 bool GcdPrivateTerminateSessionFunction::RunAsync() { |
849 scoped_ptr<gcd_private::TerminateSession::Params> params = | 853 scoped_ptr<gcd_private::TerminateSession::Params> params = |
850 gcd_private::TerminateSession::Params::Create(*args_); | 854 gcd_private::TerminateSession::Params::Create(*args_); |
851 | 855 |
852 if (!params) | 856 if (!params) |
853 return false; | 857 return false; |
854 | 858 |
855 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); | 859 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
856 | 860 |
857 if (!gcd_api) | |
858 return false; | |
859 | |
860 gcd_api->RemoveSession(params->session_id); | 861 gcd_api->RemoveSession(params->session_id); |
861 | 862 |
862 SendResponse(true); | 863 SendResponse(true); |
863 return true; | 864 return true; |
864 } | 865 } |
865 | 866 |
866 GcdPrivateGetCommandDefinitionsFunction:: | 867 GcdPrivateGetCommandDefinitionsFunction:: |
867 GcdPrivateGetCommandDefinitionsFunction() { | 868 GcdPrivateGetCommandDefinitionsFunction() { |
868 } | 869 } |
869 | 870 |
870 GcdPrivateGetCommandDefinitionsFunction:: | 871 GcdPrivateGetCommandDefinitionsFunction:: |
871 ~GcdPrivateGetCommandDefinitionsFunction() { | 872 ~GcdPrivateGetCommandDefinitionsFunction() { |
872 } | 873 } |
873 | 874 |
| 875 GcdPrivateGetPrefetchedWifiNameListFunction:: |
| 876 GcdPrivateGetPrefetchedWifiNameListFunction() { |
| 877 } |
| 878 |
| 879 GcdPrivateGetPrefetchedWifiNameListFunction:: |
| 880 ~GcdPrivateGetPrefetchedWifiNameListFunction() { |
| 881 } |
| 882 |
| 883 bool GcdPrivateGetPrefetchedWifiNameListFunction::RunSync() { |
| 884 GcdPrivateAPIImpl* gcd_api = GcdPrivateAPIImpl::Get(GetProfile()); |
| 885 |
| 886 scoped_ptr<base::ListValue> ssid_list = gcd_api->GetPrefetchedSSIDList(); |
| 887 |
| 888 SetResult(ssid_list.release()); |
| 889 |
| 890 return true; |
| 891 } |
| 892 |
874 bool GcdPrivateGetCommandDefinitionsFunction::RunAsync() { | 893 bool GcdPrivateGetCommandDefinitionsFunction::RunAsync() { |
875 return false; | 894 return false; |
876 } | 895 } |
877 | 896 |
878 GcdPrivateInsertCommandFunction::GcdPrivateInsertCommandFunction() { | 897 GcdPrivateInsertCommandFunction::GcdPrivateInsertCommandFunction() { |
879 } | 898 } |
880 | 899 |
881 GcdPrivateInsertCommandFunction::~GcdPrivateInsertCommandFunction() { | 900 GcdPrivateInsertCommandFunction::~GcdPrivateInsertCommandFunction() { |
882 } | 901 } |
883 | 902 |
(...skipping 25 matching lines...) Expand all Loading... |
909 } | 928 } |
910 | 929 |
911 GcdPrivateGetCommandsListFunction::~GcdPrivateGetCommandsListFunction() { | 930 GcdPrivateGetCommandsListFunction::~GcdPrivateGetCommandsListFunction() { |
912 } | 931 } |
913 | 932 |
914 bool GcdPrivateGetCommandsListFunction::RunAsync() { | 933 bool GcdPrivateGetCommandsListFunction::RunAsync() { |
915 return false; | 934 return false; |
916 } | 935 } |
917 | 936 |
918 } // namespace extensions | 937 } // namespace extensions |
OLD | NEW |