Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Unified Diff: chrome/browser/permissions/delegation_tracker_unittest.cc

Issue 2046293002: Implement DelegationTracker for tracking delegated permissions to RenderFrameHosts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-delegation-2-blink
Patch Set: Implement DelegationTracker for tracking delegated permissions to RenderFrameHosts Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/permissions/delegation_tracker.cc ('k') | chrome/browser/permissions/permission_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/permissions/delegation_tracker_unittest.cc
diff --git a/chrome/browser/permissions/delegation_tracker_unittest.cc b/chrome/browser/permissions/delegation_tracker_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..68cc4134f4406a00f40bc08202ee7d091f2d9f7c
--- /dev/null
+++ b/chrome/browser/permissions/delegation_tracker_unittest.cc
@@ -0,0 +1,225 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/permissions/delegation_tracker.h"
+
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/browser/permission_type.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_renderer_host.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+using content::PermissionType;
+
+const char* kOrigin1 = "https://google.com";
+const char* kOrigin2 = "https://maps.google.com";
+const char* kOrigin3 = "https://example.com";
+const char* kUniqueOrigin = "about:blank";
+
+class DelegationTrackerTest : public ChromeRenderViewHostTestHarness {
+ protected:
+ content::RenderFrameHost* GetMainRFH(const char* origin) {
+ content::RenderFrameHost* result = web_contents()->GetMainFrame();
+ content::RenderFrameHostTester::For(result)
+ ->InitializeRenderFrameIfNeeded();
+ content::RenderFrameHostTester::For(result)->SimulateNavigationCommit(
+ GURL(origin));
+ return result;
+ }
+
+ content::RenderFrameHost* AddChildRFH(content::RenderFrameHost* parent,
+ const char* origin) {
+ content::RenderFrameHost* result =
+ content::RenderFrameHostTester::For(parent)->AppendChild("");
+ content::RenderFrameHostTester::For(result)
+ ->InitializeRenderFrameIfNeeded();
+ content::RenderFrameHostTester::For(result)->SimulateNavigationCommit(
+ GURL(origin));
+ return result;
+ }
+};
+
+TEST_F(DelegationTrackerTest, SingleFrame) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorSameOrigin) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin1);
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorNoDelegation) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorPermissionDelegated) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
+
+ tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorMultiplePermissionsDelegated) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
+
+ tracker.SetDelegatedPermissions(
+ child, {PermissionType::GEOLOCATION, PermissionType::NOTIFICATIONS});
+
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorMultipleChildren) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin2);
+ content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin2);
+
+ tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsNotDelegated) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin3);
+ content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin3);
+
+ tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
+
+ EXPECT_FALSE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsDelegated) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin3);
+ content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin3);
+
+ tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
+ tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsSameOrigin) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin1);
+ content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin1);
+ content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin1);
+
+ tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
+ tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsComplexSinglePermission) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* great_grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* grandparent =
+ AddChildRFH(great_grandparent, kOrigin2);
+ content::RenderFrameHost* parent1 = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* parent2 = AddChildRFH(grandparent, kOrigin3);
+ content::RenderFrameHost* child = AddChildRFH(parent1, kOrigin3);
+
+ tracker.SetDelegatedPermissions(grandparent, {PermissionType::GEOLOCATION});
+ tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsComplexMultiplePermissions) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* great_grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* grandparent =
+ AddChildRFH(great_grandparent, kOrigin2);
+ content::RenderFrameHost* parent1 = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* parent2 = AddChildRFH(grandparent, kOrigin3);
+ content::RenderFrameHost* child = AddChildRFH(parent1, kOrigin3);
+
+ tracker.SetDelegatedPermissions(grandparent, {PermissionType::GEOLOCATION,
+ PermissionType::NOTIFICATIONS});
+ tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::NOTIFICATIONS));
+
+ EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::NOTIFICATIONS));
+
+ EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::NOTIFICATIONS));
+
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
+}
+
+TEST_F(DelegationTrackerTest, RenderFrameHostChanged) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
+ content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin3);
+
+ tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
+ tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+
+ content::RenderFrameHostTester::For(parent)->SimulateNavigationCommit(
+ GURL(kUniqueOrigin));
+
+ EXPECT_FALSE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, UniqueOrigins) {
+ DelegationTracker tracker;
+ content::RenderFrameHost* grandparent = GetMainRFH(kUniqueOrigin);
+ content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
+ content::RenderFrameHost* child = AddChildRFH(parent, kOrigin3);
+
+ tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
+ tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
+
+ // Unique origins should never be able to delegate permission.
+ EXPECT_FALSE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
+}
« no previous file with comments | « chrome/browser/permissions/delegation_tracker.cc ('k') | chrome/browser/permissions/permission_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698