| Index: chrome/common/extensions/api/identity/extension_manifests_auth_unittest.cc
|
| diff --git a/chrome/common/extensions/api/identity/extension_manifests_auth_unittest.cc b/chrome/common/extensions/api/identity/extension_manifests_auth_unittest.cc
|
| deleted file mode 100644
|
| index 0606c320055f838385dc6ea0fc147d849165ed4b..0000000000000000000000000000000000000000
|
| --- a/chrome/common/extensions/api/identity/extension_manifests_auth_unittest.cc
|
| +++ /dev/null
|
| @@ -1,322 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/test/values_test_util.h"
|
| -#include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
|
| -#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
|
| -#include "extensions/common/manifest_constants.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace keys = manifest_keys;
|
| -namespace errors = manifest_errors;
|
| -
|
| -namespace {
|
| -
|
| -// Produces extension ID = "mdbihdcgjmagbcapkhhkjbbdlkflmbfo".
|
| -const char kExtensionKey[] =
|
| - "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCV9PlZjcTIXfnlB3HXo50OlM/CnIq0y7jm"
|
| - "KfPVyStaWsmFB7NaVnqUXoGb9swBDfVnZ6BrupwnxL76TWEJPo+KQMJ6uz0PPdJWi2jQfZiG"
|
| - "iheDiKH5Gv+dVd67qf7ly8QWW0o8qmFpqBZQpksm1hOGbfsupv9W4c42tMEIicDMLQIDAQAB";
|
| -const char kAutoApproveNotAllowedWarning[] =
|
| - "'oauth2.auto_approve' is not allowed for specified extension ID.";
|
| -
|
| -} // namespace
|
| -
|
| -class OAuth2ManifestTest : public ChromeManifestTest {
|
| - protected:
|
| - enum AutoApproveValue {
|
| - AUTO_APPROVE_NOT_SET,
|
| - AUTO_APPROVE_FALSE,
|
| - AUTO_APPROVE_TRUE,
|
| - AUTO_APPROVE_INVALID
|
| - };
|
| -
|
| - enum ClientIdValue {
|
| - CLIENT_ID_DEFAULT,
|
| - CLIENT_ID_NOT_SET,
|
| - CLIENT_ID_EMPTY
|
| - };
|
| -
|
| - base::DictionaryValue* CreateManifest(
|
| - AutoApproveValue auto_approve,
|
| - bool extension_id_whitelisted,
|
| - ClientIdValue client_id) {
|
| - parsed_manifest_.reset(base::test::ParseJson(
|
| - "{ \n"
|
| - " \"name\": \"test\", \n"
|
| - " \"version\": \"0.1\", \n"
|
| - " \"manifest_version\": 2, \n"
|
| - " \"oauth2\": { \n"
|
| - " \"scopes\": [ \"scope1\" ], \n"
|
| - " }, \n"
|
| - "} \n").release());
|
| - base::DictionaryValue* ext_manifest;
|
| - EXPECT_TRUE(parsed_manifest_->GetAsDictionary(&ext_manifest));
|
| - switch (auto_approve) {
|
| - case AUTO_APPROVE_NOT_SET:
|
| - break;
|
| - case AUTO_APPROVE_FALSE:
|
| - ext_manifest->SetBoolean(keys::kOAuth2AutoApprove, false);
|
| - break;
|
| - case AUTO_APPROVE_TRUE:
|
| - ext_manifest->SetBoolean(keys::kOAuth2AutoApprove, true);
|
| - break;
|
| - case AUTO_APPROVE_INVALID:
|
| - ext_manifest->SetString(keys::kOAuth2AutoApprove, "incorrect value");
|
| - break;
|
| - }
|
| - switch (client_id) {
|
| - case CLIENT_ID_DEFAULT:
|
| - ext_manifest->SetString(keys::kOAuth2ClientId, "client1");
|
| - break;
|
| - case CLIENT_ID_NOT_SET:
|
| - break;
|
| - case CLIENT_ID_EMPTY:
|
| - ext_manifest->SetString(keys::kOAuth2ClientId, "");
|
| - }
|
| - if (extension_id_whitelisted)
|
| - ext_manifest->SetString(keys::kKey, kExtensionKey);
|
| - return ext_manifest;
|
| - }
|
| -
|
| - private:
|
| - scoped_ptr<base::Value> parsed_manifest_;
|
| -};
|
| -
|
| -TEST_F(OAuth2ManifestTest, OAuth2SectionParsing) {
|
| - base::DictionaryValue base_manifest;
|
| -
|
| - base_manifest.SetString(keys::kName, "test");
|
| - base_manifest.SetString(keys::kVersion, "0.1");
|
| - base_manifest.SetInteger(keys::kManifestVersion, 2);
|
| - base_manifest.SetString(keys::kOAuth2ClientId, "client1");
|
| - base::ListValue* scopes = new base::ListValue();
|
| - scopes->Append(new base::StringValue("scope1"));
|
| - scopes->Append(new base::StringValue("scope2"));
|
| - base_manifest.Set(keys::kOAuth2Scopes, scopes);
|
| -
|
| - // OAuth2 section should be parsed for an extension.
|
| - {
|
| - base::DictionaryValue ext_manifest;
|
| - // Lack of "app" section representa an extension. So the base manifest
|
| - // itself represents an extension.
|
| - ext_manifest.MergeDictionary(&base_manifest);
|
| - ext_manifest.SetString(keys::kKey, kExtensionKey);
|
| - ext_manifest.SetBoolean(keys::kOAuth2AutoApprove, true);
|
| -
|
| - ManifestData manifest(&ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
|
| - EXPECT_EQ(2U, OAuth2Info::GetOAuth2Info(extension.get()).scopes.size());
|
| - EXPECT_EQ("scope1", OAuth2Info::GetOAuth2Info(extension.get()).scopes[0]);
|
| - EXPECT_EQ("scope2", OAuth2Info::GetOAuth2Info(extension.get()).scopes[1]);
|
| - EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| - }
|
| -
|
| - // OAuth2 section should be parsed for a packaged app.
|
| - {
|
| - base::DictionaryValue app_manifest;
|
| - app_manifest.SetString(keys::kLaunchLocalPath, "launch.html");
|
| - app_manifest.MergeDictionary(&base_manifest);
|
| -
|
| - ManifestData manifest(&app_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
|
| - EXPECT_EQ(2U, OAuth2Info::GetOAuth2Info(extension.get()).scopes.size());
|
| - EXPECT_EQ("scope1", OAuth2Info::GetOAuth2Info(extension.get()).scopes[0]);
|
| - EXPECT_EQ("scope2", OAuth2Info::GetOAuth2Info(extension.get()).scopes[1]);
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| - }
|
| -
|
| - // OAuth2 section should NOT be parsed for a hosted app.
|
| - {
|
| - base::DictionaryValue app_manifest;
|
| - app_manifest.SetString(keys::kLaunchWebURL, "http://www.google.com");
|
| - app_manifest.MergeDictionary(&base_manifest);
|
| -
|
| - ManifestData manifest(&app_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_EQ(1U, extension->install_warnings().size());
|
| - const extensions::InstallWarning& warning =
|
| - extension->install_warnings()[0];
|
| - EXPECT_EQ("'oauth2' is only allowed for extensions, legacy packaged apps, "
|
| - "and packaged apps, but this is a hosted app.",
|
| - warning.message);
|
| - EXPECT_EQ("", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
|
| - EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).scopes.empty());
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| - }
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionNotOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionNotOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_FALSE, false, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_EQ(1U, extension->install_warnings().size());
|
| - const extensions::InstallWarning& warning =
|
| - extension->install_warnings()[0];
|
| - EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionNotOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_TRUE, false, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_EQ(1U, extension->install_warnings().size());
|
| - const extensions::InstallWarning& warning =
|
| - extension->install_warnings()[0];
|
| - EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionNotOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_INVALID, false, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_EQ(1U, extension->install_warnings().size());
|
| - const extensions::InstallWarning& warning =
|
| - extension->install_warnings()[0];
|
| - EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, true, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_FALSE, true, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest);
|
| - EXPECT_TRUE(extension->install_warnings().empty());
|
| - EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionOnWhitelist) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_INVALID, true, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - std::string error;
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadExtension(manifest, &error);
|
| - EXPECT_EQ(
|
| - "Invalid value for 'oauth2.auto_approve'. Value must be true or false.",
|
| - error);
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, InvalidClientId) {
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - std::string error;
|
| - LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId);
|
| - }
|
| -
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - std::string error;
|
| - LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId);
|
| - }
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, ComponentInvalidClientId) {
|
| - // Component Apps without auto_approve must include a client ID.
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - std::string error;
|
| - LoadAndExpectError(manifest,
|
| - errors::kInvalidOAuth2ClientId,
|
| - extensions::Manifest::COMPONENT);
|
| - }
|
| -
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - std::string error;
|
| - LoadAndExpectError(manifest,
|
| - errors::kInvalidOAuth2ClientId,
|
| - extensions::Manifest::COMPONENT);
|
| - }
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, ComponentWithChromeClientId) {
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_NOT_SET);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
|
| - EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty());
|
| -
|
| - }
|
| -
|
| - {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_EMPTY);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
|
| - EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty());
|
| -
|
| - }
|
| -}
|
| -
|
| -TEST_F(OAuth2ManifestTest, ComponentWithStandardClientId) {
|
| - base::DictionaryValue* ext_manifest =
|
| - CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT);
|
| - ManifestData manifest(ext_manifest, "test");
|
| - scoped_refptr<extensions::Extension> extension =
|
| - LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
|
| - EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|