15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/test/values_test_util.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "extensions/common/manifest_constants.h"
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace extensions {
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace keys = manifest_keys;
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace errors = manifest_errors;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace {
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Produces extension ID = "mdbihdcgjmagbcapkhhkjbbdlkflmbfo".
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kExtensionKey[] =
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCV9PlZjcTIXfnlB3HXo50OlM/CnIq0y7jm"
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    "KfPVyStaWsmFB7NaVnqUXoGb9swBDfVnZ6BrupwnxL76TWEJPo+KQMJ6uz0PPdJWi2jQfZiG"
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    "iheDiKH5Gv+dVd67qf7ly8QWW0o8qmFpqBZQpksm1hOGbfsupv9W4c42tMEIicDMLQIDAQAB";
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const char kAutoApproveNotAllowedWarning[] =
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    "'oauth2.auto_approve' is not allowed for specified extension ID.";
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass OAuth2ManifestTest : public ChromeManifestTest {
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected:
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  enum AutoApproveValue {
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    AUTO_APPROVE_NOT_SET,
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    AUTO_APPROVE_FALSE,
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    AUTO_APPROVE_TRUE,
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    AUTO_APPROVE_INVALID
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  };
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  enum ClientIdValue {
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    CLIENT_ID_DEFAULT,
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    CLIENT_ID_NOT_SET,
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    CLIENT_ID_EMPTY
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  };
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* CreateManifest(
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      AutoApproveValue auto_approve,
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      bool extension_id_whitelisted,
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ClientIdValue client_id) {
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    parsed_manifest_.reset(base::test::ParseJson(
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "{ \n"
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "  \"name\": \"test\", \n"
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "  \"version\": \"0.1\", \n"
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "  \"manifest_version\": 2, \n"
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "  \"oauth2\": { \n"
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "    \"scopes\": [ \"scope1\" ], \n"
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "  }, \n"
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        "} \n").release());
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    base::DictionaryValue* ext_manifest;
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    EXPECT_TRUE(parsed_manifest_->GetAsDictionary(&ext_manifest));
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    switch (auto_approve) {
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      case AUTO_APPROVE_NOT_SET:
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        break;
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      case AUTO_APPROVE_FALSE:
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        ext_manifest->SetBoolean(keys::kOAuth2AutoApprove, false);
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        break;
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      case AUTO_APPROVE_TRUE:
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        ext_manifest->SetBoolean(keys::kOAuth2AutoApprove, true);
667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        break;
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      case AUTO_APPROVE_INVALID:
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        ext_manifest->SetString(keys::kOAuth2AutoApprove, "incorrect value");
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        break;
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    }
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    switch (client_id) {
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      case CLIENT_ID_DEFAULT:
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        ext_manifest->SetString(keys::kOAuth2ClientId, "client1");
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        break;
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      case CLIENT_ID_NOT_SET:
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        break;
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      case CLIENT_ID_EMPTY:
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        ext_manifest->SetString(keys::kOAuth2ClientId, "");
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    }
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    if (extension_id_whitelisted)
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      ext_manifest->SetString(keys::kKey, kExtensionKey);
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return ext_manifest;
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::Value> parsed_manifest_;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(OAuth2ManifestTest, OAuth2SectionParsing) {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::DictionaryValue base_manifest;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_manifest.SetString(keys::kName, "test");
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_manifest.SetString(keys::kVersion, "0.1");
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_manifest.SetInteger(keys::kManifestVersion, 2);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_manifest.SetString(keys::kOAuth2ClientId, "client1");
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ListValue* scopes = new base::ListValue();
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scopes->Append(new base::StringValue("scope1"));
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scopes->Append(new base::StringValue("scope2"));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base_manifest.Set(keys::kOAuth2Scopes, scopes);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OAuth2 section should be parsed for an extension.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::DictionaryValue ext_manifest;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Lack of "app" section representa an extension. So the base manifest
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // itself represents an extension.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ext_manifest.MergeDictionary(&base_manifest);
1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    ext_manifest.SetString(keys::kKey, kExtensionKey);
1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    ext_manifest.SetBoolean(keys::kOAuth2AutoApprove, true);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&ext_manifest, "test");
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<extensions::Extension> extension =
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        LoadAndExpectSuccess(manifest);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(extension->install_warnings().empty());
114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ(2U, OAuth2Info::GetOAuth2Info(extension.get()).scopes.size());
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("scope1", OAuth2Info::GetOAuth2Info(extension.get()).scopes[0]);
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("scope2", OAuth2Info::GetOAuth2Info(extension.get()).scopes[1]);
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OAuth2 section should be parsed for a packaged app.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::DictionaryValue app_manifest;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    app_manifest.SetString(keys::kLaunchLocalPath, "launch.html");
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    app_manifest.MergeDictionary(&base_manifest);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&app_manifest, "test");
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<extensions::Extension> extension =
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        LoadAndExpectSuccess(manifest);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(extension->install_warnings().empty());
131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ(2U, OAuth2Info::GetOAuth2Info(extension.get()).scopes.size());
133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("scope1", OAuth2Info::GetOAuth2Info(extension.get()).scopes[0]);
134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("scope2", OAuth2Info::GetOAuth2Info(extension.get()).scopes[1]);
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OAuth2 section should NOT be parsed for a hosted app.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::DictionaryValue app_manifest;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    app_manifest.SetString(keys::kLaunchWebURL, "http://www.google.com");
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    app_manifest.MergeDictionary(&base_manifest);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(&app_manifest, "test");
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    scoped_refptr<extensions::Extension> extension =
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        LoadAndExpectSuccess(manifest);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(1U, extension->install_warnings().size());
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const extensions::InstallWarning& warning =
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        extension->install_warnings()[0];
1508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    EXPECT_EQ("'oauth2' is only allowed for extensions, legacy packaged apps, "
1518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                  "and packaged apps, but this is a hosted app.",
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              warning.message);
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_EQ("", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).scopes.empty());
155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionNotOnWhitelist) {
1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_DEFAULT);
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
1657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(extension->install_warnings().empty());
1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionNotOnWhitelist) {
1707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_FALSE, false, CLIENT_ID_DEFAULT);
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(1U, extension->install_warnings().size());
1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const extensions::InstallWarning& warning =
1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      extension->install_warnings()[0];
1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionNotOnWhitelist) {
1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_TRUE, false, CLIENT_ID_DEFAULT);
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(1U, extension->install_warnings().size());
1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const extensions::InstallWarning& warning =
1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      extension->install_warnings()[0];
1917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
1927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
1937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionNotOnWhitelist) {
1967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_INVALID, false, CLIENT_ID_DEFAULT);
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(1U, extension->install_warnings().size());
2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  const extensions::InstallWarning& warning =
2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      extension->install_warnings()[0];
2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(kAutoApproveNotAllowedWarning, warning.message);
2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveNotSetExtensionOnWhitelist) {
2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_NOT_SET, true, CLIENT_ID_DEFAULT);
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(extension->install_warnings().empty());
2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveFalseExtensionOnWhitelist) {
2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_FALSE, true, CLIENT_ID_DEFAULT);
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(extension->install_warnings().empty());
2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_FALSE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveTrueExtensionOnWhitelist) {
2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT);
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
2327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
2337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadAndExpectSuccess(manifest);
2347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(extension->install_warnings().empty());
2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).auto_approve);
2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)TEST_F(OAuth2ManifestTest, AutoApproveInvalidExtensionOnWhitelist) {
2397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::DictionaryValue* ext_manifest =
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_INVALID, true, CLIENT_ID_DEFAULT);
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::string error;
2437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<extensions::Extension> extension =
2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      LoadExtension(manifest, &error);
2457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EXPECT_EQ(
2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      "Invalid value for 'oauth2.auto_approve'. Value must be true or false.",
2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      error);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(OAuth2ManifestTest, InvalidClientId) {
251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET);
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::string error;
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId);
257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY);
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
263eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::string error;
264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    LoadAndExpectError(manifest, errors::kInvalidOAuth2ClientId);
265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(OAuth2ManifestTest, ComponentInvalidClientId) {
269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Component Apps without auto_approve must include a client ID.
270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_NOT_SET);
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::string error;
275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    LoadAndExpectError(manifest,
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       errors::kInvalidOAuth2ClientId,
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       extensions::Manifest::COMPONENT);
278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_NOT_SET, false, CLIENT_ID_EMPTY);
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::string error;
285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    LoadAndExpectError(manifest,
286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       errors::kInvalidOAuth2ClientId,
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       extensions::Manifest::COMPONENT);
288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(OAuth2ManifestTest, ComponentWithChromeClientId) {
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_NOT_SET);
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    scoped_refptr<extensions::Extension> extension =
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty());
299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  {
303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::DictionaryValue* ext_manifest =
304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_EMPTY);
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ManifestData manifest(ext_manifest, "test");
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    scoped_refptr<extensions::Extension> extension =
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(OAuth2Info::GetOAuth2Info(extension.get()).client_id.empty());
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(OAuth2ManifestTest, ComponentWithStandardClientId) {
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* ext_manifest =
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateManifest(AUTO_APPROVE_TRUE, true, CLIENT_ID_DEFAULT);
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ManifestData manifest(ext_manifest, "test");
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<extensions::Extension> extension =
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      LoadAndExpectSuccess(manifest, extensions::Manifest::COMPONENT);
319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ("client1", OAuth2Info::GetOAuth2Info(extension.get()).client_id);
320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
323