| Index: chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc
|
| diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc
|
| index 16a907f629ff25f9be52774bc7fd00c423a920ec..613a99db303a769b6739c12397fe4150e9c3ed00 100644
|
| --- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc
|
| +++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc
|
| @@ -25,15 +25,36 @@ namespace api_epki = api::enterprise_platform_keys_internal;
|
| // extension. Keep this in sync with the custom binding in Javascript.
|
| const char kErrorInvalidToken[] = "The token is not valid.";
|
|
|
| +const char kErrorInternal[] = "Internal Error.";
|
| const char kErrorAlgorithmNotSupported[] = "Algorithm not supported.";
|
| const char kErrorInvalidX509Cert[] =
|
| "Certificate is not a valid X.509 certificate.";
|
| const char kTokenIdUser[] = "user";
|
| +const char kTokenIdSystem[] = "system";
|
|
|
| // Returns whether |token_id| references a known Token.
|
| -bool ValidateToken(const std::string& token_id) {
|
| - // For now, the user token is the only valid one.
|
| - return token_id == kTokenIdUser;
|
| +bool ValidateToken(const std::string& token_id,
|
| + std::string* platform_keys_token_id) {
|
| + platform_keys_token_id->clear();
|
| + if (token_id == kTokenIdUser) {
|
| + *platform_keys_token_id = chromeos::platform_keys::kTokenIdUser;
|
| + return true;
|
| + }
|
| + if (token_id == kTokenIdSystem) {
|
| + *platform_keys_token_id = chromeos::platform_keys::kTokenIdSystem;
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +std::string PlatformKeysTokenIdToApiId(
|
| + const std::string& platform_keys_token_id) {
|
| + if (platform_keys_token_id == chromeos::platform_keys::kTokenIdUser)
|
| + return kTokenIdUser;
|
| + if (platform_keys_token_id == chromeos::platform_keys::kTokenIdSystem)
|
| + return kTokenIdSystem;
|
| +
|
| + return std::string();
|
| }
|
|
|
| } // namespace
|
| @@ -48,7 +69,8 @@ EnterprisePlatformKeysInternalGenerateKeyFunction::Run() {
|
| api_epki::GenerateKey::Params::Create(*args_));
|
| // TODO(pneubeck): Add support for unsigned integers to IDL.
|
| EXTENSION_FUNCTION_VALIDATE(params && params->modulus_length >= 0);
|
| - if (!ValidateToken(params->token_id))
|
| + std::string platform_keys_token_id;
|
| + if (!ValidateToken(params->token_id, &platform_keys_token_id))
|
| return RespondNow(Error(kErrorInvalidToken));
|
|
|
| chromeos::PlatformKeysService* service =
|
| @@ -57,7 +79,7 @@ EnterprisePlatformKeysInternalGenerateKeyFunction::Run() {
|
| DCHECK(service);
|
|
|
| service->GenerateRSAKey(
|
| - params->token_id,
|
| + platform_keys_token_id,
|
| params->modulus_length,
|
| extension_id(),
|
| base::Bind(
|
| @@ -87,7 +109,8 @@ EnterprisePlatformKeysInternalSignFunction::Run() {
|
| scoped_ptr<api_epki::Sign::Params> params(
|
| api_epki::Sign::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - if (!ValidateToken(params->token_id))
|
| + std::string platform_keys_token_id;
|
| + if (!ValidateToken(params->token_id, &platform_keys_token_id))
|
| return RespondNow(Error(kErrorInvalidToken));
|
|
|
| chromeos::platform_keys::HashAlgorithm hash_algorithm;
|
| @@ -108,7 +131,7 @@ EnterprisePlatformKeysInternalSignFunction::Run() {
|
| DCHECK(service);
|
|
|
| service->Sign(
|
| - params->token_id,
|
| + platform_keys_token_id,
|
| params->public_key,
|
| hash_algorithm,
|
| params->data,
|
| @@ -136,11 +159,12 @@ EnterprisePlatformKeysGetCertificatesFunction::Run() {
|
| scoped_ptr<api_epk::GetCertificates::Params> params(
|
| api_epk::GetCertificates::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - if (!ValidateToken(params->token_id))
|
| + std::string platform_keys_token_id;
|
| + if (!ValidateToken(params->token_id, &platform_keys_token_id))
|
| return RespondNow(Error(kErrorInvalidToken));
|
|
|
| chromeos::platform_keys::GetCertificates(
|
| - params->token_id,
|
| + platform_keys_token_id,
|
| base::Bind(
|
| &EnterprisePlatformKeysGetCertificatesFunction::OnGotCertificates,
|
| this),
|
| @@ -181,7 +205,8 @@ EnterprisePlatformKeysImportCertificateFunction::Run() {
|
| scoped_ptr<api_epk::ImportCertificate::Params> params(
|
| api_epk::ImportCertificate::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - if (!ValidateToken(params->token_id))
|
| + std::string platform_keys_token_id;
|
| + if (!ValidateToken(params->token_id, &platform_keys_token_id))
|
| return RespondNow(Error(kErrorInvalidToken));
|
|
|
| const std::string& cert_der = params->certificate;
|
| @@ -191,7 +216,7 @@ EnterprisePlatformKeysImportCertificateFunction::Run() {
|
| return RespondNow(Error(kErrorInvalidX509Cert));
|
|
|
| chromeos::platform_keys::ImportCertificate(
|
| - params->token_id,
|
| + platform_keys_token_id,
|
| cert_x509,
|
| base::Bind(&EnterprisePlatformKeysImportCertificateFunction::
|
| OnImportedCertificate,
|
| @@ -218,7 +243,8 @@ EnterprisePlatformKeysRemoveCertificateFunction::Run() {
|
| scoped_ptr<api_epk::RemoveCertificate::Params> params(
|
| api_epk::RemoveCertificate::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params);
|
| - if (!ValidateToken(params->token_id))
|
| + std::string platform_keys_token_id;
|
| + if (!ValidateToken(params->token_id, &platform_keys_token_id))
|
| return RespondNow(Error(kErrorInvalidToken));
|
|
|
| const std::string& cert_der = params->certificate;
|
| @@ -228,7 +254,7 @@ EnterprisePlatformKeysRemoveCertificateFunction::Run() {
|
| return RespondNow(Error(kErrorInvalidX509Cert));
|
|
|
| chromeos::platform_keys::RemoveCertificate(
|
| - params->token_id,
|
| + platform_keys_token_id,
|
| cert_x509,
|
| base::Bind(&EnterprisePlatformKeysRemoveCertificateFunction::
|
| OnRemovedCertificate,
|
| @@ -254,10 +280,36 @@ ExtensionFunction::ResponseAction
|
| EnterprisePlatformKeysInternalGetTokensFunction::Run() {
|
| EXTENSION_FUNCTION_VALIDATE(args_->empty());
|
|
|
| + chromeos::platform_keys::GetTokens(
|
| + base::Bind(&EnterprisePlatformKeysInternalGetTokensFunction::OnGotTokens,
|
| + this),
|
| + browser_context());
|
| + return RespondLater();
|
| +}
|
| +
|
| +void EnterprisePlatformKeysInternalGetTokensFunction::OnGotTokens(
|
| + scoped_ptr<std::vector<std::string> > platform_keys_token_ids,
|
| + const std::string& error_message) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + if (!error_message.empty()) {
|
| + Respond(Error(error_message));
|
| + return;
|
| + }
|
| +
|
| std::vector<std::string> token_ids;
|
| - token_ids.push_back(kTokenIdUser);
|
| - return RespondNow(
|
| - ArgumentList(api_epki::GetTokens::Results::Create(token_ids)));
|
| + for (std::vector<std::string>::const_iterator it =
|
| + platform_keys_token_ids->begin();
|
| + it != platform_keys_token_ids->end();
|
| + ++it) {
|
| + std::string token_id = PlatformKeysTokenIdToApiId(*it);
|
| + if (token_id.empty()) {
|
| + Respond(Error(kErrorInternal));
|
| + return;
|
| + }
|
| + token_ids.push_back(token_id);
|
| + }
|
| +
|
| + Respond(ArgumentList(api_epki::GetTokens::Results::Create(token_ids)));
|
| }
|
|
|
| } // namespace extensions
|
|
|