Chromium Code Reviews| 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 |