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

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: 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
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..0e4c26a6580455168ba05f37cb04aca47e533a92
--- /dev/null
+++ b/chrome/browser/permissions/delegation_tracker_unittest.cc
@@ -0,0 +1,210 @@
+// 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 "content/public/browser/permission_type.h"
+#include "content/public/test/mock_render_frame_host.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using content::PermissionType;
+
+const char* kOrigin1 = "https://google.com";
+const char* kOrigin2 = "https://maps.google.com";
+const char* kOrigin3 = "https://example.com";
+
+class TestRenderFrameHost : public content::MockRenderFrameHost {
+ public:
+ TestRenderFrameHost(TestRenderFrameHost* parent, const GURL& origin)
+ : parent_(parent), origin_(origin) {}
+
+ private:
+ // MockRenderFrameHost
+ RenderFrameHost* GetParent() override { return parent_; }
+
+ url::Origin GetLastCommittedOrigin() override { return origin_; }
+
+ TestRenderFrameHost* parent_;
+ url::Origin origin_;
+};
+
+class DelegationTrackerTest : public testing::Test {
+ protected:
+ void SetDelegatedPermissions(DelegationTracker* tracker,
+ TestRenderFrameHost* child_rfh,
+ const std::vector<PermissionType>& types) {
+ tracker->SetDelegatedPermissionsInternal(child_rfh, nullptr, types);
+ }
+
+ void RenderFrameHostChanged(DelegationTracker* tracker,
+ TestRenderFrameHost* child_rfh) {
+ tracker->RenderFrameHostChanged(child_rfh);
+ }
+};
+
+TEST_F(DelegationTrackerTest, SingleFrame) {
+ DelegationTracker tracker;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+
+ EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorSameOrigin) {
+ DelegationTracker tracker;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost child(&parent, GURL(kOrigin1));
+
+ EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorNoDelegation) {
+ DelegationTracker tracker;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost child(&parent, GURL(kOrigin2));
+
+ EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, SingleAncestorPermissionDelegated) {
+ DelegationTracker tracker;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost child(&parent, GURL(kOrigin2));
+
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost child(&parent, GURL(kOrigin2));
+
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost child1(&parent, GURL(kOrigin2));
+ TestRenderFrameHost child2(&parent, GURL(kOrigin2));
+
+ SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
+}
+
+TEST_F(DelegationTrackerTest, MultipleAncestorsNotDelegated) {
+ DelegationTracker tracker;
+ TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
+ TestRenderFrameHost child1(&parent, GURL(kOrigin3));
+ TestRenderFrameHost child2(&parent, GURL(kOrigin3));
+
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
+ TestRenderFrameHost child1(&parent, GURL(kOrigin3));
+ TestRenderFrameHost child2(&parent, GURL(kOrigin3));
+
+ SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost parent(&grandparent, GURL(kOrigin1));
+ TestRenderFrameHost child1(&parent, GURL(kOrigin1));
+ TestRenderFrameHost child2(&parent, GURL(kOrigin1));
+
+ SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
+ TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
+ TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
+ TestRenderFrameHost child(&parent1, GURL(kOrigin3));
+
+ SetDelegatedPermissions(&tracker, &grandparent,
+ {PermissionType::GEOLOCATION});
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
+ TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
+ TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
+ TestRenderFrameHost child(&parent1, GURL(kOrigin3));
+
+ SetDelegatedPermissions(
+ &tracker, &grandparent,
+ {PermissionType::GEOLOCATION, PermissionType::NOTIFICATIONS});
+ SetDelegatedPermissions(&tracker, &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;
+ TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
+ TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
+ TestRenderFrameHost child(&parent, GURL(kOrigin3));
+
+ SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
+ SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
+
+ EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
+ EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
+
+ RenderFrameHostChanged(&tracker, &parent);
+ EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
+ EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
+}

Powered by Google App Engine
This is Rietveld 408576698