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

Side by Side Diff: chrome/browser/permissions/delegation_tracker.cc

Issue 2675483002: Replace PermissionType in chrome/ with ContentSettingsType (Closed)
Patch Set: rebase + include content_settings_types.h more Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/permissions/delegation_tracker.h" 5 #include "chrome/browser/permissions/delegation_tracker.h"
6 6
7 #include <unordered_set> 7 #include <unordered_set>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "chrome/browser/permissions/permission_util.h" 10 #include "chrome/browser/permissions/permission_util.h"
11 #include "content/public/browser/navigation_handle.h" 11 #include "content/public/browser/navigation_handle.h"
12 #include "content/public/browser/permission_type.h"
13 #include "content/public/browser/render_frame_host.h" 12 #include "content/public/browser/render_frame_host.h"
14 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
15 #include "content/public/browser/web_contents_observer.h" 14 #include "content/public/browser/web_contents_observer.h"
16 15
17 class DelegationTracker::DelegatedForChild : content::WebContentsObserver { 16 class DelegationTracker::DelegatedForChild : content::WebContentsObserver {
18 public: 17 public:
19 DelegatedForChild(content::RenderFrameHost* child_rfh, 18 DelegatedForChild(content::RenderFrameHost* child_rfh,
20 const std::vector<content::PermissionType>& permissions, 19 const std::vector<ContentSettingsType>& permissions,
21 const base::Callback<void(content::RenderFrameHost*)>& 20 const base::Callback<void(content::RenderFrameHost*)>&
22 rfh_destroyed_callback) 21 rfh_destroyed_callback)
23 : content::WebContentsObserver( 22 : content::WebContentsObserver(
24 content::WebContents::FromRenderFrameHost(child_rfh)), 23 content::WebContents::FromRenderFrameHost(child_rfh)),
25 child_rfh_(child_rfh), 24 child_rfh_(child_rfh),
26 permissions_(permissions.begin(), permissions.end()), 25 permissions_(permissions.begin(), permissions.end()),
27 rfh_destroyed_callback_(rfh_destroyed_callback) {} 26 rfh_destroyed_callback_(rfh_destroyed_callback) {}
28 27
29 ~DelegatedForChild() override {} 28 ~DelegatedForChild() override {}
30 29
31 bool HasPermission(const content::PermissionType& permission) { 30 bool HasPermission(ContentSettingsType permission) {
32 return permissions_.count(permission) == 1; 31 return permissions_.count(permission) == 1;
33 } 32 }
34 33
35 private: 34 private:
36 DISALLOW_COPY_AND_ASSIGN(DelegatedForChild); 35 DISALLOW_COPY_AND_ASSIGN(DelegatedForChild);
37 36
38 void ClearPermissions(content::RenderFrameHost* render_frame_host) { 37 void ClearPermissions(content::RenderFrameHost* render_frame_host) {
39 if (render_frame_host == child_rfh_) 38 if (render_frame_host == child_rfh_)
40 rfh_destroyed_callback_.Run(render_frame_host); // Will delete |this|. 39 rfh_destroyed_callback_.Run(render_frame_host); // Will delete |this|.
41 } 40 }
42 41
43 // WebContentsObserver 42 // WebContentsObserver
44 void RenderFrameHostChanged(content::RenderFrameHost* old_host, 43 void RenderFrameHostChanged(content::RenderFrameHost* old_host,
45 content::RenderFrameHost* new_host) override { 44 content::RenderFrameHost* new_host) override {
46 ClearPermissions(old_host); 45 ClearPermissions(old_host);
47 } 46 }
48 47
49 void FrameDeleted(content::RenderFrameHost* render_frame_host) override { 48 void FrameDeleted(content::RenderFrameHost* render_frame_host) override {
50 ClearPermissions(render_frame_host); 49 ClearPermissions(render_frame_host);
51 } 50 }
52 51
53 void DidFinishNavigation( 52 void DidFinishNavigation(
54 content::NavigationHandle* navigation_handle) override { 53 content::NavigationHandle* navigation_handle) override {
55 if (navigation_handle->HasCommitted()) 54 if (navigation_handle->HasCommitted())
56 ClearPermissions(navigation_handle->GetRenderFrameHost()); 55 ClearPermissions(navigation_handle->GetRenderFrameHost());
57 } 56 }
58 57
59 content::RenderFrameHost* child_rfh_; 58 content::RenderFrameHost* child_rfh_;
60 59
61 std::unordered_set<content::PermissionType, PermissionTypeHash> permissions_; 60 std::unordered_set<ContentSettingsType, ContentSettingsTypeHash> permissions_;
62 61
63 base::Callback<void(content::RenderFrameHost*)> rfh_destroyed_callback_; 62 base::Callback<void(content::RenderFrameHost*)> rfh_destroyed_callback_;
64 }; 63 };
65 64
66 DelegationTracker::DelegationTracker() {} 65 DelegationTracker::DelegationTracker() {}
67 66
68 DelegationTracker::~DelegationTracker() {} 67 DelegationTracker::~DelegationTracker() {}
69 68
70 void DelegationTracker::SetDelegatedPermissions( 69 void DelegationTracker::SetDelegatedPermissions(
71 content::RenderFrameHost* child_rfh, 70 content::RenderFrameHost* child_rfh,
72 const std::vector<content::PermissionType>& permissions) { 71 const std::vector<ContentSettingsType>& permissions) {
73 DCHECK(child_rfh && child_rfh->GetParent()); 72 DCHECK(child_rfh && child_rfh->GetParent());
74 delegated_permissions_[child_rfh] = base::MakeUnique<DelegatedForChild>( 73 delegated_permissions_[child_rfh] = base::MakeUnique<DelegatedForChild>(
75 child_rfh, permissions, 74 child_rfh, permissions,
76 base::Bind(&DelegationTracker::RenderFrameHostChanged, 75 base::Bind(&DelegationTracker::RenderFrameHostChanged,
77 base::Unretained(this))); 76 base::Unretained(this)));
78 } 77 }
79 78
80 bool DelegationTracker::IsGranted(content::RenderFrameHost* requesting_rfh, 79 bool DelegationTracker::IsGranted(content::RenderFrameHost* requesting_rfh,
81 const content::PermissionType& permission) { 80 ContentSettingsType permission) {
82 content::RenderFrameHost* child_rfh = requesting_rfh; 81 content::RenderFrameHost* child_rfh = requesting_rfh;
83 while (child_rfh->GetParent()) { 82 while (child_rfh->GetParent()) {
84 // Parents with unique origins can't delegate permission. 83 // Parents with unique origins can't delegate permission.
85 url::Origin parent_origin = 84 url::Origin parent_origin =
86 child_rfh->GetParent()->GetLastCommittedOrigin(); 85 child_rfh->GetParent()->GetLastCommittedOrigin();
87 if (parent_origin.unique()) 86 if (parent_origin.unique())
88 return false; 87 return false;
89 88
90 if (!child_rfh->GetLastCommittedOrigin().IsSameOriginWith(parent_origin)) { 89 if (!child_rfh->GetLastCommittedOrigin().IsSameOriginWith(parent_origin)) {
91 const auto& it = delegated_permissions_.find(child_rfh); 90 const auto& it = delegated_permissions_.find(child_rfh);
92 if (it == delegated_permissions_.end()) 91 if (it == delegated_permissions_.end())
93 return false; 92 return false;
94 if (!it->second->HasPermission(permission)) 93 if (!it->second->HasPermission(permission))
95 return false; 94 return false;
96 } 95 }
97 child_rfh = child_rfh->GetParent(); 96 child_rfh = child_rfh->GetParent();
98 } 97 }
99 return true; 98 return true;
100 } 99 }
101 100
102 void DelegationTracker::RenderFrameHostChanged(content::RenderFrameHost* rfh) { 101 void DelegationTracker::RenderFrameHostChanged(content::RenderFrameHost* rfh) {
103 delegated_permissions_.erase(rfh); 102 delegated_permissions_.erase(rfh);
104 } 103 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/delegation_tracker.h ('k') | chrome/browser/permissions/delegation_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698