permissions_data_unittest.cc revision 424c4d7b64af9d0d8fd9624f381f469654d5e3d2
1f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// Use of this source code is governed by a BSD-style license that can be
3f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// found in the LICENSE file.
4f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
5f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include <vector>
6f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
7f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "base/command_line.h"
8f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "base/memory/ref_counted.h"
9f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "base/strings/string16.h"
10f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "base/strings/utf_string_conversions.h"
11f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/chrome_version_info.h"
12f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/extension.h"
13f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/extension_manifest_constants.h"
14f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/extension_test_util.h"
15f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/features/feature_channel.h"
16f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/permissions/api_permission.h"
17f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/permissions/permission_set.h"
18f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/permissions/permissions_data.h"
19f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "chrome/common/extensions/permissions/socket_permission.h"
20f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "content/public/common/socket_permission_request.h"
21f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "extensions/common/error_utils.h"
22f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "extensions/common/id_util.h"
23f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "extensions/common/switches.h"
24f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "extensions/common/url_pattern_set.h"
25f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include "testing/gtest/include/gtest/gtest.h"
26f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
27f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comusing content::SocketPermissionRequest;
28f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comusing extension_test_util::LoadManifest;
29f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comusing extension_test_util::LoadManifestUnchecked;
30f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comusing extension_test_util::LoadManifestStrict;
31f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
32f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comnamespace extensions {
33f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
34f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comnamespace {
35f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
36f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.combool CheckSocketPermission(
37f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    scoped_refptr<Extension> extension,
38f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    SocketPermissionRequest::OperationType type,
39f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    const char* host,
40f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    int port) {
41f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  SocketPermission::CheckParam param(type, host, port);
42f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  return PermissionsData::CheckAPIPermissionWithParam(
43f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      extension.get(), APIPermission::kSocket, &param);
44f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
45f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
46f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}  // namespace
47f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
48f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, EffectiveHostPermissions) {
49f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
50f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  URLPatternSet hosts;
51f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
52f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "empty.json");
53f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ(0u,
54f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            PermissionsData::GetEffectiveHostPermissions(extension.get())
55f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                .patterns().size());
56f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(hosts.MatchesURL(GURL("http://www.google.com")));
57f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
58f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
59f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "one_host.json");
60f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
61f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
62f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(hosts.MatchesURL(GURL("https://www.google.com")));
63f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
64f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
65f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions",
66f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           "one_host_wildcard.json");
67f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
68f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com")));
69f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://foo.google.com")));
70f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
71f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
72f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "two_hosts.json");
73f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
74f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
75f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com")));
76f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
77f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
78f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions",
79f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           "https_not_considered.json");
80f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
81f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com")));
82f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("https://google.com")));
83f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
84f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
85f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions",
86f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           "two_content_scripts.json");
87f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
88f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://google.com")));
89f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.reddit.com")));
90f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL(
91f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      GURL("http://www.reddit.com")));
92f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://news.ycombinator.com")));
93f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(extension->GetActivePermissions()->HasEffectiveAccessToURL(
94f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      GURL("http://news.ycombinator.com")));
95f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
96f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
97f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "all_hosts.json");
98f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
99f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/")));
100f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(hosts.MatchesURL(GURL("https://test/")));
101f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
102f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
103f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
104f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "all_hosts2.json");
105f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
106f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://test/")));
107f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
108f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
109f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
110f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("effective_host_permissions", "all_hosts3.json");
111f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  hosts = PermissionsData::GetEffectiveHostPermissions(extension.get());
112f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(hosts.MatchesURL(GURL("http://test/")));
113f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("https://test/")));
114f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(hosts.MatchesURL(GURL("http://www.google.com")));
115f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasEffectiveAccessToAllHosts(extension.get()));
116f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
117f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
118f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, SocketPermissions) {
119f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Set feature current channel to appropriate value.
120f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ScopedCurrentChannel scoped_channel(chrome::VersionInfo::CHANNEL_DEV);
121f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
122f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::string error;
123f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
124f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("socket_permissions", "empty.json");
125f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(CheckSocketPermission(extension,
126f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
127f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
128f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestUnchecked("socket_permissions",
129f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    "socket1.json",
130f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    Manifest::INTERNAL, Extension::NO_FLAGS,
131f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    &error);
132f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(extension.get() == NULL);
133f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(ErrorUtils::FormatErrorMessage(
134f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                extension_manifest_errors::kInvalidPermission, "socket"),
135f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            error);
136f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
137f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("socket_permissions", "socket2.json");
138f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(CheckSocketPermission(extension,
139f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      SocketPermissionRequest::TCP_CONNECT, "www.example.com", 80));
140f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(CheckSocketPermission(
141f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension, SocketPermissionRequest::UDP_BIND, "", 80));
142f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(CheckSocketPermission(
143f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension, SocketPermissionRequest::UDP_BIND, "", 8888));
144f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
145f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(CheckSocketPermission(
146f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension, SocketPermissionRequest::UDP_SEND_TO, "example.com", 1900));
147f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(CheckSocketPermission(
148f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension,
149f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        SocketPermissionRequest::UDP_SEND_TO,
150f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        "239.255.255.250", 1900));
151f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
152f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
153f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, GetPermissionMessages_ManyAPIPermissions) {
154f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
155f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("permissions", "many-apis.json");
156f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings =
157f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageStrings(extension.get());
158f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(6u, warnings.size());
159f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access your data on api.flickr.com",
160f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings[0]));
161f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Read and modify your bookmarks", UTF16ToUTF8(warnings[1]));
162f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[2]));
163f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Read and modify your browsing history", UTF16ToUTF8(warnings[3]));
164f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access your tabs and browsing activity", UTF16ToUTF8(warnings[4]));
165f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Manage your apps, extensions, and themes",
166f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings[5]));
167f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
168f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
169f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, GetPermissionMessages_ManyHostsPermissions) {
170f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
171f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("permissions", "more-than-3-hosts.json");
172f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings =
173f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageStrings(extension.get());
174f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings_details =
175f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageDetailsStrings(extension.get());
176f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(1u, warnings.size());
177f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(1u, warnings_details.size());
178f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#if defined(TOOLKIT_VIEWS) || defined(OS_MACOSX)
179f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access your data on 5 website(s)", UTF16ToUTF8(warnings[0]));
180f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("- www.a.com\n- www.b.com\n- www.c.com\n- www.d.com\n- www.e.com",
181f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings_details[0]));
182f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#else
183f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // TODO(finnur): Remove once other platforms support expandable sections.
184f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access your data on www.a.com, www.b.com, and 3 other websites",
185f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings[0]));
186f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(warnings_details[0].empty());
187f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#endif
188f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
189f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
190f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, GetPermissionMessages_LocationApiPermission) {
191f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
192f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("permissions",
193f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           "location-api.json",
194f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           Manifest::COMPONENT,
195f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                           Extension::NO_FLAGS);
196f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings =
197f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageStrings(extension.get());
198f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(1u, warnings.size());
199f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[0]));
200f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
201f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
202f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, GetPermissionMessages_ManyHosts) {
203f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
204f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("permissions", "many-hosts.json");
205f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings =
206f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageStrings(extension.get());
207f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(1u, warnings.size());
208f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access your data on encrypted.google.com and www.google.com",
209f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings[0]));
210f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
211f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
212f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST(ExtensionPermissionsTest, GetPermissionMessages_Plugins) {
213f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
214f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("permissions", "plugins.json");
215f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::vector<string16> warnings =
216f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::GetPermissionMessageStrings(extension.get());
217f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// We don't parse the plugins key on Chrome OS, so it should not ask for any
218f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// permissions.
219f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#if defined(OS_CHROMEOS)
220f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(0u, warnings.size());
221f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#else
222f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ASSERT_EQ(1u, warnings.size());
223f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ("Access all data on your computer and the websites you visit",
224f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            UTF16ToUTF8(warnings[0]));
225f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#endif
226f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
227f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
228f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage
229f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com// methods of Extension for extensions with various permissions.
230f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comclass ExtensionScriptAndCaptureVisibleTest : public testing::Test {
231f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com protected:
232f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  ExtensionScriptAndCaptureVisibleTest()
233f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      : http_url("http://www.google.com"),
234f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        http_url_with_path("http://www.google.com/index.html"),
235f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        https_url("https://www.google.com"),
236f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        file_url("file:///foo/bar"),
237f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        favicon_url("chrome://favicon/http://www.google.com"),
238f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension_url("chrome-extension://" +
239f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            id_util::GenerateIdForPath(
240f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                base::FilePath(FILE_PATH_LITERAL("foo")))),
241f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        settings_url("chrome://settings"),
242f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        about_url("about:flags") {
243f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(http_url);
244f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(http_url_with_path);
245f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(https_url);
246f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(file_url);
247f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(favicon_url);
248f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(extension_url);
249f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(settings_url);
250f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    urls_.insert(about_url);
251f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    // Ignore the policy delegate for this test.
252f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    PermissionsData::SetPolicyDelegate(NULL);
253f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
254f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
255f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool AllowedScript(const Extension* extension, const GURL& url,
256f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                     const GURL& top_url) {
257f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return PermissionsData::CanExecuteScriptOnPage(
258f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension, url, top_url, -1, NULL, -1, NULL);
259f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
260f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
261f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool BlockedScript(const Extension* extension, const GURL& url,
262f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                     const GURL& top_url) {
263f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return !PermissionsData::CanExecuteScriptOnPage(
264f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension, url, top_url, -1, NULL, -1, NULL);
265f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
266f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
267f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool Allowed(const Extension* extension, const GURL& url) {
268f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return Allowed(extension, url, -1);
269f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
270f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
271f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool Allowed(const Extension* extension, const GURL& url, int tab_id) {
272f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return (PermissionsData::CanExecuteScriptOnPage(
273f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                extension, url, url, tab_id, NULL, -1, NULL) &&
274f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com            PermissionsData::CanCaptureVisiblePage(
275f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                extension, url, tab_id, NULL));
276f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
277f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
278f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool CaptureOnly(const Extension* extension, const GURL& url) {
279f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return CaptureOnly(extension, url, -1);
280f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
281f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
282f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) {
283f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return !PermissionsData::CanExecuteScriptOnPage(
284f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                extension, url, url, tab_id, NULL, -1, NULL) &&
285f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com           PermissionsData::CanCaptureVisiblePage(extension, url, tab_id, NULL);
286f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
287f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
288f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool Blocked(const Extension* extension, const GURL& url) {
289f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return Blocked(extension, url, -1);
290f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
291f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
292f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool Blocked(const Extension* extension, const GURL& url, int tab_id) {
293f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return !(PermissionsData::CanExecuteScriptOnPage(
294f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                 extension, url, url, tab_id, NULL, -1, NULL) ||
295f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com             PermissionsData::CanCaptureVisiblePage(
296f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                 extension, url, tab_id, NULL));
297f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
298f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
299f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  bool AllowedExclusivelyOnTab(
300f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      const Extension* extension,
301f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      const std::set<GURL>& allowed_urls,
302f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      int tab_id) {
303f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    bool result = true;
304f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) {
305f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      const GURL& url = *it;
306f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      if (allowed_urls.count(url))
307f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        result &= Allowed(extension, url, tab_id);
308f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      else
309f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        result &= Blocked(extension, url, tab_id);
310f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    }
311f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    return result;
312f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
313f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
314f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // URLs that are "safe" to provide scripting and capture visible tab access
315f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // to if the permissions allow it.
316f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL http_url;
317f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL http_url_with_path;
318f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL https_url;
319f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL file_url;
320f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
321f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // We should allow host permission but not scripting permission for favicon
322f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // urls.
323f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL favicon_url;
324f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
325f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // URLs that regular extensions should never get access to.
326f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL extension_url;
327f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL settings_url;
328f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  const GURL about_url;
329f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
330f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com private:
331f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // The set of all URLs above.
332f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::set<GURL> urls_;
333f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com};
334f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
335f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
336f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test <all_urls> for regular extensions.
337f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture",
338f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_regular_all.json");
339f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
340f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
341f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
342f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
343f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
344f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url));
345f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
346f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), extension_url));
347f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
348f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test access to iframed content.
349f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  GURL within_extension_url = extension->GetResourceURL("page.html");
350f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path));
351f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path));
352f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url));
353f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url));
354f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url));
355f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url));
356f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
357f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(
358f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::HasHostPermission(extension.get(), settings_url));
359f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url));
360f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
361f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
362f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test * for scheme, which implies just the http/https schemes.
363f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
364f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_wildcard.json");
365f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
366f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
367f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
368f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
369f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
370f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
371f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension =
372f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      LoadManifest("script_and_capture", "extension_wildcard_settings.json");
373f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
374f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
375f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having chrome://*/ should not work for regular extensions. Note that
376f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // for favicon access, we require the explicit pattern chrome://favicon/*.
377f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::string error;
378f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestUnchecked("script_and_capture",
379f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    "extension_wildcard_chrome.json",
380f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    Manifest::INTERNAL, Extension::NO_FLAGS,
381f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    &error);
382f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(extension.get() == NULL);
383f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_EQ(
384f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      ErrorUtils::FormatErrorMessage(
385f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com          extension_manifest_errors::kInvalidPermissionScheme, "chrome://*/"),
386f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      error);
387f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
388f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having chrome://favicon/* should not give you chrome://*
389f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
390f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_chrome_favicon_wildcard.json");
391f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
392f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(CaptureOnly(extension.get(), favicon_url));
393f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
394f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
395f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
396f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having http://favicon should not give you chrome://favicon
397f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
398f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_http_favicon.json");
399f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
400f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
401f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
402f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Component extensions with <all_urls> should get everything.
403f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("script_and_capture", "extension_component_all.json",
404f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      Manifest::COMPONENT, Extension::NO_FLAGS);
405f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
406f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
407f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), settings_url));
408f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), about_url));
409f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), favicon_url));
410f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
411f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
412f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Component extensions should only get access to what they ask for.
413f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("script_and_capture",
414f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_component_google.json", Manifest::COMPONENT,
415f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      Extension::NO_FLAGS);
416f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
417f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), https_url));
418f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
419f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
420f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
421f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
422f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), extension_url));
423f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(
424f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::HasHostPermission(extension.get(), settings_url));
425f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
426f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
427f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) {
428f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  CommandLine::ForCurrentProcess()->AppendSwitch(
429f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      switches::kExtensionsOnChromeURLs);
430f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
431f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension;
432f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
433f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test <all_urls> for regular extensions.
434f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
435f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_regular_all.json");
436f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
437f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
438f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
439f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
440f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), favicon_url));  // chrome:// requested
441f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
442f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), extension_url));
443f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
444f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test access to iframed content.
445f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  GURL within_extension_url = extension->GetResourceURL("page.html");
446f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), http_url, http_url_with_path));
447f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), https_url, http_url_with_path));
448f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), http_url, within_extension_url));
449f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedScript(extension.get(), https_url, within_extension_url));
450f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(BlockedScript(extension.get(), http_url, extension_url));
451f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(BlockedScript(extension.get(), https_url, extension_url));
452f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
453f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(
454f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::HasHostPermission(extension.get(), settings_url));
455f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::HasHostPermission(extension.get(), about_url));
456f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
457f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
458f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Test * for scheme, which implies just the http/https schemes.
459f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
460f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_wildcard.json");
461f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
462f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
463f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
464f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
465f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
466f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
467f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension =
468f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      LoadManifest("script_and_capture", "extension_wildcard_settings.json");
469f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
470f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
471f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having chrome://*/ should work for regular extensions with the flag
472f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // enabled.
473f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::string error;
474f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestUnchecked("script_and_capture",
475f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    "extension_wildcard_chrome.json",
476f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    Manifest::INTERNAL, Extension::NO_FLAGS,
477f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    &error);
478f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(extension.get() == NULL);
479f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), http_url));
480f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), https_url));
481f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), settings_url));
482f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
483f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
484f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), favicon_url));  // chrome:// requested
485f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
486f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having chrome://favicon/* should not give you chrome://*
487f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
488f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_chrome_favicon_wildcard.json");
489f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
490f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), favicon_url));  // chrome:// requested
491f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
492f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
493f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
494f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Having http://favicon should not give you chrome://favicon
495f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifestStrict("script_and_capture",
496f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_http_favicon.json");
497f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
498f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
499f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
500f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Component extensions with <all_urls> should get everything.
501f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("script_and_capture", "extension_component_all.json",
502f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      Manifest::COMPONENT, Extension::NO_FLAGS);
503f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
504f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), https_url));
505f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), settings_url));
506f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), about_url));
507f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), favicon_url));
508f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(PermissionsData::HasHostPermission(extension.get(), favicon_url));
509f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
510f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // Component extensions should only get access to what they ask for.
511f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  extension = LoadManifest("script_and_capture",
512f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      "extension_component_google.json", Manifest::COMPONENT,
513f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      Extension::NO_FLAGS);
514f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Allowed(extension.get(), http_url));
515f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), https_url));
516f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), file_url));
517f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), settings_url));
518f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), favicon_url));
519f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), about_url));
520f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(Blocked(extension.get(), extension_url));
521f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(
522f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      PermissionsData::HasHostPermission(extension.get(), settings_url));
523f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
524f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
525f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.comTEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) {
526f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  scoped_refptr<Extension> extension =
527f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com      LoadManifestStrict("script_and_capture", "tab_specific.json");
528f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
529f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0)
530f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
531f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1)
532f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
533f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 2)
534f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
535f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
536f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::set<GURL> no_urls;
537f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
538f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0));
539f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1));
540f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
541f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
542f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  URLPatternSet allowed_hosts;
543f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
544f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                      http_url.spec()));
545f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::set<GURL> allowed_urls;
546f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  allowed_urls.insert(http_url);
547f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // http_url_with_path() will also be allowed, because Extension should be
548f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // considering the security origin of the URL not the URL itself, and
549f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  // http_url is in allowed_hosts.
550f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  allowed_urls.insert(http_url_with_path);
551f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
552f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  {
553f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    scoped_refptr<PermissionSet> permissions(
554f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet()));
555f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    PermissionsData::UpdateTabSpecificPermissions(
556f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension.get(), 0, permissions);
557f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    EXPECT_EQ(permissions->explicit_hosts(),
558f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com              PermissionsData::GetTabSpecificPermissions(extension.get(), 0)
559f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                  ->explicit_hosts());
560f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
561f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
562f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0));
563f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1));
564f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
565f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
566f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  PermissionsData::ClearTabSpecificPermissions(extension.get(), 0);
567f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0)
568f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
569f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
570f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0));
571f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1));
572f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
573f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
574f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  std::set<GURL> more_allowed_urls = allowed_urls;
575f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  more_allowed_urls.insert(https_url);
576f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  URLPatternSet more_allowed_hosts = allowed_hosts;
577f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
578f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                           https_url.spec()));
579f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
580f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  {
581f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    scoped_refptr<PermissionSet> permissions(
582f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        new PermissionSet(APIPermissionSet(), allowed_hosts, URLPatternSet()));
583f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    PermissionsData::UpdateTabSpecificPermissions(
584f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension.get(), 0, permissions);
585f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    EXPECT_EQ(permissions->explicit_hosts(),
586f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com              PermissionsData::GetTabSpecificPermissions(extension.get(), 0)
587f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                  ->explicit_hosts());
588f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
589f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    permissions = new PermissionSet(APIPermissionSet(),
590f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    more_allowed_hosts,
591f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                                    URLPatternSet());
592f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    PermissionsData::UpdateTabSpecificPermissions(
593f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com        extension.get(), 1, permissions);
594f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com    EXPECT_EQ(permissions->explicit_hosts(),
595f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com              PermissionsData::GetTabSpecificPermissions(extension.get(), 1)
596f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                  ->explicit_hosts());
597f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  }
598f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
599f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), allowed_urls, 0));
600f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1));
601f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
602f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
603f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  PermissionsData::ClearTabSpecificPermissions(extension.get(), 0);
604f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 0)
605f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
606f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
607f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0));
608f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), more_allowed_urls, 1));
609f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
610f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
611f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  PermissionsData::ClearTabSpecificPermissions(extension.get(), 1);
612f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_FALSE(PermissionsData::GetTabSpecificPermissions(extension.get(), 1)
613f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com                   .get());
614f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
615f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 0));
616f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 1));
617f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com  EXPECT_TRUE(AllowedExclusivelyOnTab(extension.get(), no_urls, 2));
618f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}
619f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com
620f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com}  // namespace extensions
621f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com