| 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 "extensions/browser/api/networking_private/networking_private_api.h" | 5 #include "extensions/browser/api/networking_private/networking_private_api.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/memory/ptr_util.h" |
| 12 #include "components/onc/onc_constants.h" | 13 #include "components/onc/onc_constants.h" |
| 14 #include "extensions/browser/api/extensions_api_client.h" |
| 15 #include "extensions/browser/api/networking_private/networking_cast_private_dele
gate.h" |
| 13 #include "extensions/browser/api/networking_private/networking_private_delegate.
h" | 16 #include "extensions/browser/api/networking_private/networking_private_delegate.
h" |
| 14 #include "extensions/browser/api/networking_private/networking_private_delegate_
factory.h" | 17 #include "extensions/browser/api/networking_private/networking_private_delegate_
factory.h" |
| 15 #include "extensions/browser/extension_function_registry.h" | 18 #include "extensions/browser/extension_function_registry.h" |
| 16 #include "extensions/common/api/networking_private.h" | 19 #include "extensions/common/api/networking_private.h" |
| 17 #include "extensions/common/extension_api.h" | 20 #include "extensions/common/extension_api.h" |
| 18 #include "extensions/common/features/feature_provider.h" | 21 #include "extensions/common/features/feature_provider.h" |
| 19 | 22 |
| 20 namespace extensions { | 23 namespace extensions { |
| 21 | 24 |
| 22 namespace { | 25 namespace { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 42 | 45 |
| 43 bool CanChangeSharedConfig(const Extension* extension, | 46 bool CanChangeSharedConfig(const Extension* extension, |
| 44 Feature::Context context) { | 47 Feature::Context context) { |
| 45 #if defined(OS_CHROMEOS) | 48 #if defined(OS_CHROMEOS) |
| 46 return context == Feature::WEBUI_CONTEXT; | 49 return context == Feature::WEBUI_CONTEXT; |
| 47 #else | 50 #else |
| 48 return true; | 51 return true; |
| 49 #endif | 52 #endif |
| 50 } | 53 } |
| 51 | 54 |
| 55 std::unique_ptr<NetworkingCastPrivateDelegate::Credentials> AsCastCredentials( |
| 56 api::networking_private::VerificationProperties& properties) { |
| 57 return base::MakeUnique<NetworkingCastPrivateDelegate::Credentials>( |
| 58 properties.certificate, |
| 59 properties.intermediate_certificates |
| 60 ? *properties.intermediate_certificates |
| 61 : std::vector<std::string>(), |
| 62 properties.signed_data, properties.device_ssid, properties.device_serial, |
| 63 properties.device_bssid, properties.public_key, properties.nonce); |
| 64 } |
| 65 |
| 52 } // namespace | 66 } // namespace |
| 53 | 67 |
| 54 namespace private_api = api::networking_private; | 68 namespace private_api = api::networking_private; |
| 55 | 69 |
| 56 namespace networking_private { | 70 namespace networking_private { |
| 57 | 71 |
| 58 // static | 72 // static |
| 59 const char kErrorAccessToSharedConfig[] = "Error.CannotChangeSharedConfig"; | 73 const char kErrorAccessToSharedConfig[] = "Error.CannotChangeSharedConfig"; |
| 60 const char kErrorInvalidNetworkGuid[] = "Error.InvalidNetworkGuid"; | 74 const char kErrorInvalidNetworkGuid[] = "Error.InvalidNetworkGuid"; |
| 61 const char kErrorInvalidNetworkOperation[] = "Error.InvalidNetworkOperation"; | 75 const char kErrorInvalidNetworkOperation[] = "Error.InvalidNetworkOperation"; |
| 62 const char kErrorNetworkUnavailable[] = "Error.NetworkUnavailable"; | 76 const char kErrorNetworkUnavailable[] = "Error.NetworkUnavailable"; |
| 63 const char kErrorEncryptionError[] = "Error.EncryptionError"; | |
| 64 const char kErrorNotReady[] = "Error.NotReady"; | 77 const char kErrorNotReady[] = "Error.NotReady"; |
| 65 const char kErrorNotSupported[] = "Error.NotSupported"; | 78 const char kErrorNotSupported[] = "Error.NotSupported"; |
| 66 const char kErrorPolicyControlled[] = "Error.PolicyControlled"; | 79 const char kErrorPolicyControlled[] = "Error.PolicyControlled"; |
| 67 const char kErrorSimLocked[] = "Error.SimLocked"; | 80 const char kErrorSimLocked[] = "Error.SimLocked"; |
| 68 | 81 |
| 69 } // namespace networking_private | 82 } // namespace networking_private |
| 70 | 83 |
| 71 //////////////////////////////////////////////////////////////////////////////// | 84 //////////////////////////////////////////////////////////////////////////////// |
| 72 // NetworkingPrivateGetPropertiesFunction | 85 // NetworkingPrivateGetPropertiesFunction |
| 73 | 86 |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 // http://crbug.com/678737 | 605 // http://crbug.com/678737 |
| 593 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), | 606 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), |
| 594 source_url())) { | 607 source_url())) { |
| 595 return RespondNow(Error(kPrivateOnlyError)); | 608 return RespondNow(Error(kPrivateOnlyError)); |
| 596 } | 609 } |
| 597 | 610 |
| 598 std::unique_ptr<private_api::VerifyDestination::Params> params = | 611 std::unique_ptr<private_api::VerifyDestination::Params> params = |
| 599 private_api::VerifyDestination::Params::Create(*args_); | 612 private_api::VerifyDestination::Params::Create(*args_); |
| 600 EXTENSION_FUNCTION_VALIDATE(params); | 613 EXTENSION_FUNCTION_VALIDATE(params); |
| 601 | 614 |
| 602 GetDelegate(browser_context()) | 615 NetworkingCastPrivateDelegate* delegate = |
| 603 ->VerifyDestination( | 616 ExtensionsAPIClient::Get()->GetNetworkingCastPrivateDelegate(); |
| 604 params->properties, | 617 if (!delegate) |
| 605 base::Bind(&NetworkingPrivateVerifyDestinationFunction::Success, | 618 return RespondNow(Error("Not supported.")); |
| 606 this), | 619 |
| 607 base::Bind(&NetworkingPrivateVerifyDestinationFunction::Failure, | 620 delegate->VerifyDestination( |
| 608 this)); | 621 AsCastCredentials(params->properties), |
| 622 base::Bind(&NetworkingPrivateVerifyDestinationFunction::Success, this), |
| 623 base::Bind(&NetworkingPrivateVerifyDestinationFunction::Failure, this)); |
| 609 // Success() or Failure() might have been called synchronously at this point. | 624 // Success() or Failure() might have been called synchronously at this point. |
| 610 // In that case this function has already called Respond(). Return | 625 // In that case this function has already called Respond(). Return |
| 611 // AlreadyResponded() in that case. | 626 // AlreadyResponded() in that case. |
| 612 return did_respond() ? AlreadyResponded() : RespondLater(); | 627 return did_respond() ? AlreadyResponded() : RespondLater(); |
| 613 } | 628 } |
| 614 | 629 |
| 615 void NetworkingPrivateVerifyDestinationFunction::Success(bool result) { | 630 void NetworkingPrivateVerifyDestinationFunction::Success(bool result) { |
| 616 Respond( | 631 Respond( |
| 617 ArgumentList(private_api::VerifyDestination::Results::Create(result))); | 632 ArgumentList(private_api::VerifyDestination::Results::Create(result))); |
| 618 } | 633 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 636 // TODO(tbarzic): Consider exposing this via separate API. | 651 // TODO(tbarzic): Consider exposing this via separate API. |
| 637 // http://crbug.com/678737 | 652 // http://crbug.com/678737 |
| 638 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), | 653 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), |
| 639 source_url())) { | 654 source_url())) { |
| 640 return RespondNow(Error(kPrivateOnlyError)); | 655 return RespondNow(Error(kPrivateOnlyError)); |
| 641 } | 656 } |
| 642 std::unique_ptr<private_api::VerifyAndEncryptCredentials::Params> params = | 657 std::unique_ptr<private_api::VerifyAndEncryptCredentials::Params> params = |
| 643 private_api::VerifyAndEncryptCredentials::Params::Create(*args_); | 658 private_api::VerifyAndEncryptCredentials::Params::Create(*args_); |
| 644 EXTENSION_FUNCTION_VALIDATE(params); | 659 EXTENSION_FUNCTION_VALIDATE(params); |
| 645 | 660 |
| 646 GetDelegate(browser_context()) | 661 NetworkingCastPrivateDelegate* delegate = |
| 647 ->VerifyAndEncryptCredentials( | 662 ExtensionsAPIClient::Get()->GetNetworkingCastPrivateDelegate(); |
| 648 params->network_guid, params->properties, | 663 if (!delegate) |
| 649 base::Bind( | 664 return RespondNow(Error("Not supported.")); |
| 650 &NetworkingPrivateVerifyAndEncryptCredentialsFunction::Success, | 665 |
| 651 this), | 666 delegate->VerifyAndEncryptCredentials( |
| 652 base::Bind( | 667 params->network_guid, AsCastCredentials(params->properties), |
| 653 &NetworkingPrivateVerifyAndEncryptCredentialsFunction::Failure, | 668 base::Bind(&NetworkingPrivateVerifyAndEncryptCredentialsFunction::Success, |
| 654 this)); | 669 this), |
| 670 base::Bind(&NetworkingPrivateVerifyAndEncryptCredentialsFunction::Failure, |
| 671 this)); |
| 655 // Success() or Failure() might have been called synchronously at this point. | 672 // Success() or Failure() might have been called synchronously at this point. |
| 656 // In that case this function has already called Respond(). Return | 673 // In that case this function has already called Respond(). Return |
| 657 // AlreadyResponded() in that case. | 674 // AlreadyResponded() in that case. |
| 658 return did_respond() ? AlreadyResponded() : RespondLater(); | 675 return did_respond() ? AlreadyResponded() : RespondLater(); |
| 659 } | 676 } |
| 660 | 677 |
| 661 void NetworkingPrivateVerifyAndEncryptCredentialsFunction::Success( | 678 void NetworkingPrivateVerifyAndEncryptCredentialsFunction::Success( |
| 662 const std::string& result) { | 679 const std::string& result) { |
| 663 Respond(ArgumentList( | 680 Respond(ArgumentList( |
| 664 private_api::VerifyAndEncryptCredentials::Results::Create(result))); | 681 private_api::VerifyAndEncryptCredentials::Results::Create(result))); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 683 // TODO(tbarzic): Consider exposing this via separate API. | 700 // TODO(tbarzic): Consider exposing this via separate API. |
| 684 // http://crbug.com/678737 | 701 // http://crbug.com/678737 |
| 685 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), | 702 if (!HasPrivateNetworkingAccess(extension(), source_context_type(), |
| 686 source_url())) { | 703 source_url())) { |
| 687 return RespondNow(Error(kPrivateOnlyError)); | 704 return RespondNow(Error(kPrivateOnlyError)); |
| 688 } | 705 } |
| 689 std::unique_ptr<private_api::VerifyAndEncryptData::Params> params = | 706 std::unique_ptr<private_api::VerifyAndEncryptData::Params> params = |
| 690 private_api::VerifyAndEncryptData::Params::Create(*args_); | 707 private_api::VerifyAndEncryptData::Params::Create(*args_); |
| 691 EXTENSION_FUNCTION_VALIDATE(params); | 708 EXTENSION_FUNCTION_VALIDATE(params); |
| 692 | 709 |
| 693 GetDelegate(browser_context()) | 710 NetworkingCastPrivateDelegate* delegate = |
| 694 ->VerifyAndEncryptData( | 711 ExtensionsAPIClient::Get()->GetNetworkingCastPrivateDelegate(); |
| 695 params->properties, params->data, | 712 if (!delegate) |
| 696 base::Bind(&NetworkingPrivateVerifyAndEncryptDataFunction::Success, | 713 return RespondNow(Error("Not supported.")); |
| 697 this), | 714 |
| 698 base::Bind(&NetworkingPrivateVerifyAndEncryptDataFunction::Failure, | 715 delegate->VerifyAndEncryptData( |
| 699 this)); | 716 params->data, AsCastCredentials(params->properties), |
| 717 base::Bind(&NetworkingPrivateVerifyAndEncryptDataFunction::Success, this), |
| 718 base::Bind(&NetworkingPrivateVerifyAndEncryptDataFunction::Failure, |
| 719 this)); |
| 700 // Success() or Failure() might have been called synchronously at this point. | 720 // Success() or Failure() might have been called synchronously at this point. |
| 701 // In that case this function has already called Respond(). Return | 721 // In that case this function has already called Respond(). Return |
| 702 // AlreadyResponded() in that case. | 722 // AlreadyResponded() in that case. |
| 703 return did_respond() ? AlreadyResponded() : RespondLater(); | 723 return did_respond() ? AlreadyResponded() : RespondLater(); |
| 704 } | 724 } |
| 705 | 725 |
| 706 void NetworkingPrivateVerifyAndEncryptDataFunction::Success( | 726 void NetworkingPrivateVerifyAndEncryptDataFunction::Success( |
| 707 const std::string& result) { | 727 const std::string& result) { |
| 708 Respond( | 728 Respond( |
| 709 ArgumentList(private_api::VerifyAndEncryptData::Results::Create(result))); | 729 ArgumentList(private_api::VerifyAndEncryptData::Results::Create(result))); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 // private_api::GlobalPolicy is a subset of the global policy dictionary | 945 // private_api::GlobalPolicy is a subset of the global policy dictionary |
| 926 // (by definition), so use the api setter/getter to generate the subset. | 946 // (by definition), so use the api setter/getter to generate the subset. |
| 927 std::unique_ptr<private_api::GlobalPolicy> policy( | 947 std::unique_ptr<private_api::GlobalPolicy> policy( |
| 928 private_api::GlobalPolicy::FromValue(*policy_dict)); | 948 private_api::GlobalPolicy::FromValue(*policy_dict)); |
| 929 DCHECK(policy); | 949 DCHECK(policy); |
| 930 return RespondNow( | 950 return RespondNow( |
| 931 ArgumentList(private_api::GetGlobalPolicy::Results::Create(*policy))); | 951 ArgumentList(private_api::GetGlobalPolicy::Results::Create(*policy))); |
| 932 } | 952 } |
| 933 | 953 |
| 934 } // namespace extensions | 954 } // namespace extensions |
| OLD | NEW |