OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/permissions/permission_service_impl.h" | 5 #include "content/browser/permissions/permission_service_impl.h" |
6 | 6 |
7 #include "content/public/browser/content_browser_client.h" | 7 #include "content/public/browser/content_browser_client.h" |
8 | 8 |
9 namespace content { | 9 namespace content { |
10 | 10 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
107 | 107 |
108 pending_requests_.Clear(); | 108 pending_requests_.Clear(); |
109 } | 109 } |
110 | 110 |
111 void PermissionServiceImpl::HasPermission( | 111 void PermissionServiceImpl::HasPermission( |
112 PermissionName permission, | 112 PermissionName permission, |
113 const mojo::String& origin, | 113 const mojo::String& origin, |
114 const mojo::Callback<void(PermissionStatus)>& callback) { | 114 const mojo::Callback<void(PermissionStatus)>& callback) { |
115 DCHECK(context_->GetBrowserContext()); | 115 DCHECK(context_->GetBrowserContext()); |
116 | 116 |
117 callback.Run(GetPermissionStatus(PermissionNameToPermissionType(permission), | 117 callback.Run(GetPermissionStatus(permission, GURL(origin))); |
118 GURL(origin))); | |
119 } | 118 } |
120 | 119 |
121 void PermissionServiceImpl::RevokePermission( | 120 void PermissionServiceImpl::RevokePermission( |
122 PermissionName permission, | 121 PermissionName permission, |
123 const mojo::String& origin, | 122 const mojo::String& origin, |
124 const mojo::Callback<void(PermissionStatus)>& callback) { | 123 const mojo::Callback<void(PermissionStatus)>& callback) { |
125 GURL origin_url(origin); | 124 GURL origin_url(origin); |
126 PermissionType permission_type = PermissionNameToPermissionType(permission); | 125 PermissionType permission_type = PermissionNameToPermissionType(permission); |
127 PermissionStatus status = GetPermissionStatus(permission_type, origin_url); | 126 PermissionStatus status = GetPermissionStatus(permission_type, origin_url); |
128 | 127 |
129 // Resetting the permission should only be possible if the permission is | 128 // Resetting the permission should only be possible if the permission is |
130 // already granted. | 129 // already granted. |
131 if (status != PERMISSION_STATUS_GRANTED) { | 130 if (status != PERMISSION_STATUS_GRANTED) { |
132 callback.Run(status); | 131 callback.Run(status); |
133 return; | 132 return; |
134 } | 133 } |
135 | 134 |
136 ResetPermissionStatus(permission_type, origin_url); | 135 ResetPermissionStatus(permission_type, origin_url); |
137 | 136 |
138 callback.Run(GetPermissionStatus(permission_type, origin_url)); | 137 callback.Run(GetPermissionStatus(permission_type, origin_url)); |
139 } | 138 } |
140 | 139 |
141 PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type, | 140 void PermissionServiceImpl::GetNextPermissionChange( |
142 GURL origin) { | 141 PermissionName permission, |
142 const mojo::String& origin, | |
143 PermissionStatus last_known_status, | |
144 const mojo::Callback<void(PermissionStatus)>& callback) { | |
145 PermissionStatus current_status = | |
146 GetPermissionStatus(permission, GURL(origin)); | |
147 if (current_status != last_known_status) { | |
148 callback.Run(current_status); | |
149 return; | |
150 } | |
151 | |
152 PendingSubscription* subscription = new PendingSubscription(); | |
153 int id = pending_subscriptions_.Add(subscription); | |
Bernhard Bauer
2015/03/11 14:06:18
I don't think you need this map. You could create
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Didn't use a scoped_ptr but a raw pointer that is
| |
154 | |
155 // If the embedding_origin is empty, we,ll use the |origin| instead. | |
Bernhard Bauer
2015/03/11 14:06:18
Nit: "we'll". Also, move the code here that falls
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Done.
| |
156 GURL embedding_origin = context_->GetEmbeddingOrigin(); | |
157 subscription->subscription_id = | |
158 GetContentClient()->browser()->SubscribePermissionStatusChange( | |
159 PermissionNameToPermissionType(permission), | |
160 context_->GetBrowserContext(), | |
161 GURL(origin), | |
162 embedding_origin.is_empty() ? GURL(origin) : embedding_origin, | |
163 base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged, | |
164 weak_factory_.GetWeakPtr(), | |
165 callback, | |
166 id)); | |
167 } | |
168 | |
169 PermissionStatus PermissionServiceImpl::GetPermissionStatus( | |
Bernhard Bauer
2015/03/11 14:06:18
Overloading methods is discouraged by the style gu
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Snif. I fixed that. GetPermissionStatusFromType()
| |
170 PermissionName permission, const GURL& origin) { | |
171 return GetPermissionStatus(PermissionNameToPermissionType(permission), | |
172 origin); | |
173 } | |
174 | |
175 PermissionStatus PermissionServiceImpl::GetPermissionStatus( | |
176 PermissionType type, const GURL& origin) { | |
143 // If the embedding_origin is empty we'll use |origin| instead. | 177 // If the embedding_origin is empty we'll use |origin| instead. |
144 GURL embedding_origin = context_->GetEmbeddingOrigin(); | 178 GURL embedding_origin = context_->GetEmbeddingOrigin(); |
145 return GetContentClient()->browser()->GetPermissionStatus( | 179 return GetContentClient()->browser()->GetPermissionStatus( |
146 type, context_->GetBrowserContext(), origin, | 180 type, context_->GetBrowserContext(), origin, |
147 embedding_origin.is_empty() ? origin : embedding_origin); | 181 embedding_origin.is_empty() ? origin : embedding_origin); |
148 } | 182 } |
149 | 183 |
150 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, | 184 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, |
151 GURL origin) { | 185 const GURL& origin) { |
152 // If the embedding_origin is empty we'll use |origin| instead. | 186 // If the embedding_origin is empty we'll use |origin| instead. |
153 GURL embedding_origin = context_->GetEmbeddingOrigin(); | 187 GURL embedding_origin = context_->GetEmbeddingOrigin(); |
154 GetContentClient()->browser()->ResetPermission( | 188 GetContentClient()->browser()->ResetPermission( |
155 type, context_->GetBrowserContext(), origin, | 189 type, context_->GetBrowserContext(), origin, |
156 embedding_origin.is_empty() ? origin : embedding_origin); | 190 embedding_origin.is_empty() ? origin : embedding_origin); |
157 } | 191 } |
158 | 192 |
193 void PermissionServiceImpl::OnPermissionStatusChanged( | |
194 const mojo::Callback<void(PermissionStatus)>& callback, | |
Bernhard Bauer
2015/03/11 14:06:18
Are you going to call the callback?
mlamouri (slow - plz ping)
2015/03/18 16:24:40
Oups :)
| |
195 int pending_subscription_id, | |
196 PermissionStatus status) { | |
197 PendingSubscription* subscription = | |
198 pending_subscriptions_.Lookup(pending_subscription_id); | |
199 GetContentClient()->browser()->UnsubscribePermissionStatusChange( | |
200 context_->GetBrowserContext(), | |
201 subscription->subscription_id); | |
202 | |
203 pending_subscriptions_.Remove(pending_subscription_id); | |
204 } | |
205 | |
159 } // namespace content | 206 } // namespace content |
OLD | NEW |