OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/common/extensions/api/identity/oauth2_manifest_handler.h" | 5 #include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 } | 42 } |
43 | 43 |
44 OAuth2ManifestHandler::~OAuth2ManifestHandler() { | 44 OAuth2ManifestHandler::~OAuth2ManifestHandler() { |
45 } | 45 } |
46 | 46 |
47 bool OAuth2ManifestHandler::Parse(Extension* extension, | 47 bool OAuth2ManifestHandler::Parse(Extension* extension, |
48 base::string16* error) { | 48 base::string16* error) { |
49 scoped_ptr<OAuth2Info> info(new OAuth2Info); | 49 scoped_ptr<OAuth2Info> info(new OAuth2Info); |
50 const base::DictionaryValue* dict = NULL; | 50 const base::DictionaryValue* dict = NULL; |
51 if (!extension->manifest()->GetDictionary(keys::kOAuth2, &dict)) { | 51 if (!extension->manifest()->GetDictionary(keys::kOAuth2, &dict)) { |
52 *error = ASCIIToUTF16(errors::kInvalidOAuth2ClientId); | 52 *error = base::ASCIIToUTF16(errors::kInvalidOAuth2ClientId); |
53 return false; | 53 return false; |
54 } | 54 } |
55 | 55 |
56 // HasPath checks for whether the manifest is allowed to have | 56 // HasPath checks for whether the manifest is allowed to have |
57 // oauth2.auto_approve based on whitelist, and if it is present. | 57 // oauth2.auto_approve based on whitelist, and if it is present. |
58 // GetBoolean reads the value of auto_approve directly from dict to prevent | 58 // GetBoolean reads the value of auto_approve directly from dict to prevent |
59 // duplicate checking. | 59 // duplicate checking. |
60 if (extension->manifest()->HasPath(keys::kOAuth2AutoApprove) && | 60 if (extension->manifest()->HasPath(keys::kOAuth2AutoApprove) && |
61 !dict->GetBoolean(kAutoApprove, &info->auto_approve)) { | 61 !dict->GetBoolean(kAutoApprove, &info->auto_approve)) { |
62 *error = ASCIIToUTF16(errors::kInvalidOAuth2AutoApprove); | 62 *error = base::ASCIIToUTF16(errors::kInvalidOAuth2AutoApprove); |
63 return false; | 63 return false; |
64 } | 64 } |
65 | 65 |
66 // Component apps using auto_approve may use Chrome's client ID by | 66 // Component apps using auto_approve may use Chrome's client ID by |
67 // omitting the field. | 67 // omitting the field. |
68 if ((!dict->GetString(kClientId, &info->client_id) || | 68 if ((!dict->GetString(kClientId, &info->client_id) || |
69 info->client_id.empty()) && | 69 info->client_id.empty()) && |
70 (extension->location() != Manifest::COMPONENT || !info->auto_approve)) { | 70 (extension->location() != Manifest::COMPONENT || !info->auto_approve)) { |
71 *error = ASCIIToUTF16(errors::kInvalidOAuth2ClientId); | 71 *error = base::ASCIIToUTF16(errors::kInvalidOAuth2ClientId); |
72 return false; | 72 return false; |
73 } | 73 } |
74 | 74 |
75 const base::ListValue* list = NULL; | 75 const base::ListValue* list = NULL; |
76 if (!dict->GetList(kScopes, &list)) { | 76 if (!dict->GetList(kScopes, &list)) { |
77 *error = ASCIIToUTF16(errors::kInvalidOAuth2Scopes); | 77 *error = base::ASCIIToUTF16(errors::kInvalidOAuth2Scopes); |
78 return false; | 78 return false; |
79 } | 79 } |
80 | 80 |
81 for (size_t i = 0; i < list->GetSize(); ++i) { | 81 for (size_t i = 0; i < list->GetSize(); ++i) { |
82 std::string scope; | 82 std::string scope; |
83 if (!list->GetString(i, &scope)) { | 83 if (!list->GetString(i, &scope)) { |
84 *error = ASCIIToUTF16(errors::kInvalidOAuth2Scopes); | 84 *error = base::ASCIIToUTF16(errors::kInvalidOAuth2Scopes); |
85 return false; | 85 return false; |
86 } | 86 } |
87 info->scopes.push_back(scope); | 87 info->scopes.push_back(scope); |
88 } | 88 } |
89 | 89 |
90 extension->SetManifestData(keys::kOAuth2, info.release()); | 90 extension->SetManifestData(keys::kOAuth2, info.release()); |
91 return true; | 91 return true; |
92 } | 92 } |
93 | 93 |
94 const std::vector<std::string> OAuth2ManifestHandler::Keys() const { | 94 const std::vector<std::string> OAuth2ManifestHandler::Keys() const { |
95 return SingleKey(keys::kOAuth2); | 95 return SingleKey(keys::kOAuth2); |
96 } | 96 } |
97 | 97 |
98 } // namespace extensions | 98 } // namespace extensions |
OLD | NEW |