| 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));
|
| +}
|
|
|