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