1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/strings/utf_string_conversions.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/features/feature_channel.h"
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/automation.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/grit/generated_resources.h"
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/error_utils.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/manifest_constants.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace extensions {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass AutomationManifestTest : public ChromeManifestTest {
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AutomationManifestTest() : channel_(chrome::VersionInfo::CHANNEL_UNKNOWN) {}
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) protected:
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AutomationInfo* GetAutomationInfo(scoped_refptr<Extension> extension) {
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return static_cast<AutomationInfo*>(
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        extension->GetManifestData(manifest_keys::kAutomation));
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ScopedCurrentChannel channel_;
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, AsBooleanFalse) {
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_boolean_false.json");
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0u, warnings.size());
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_FALSE(info);
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, AsBooleanTrue) {
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_boolean_true.json");
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.google.com",
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[0]));
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->interact);
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, InteractTrue) {
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_interact_true.json");
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.google.com",
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[0]));
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->interact);
80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, Matches) {
84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension = LoadAndExpectWarning(
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      "automation_matches.json",
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ErrorUtils::FormatErrorMessage(
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          automation_errors::kErrorInvalidMatch,
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          "www.badpattern.com",
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          URLPattern::GetParseResultString(
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)              URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR)));
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.google.com and www.twitter.com",
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[0]));
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->interact);
104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->matches.is_empty());
105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com/")));
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.google.com")));
108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.twitter.com/")));
109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.twitter.com")));
110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->matches.MatchesURL(GURL("http://www.bing.com/")));
112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->matches.MatchesURL(GURL("http://www.bing.com")));
113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(AutomationManifestTest, MatchesAndPermissions) {
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<Extension> extension =
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      LoadAndExpectSuccess("automation_matches_and_permissions.json");
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(extension.get());
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(2u, warnings.size());
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.google.com",
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[0]));
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.twitter.com",
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[1]));
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_TRUE(info);
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_FALSE(info->interact);
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_FALSE(info->matches.is_empty());
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.twitter.com/")));
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_TRUE(info->matches.MatchesURL(GURL("http://www.twitter.com")));
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, EmptyMatches) {
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectWarning("automation_empty_matches.json",
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                           automation_errors::kErrorNoMatchesProvided);
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(0u, warnings.size());
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->interact);
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, NoValidMatches) {
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::string error;
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      LoadExtension(ManifestData("automation_no_valid_matches.json"), &error);
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ("", error);
163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(2u, extension->install_warnings().size());
164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(ErrorUtils::FormatErrorMessage(
165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                automation_errors::kErrorInvalidMatch,
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                "www.badpattern.com",
167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                URLPattern::GetParseResultString(
168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR)),
169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            extension->install_warnings()[0].message);
170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_EQ(automation_errors::kErrorNoMatchesProvided,
171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            extension->install_warnings()[1].message);
172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(0u, warnings.size());
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->interact);
182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, DesktopFalse) {
186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_desktop_false.json");
188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ("Read and change your data on www.google.com",
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            base::UTF16ToUTF8(warnings[0]));
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->desktop);
200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(info->interact);
201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, DesktopTrue) {
205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_desktop_true.json");
207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS),
2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            warnings[0]);
2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->desktop);
219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->interact);
220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, Desktop_InteractTrue) {
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectSuccess("automation_desktop_interact_true.json");
226010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS),
2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            warnings[0]);
232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
233010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
234010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->desktop);
237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->interact);
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, Desktop_InteractFalse) {
242010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension =
243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      LoadAndExpectWarning("automation_desktop_interact_false.json",
244010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                           automation_errors::kErrorDesktopTrueInteractFalse);
245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
246010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS),
2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            warnings[0]);
2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
254010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
255010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->desktop);
257010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->interact);
258010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
260010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
261010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(AutomationManifestTest, Desktop_MatchesSpecified) {
262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_refptr<Extension> extension = LoadAndExpectWarning(
263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      "automation_desktop_matches_specified.json",
264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      automation_errors::kErrorDesktopTrueMatchesSpecified);
265010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(extension.get());
266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<base::string16> warnings =
2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      extension->permissions_data()->GetPermissionMessageStrings();
2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ASSERT_EQ(1u, warnings.size());
2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS),
2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            warnings[0]);
2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
273010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const AutomationInfo* info = AutomationInfo::Get(extension.get());
274010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ASSERT_TRUE(info);
275010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
276010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->desktop);
277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->interact);
278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(info->matches.is_empty());
279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
281010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace extensions
282