blob: 8d2c0872f27a8c1a5a914db65c9bd43e6d83dd90 [file] [log] [blame]
Emilia Pazbf563df2021-12-01 13:54:571// Copyright 2021 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "extensions/browser/permissions_manager.h"
6#include "extensions/browser/extensions_test.h"
7#include "testing/gtest/include/gtest/gtest.h"
8#include "url/origin.h"
9
10namespace {
11
12std::unique_ptr<KeyedService> SetTestingPermissionsManager(
13 content::BrowserContext* browser_context) {
14 return std::make_unique<extensions::PermissionsManager>();
15}
16
17} // namespace
18
19namespace extensions {
20
21class PermissionsManagerUnittest : public ExtensionsTest {
22 public:
23 PermissionsManagerUnittest() = default;
24 ~PermissionsManagerUnittest() override = default;
25 PermissionsManagerUnittest(const PermissionsManagerUnittest&) = delete;
26 PermissionsManagerUnittest& operator=(const PermissionsManagerUnittest&) =
27 delete;
28
29 protected:
30 // ExtensionsTest:
31 void SetUp() override;
32
33 // PermissionsManager being tested.
34 PermissionsManager* manager_;
35};
36
37void PermissionsManagerUnittest::SetUp() {
38 ExtensionsTest::SetUp();
39 manager_ = static_cast<PermissionsManager*>(
40 PermissionsManager::GetFactory()->SetTestingFactoryAndUse(
41 browser_context(),
42 base::BindRepeating(&SetTestingPermissionsManager)));
43}
44
45bool operator==(const PermissionsManager::UserPermissionsSettings& lhs,
46 const PermissionsManager::UserPermissionsSettings& rhs) {
47 return ((lhs.restricted_sites == rhs.restricted_sites) &&
48 (lhs.permitted_sites == rhs.permitted_sites));
49}
50
51TEST_F(PermissionsManagerUnittest, AddAndRemoveRestrictedSite) {
52 const url::Origin url = url::Origin::Create(GURL("http://a.example.com"));
53 PermissionsManager::UserPermissionsSettings expected_permissions;
54 expected_permissions.restricted_sites.insert(url);
55
56 manager_->AddUserRestrictedSite(url);
57 EXPECT_EQ(manager_->GetUserPermissionsSettings(), expected_permissions);
58
59 // Adding an existent restricted site doesn't duplicate the entry.
60 manager_->AddUserRestrictedSite(url);
61 EXPECT_EQ(manager_->GetUserPermissionsSettings(), expected_permissions);
62
63 manager_->RemoveUserRestrictedSite(url);
64 EXPECT_EQ(manager_->GetUserPermissionsSettings(),
65 PermissionsManager::UserPermissionsSettings());
66}
67
68TEST_F(PermissionsManagerUnittest, AddAndRemovePermittedSite) {
69 const url::Origin url = url::Origin::Create(GURL("http://a.example.com"));
70 PermissionsManager::UserPermissionsSettings expected_permissions;
71 expected_permissions.permitted_sites.insert(url);
72
73 manager_->AddUserPermittedSite(url);
74 EXPECT_EQ(manager_->GetUserPermissionsSettings(), expected_permissions);
75
76 // Adding an existent permitted site doesn't duplicate the entry.
77 manager_->AddUserPermittedSite(url);
78 EXPECT_EQ(manager_->GetUserPermissionsSettings(), expected_permissions);
79
80 manager_->RemoveUserPermittedSite(url);
81 EXPECT_EQ(manager_->GetUserPermissionsSettings(),
82 PermissionsManager::UserPermissionsSettings());
83}
84
85TEST_F(PermissionsManagerUnittest,
86 RestrictedAndPermittedSitesAreMutuallyExclusive) {
87 const url::Origin url = url::Origin::Create(GURL("http://a.example.com"));
88 std::set<url::Origin> empty_set;
89 std::set<url::Origin> set_with_url;
90 set_with_url.insert(url);
91
92 {
93 manager_->AddUserRestrictedSite(url);
94 const PermissionsManager::UserPermissionsSettings& actual_permissions =
95 manager_->GetUserPermissionsSettings();
96 EXPECT_EQ(actual_permissions.restricted_sites, set_with_url);
97 EXPECT_EQ(actual_permissions.permitted_sites, empty_set);
98 }
99
100 {
101 // Adding an url to the permitted sites that is already in the restricted
102 // sites should remove it from restricted sites and add it to permitted
103 // sites.
104 manager_->AddUserPermittedSite(url);
105 const PermissionsManager::UserPermissionsSettings& actual_permissions =
106 manager_->GetUserPermissionsSettings();
107 EXPECT_EQ(actual_permissions.restricted_sites, empty_set);
108 EXPECT_EQ(actual_permissions.permitted_sites, set_with_url);
109 }
110
111 {
112 // Adding an url to the restricted sites that is already in the permitted
113 // sites should remove it from permitted sites and add it to restricted
114 // sites.
115 manager_->AddUserRestrictedSite(url);
116 const PermissionsManager::UserPermissionsSettings& actual_permissions =
117 manager_->GetUserPermissionsSettings();
118 EXPECT_EQ(actual_permissions.restricted_sites, set_with_url);
119 EXPECT_EQ(actual_permissions.permitted_sites, empty_set);
120 }
121}
122
123} // namespace extensions