OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/geolocation/chrome_geolocation_permission_context.h" | 5 #include "chrome/browser/geolocation/chrome_geolocation_permission_context.h" |
6 | 6 |
7 #include <functional> | 7 #include <functional> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 GURL embedder = web_contents->GetLastCommittedURL().GetOrigin(); | 182 GURL embedder = web_contents->GetLastCommittedURL().GetOrigin(); |
183 if (!requesting_frame_origin.is_valid() || !embedder.is_valid()) { | 183 if (!requesting_frame_origin.is_valid() || !embedder.is_valid()) { |
184 LOG(WARNING) << "Attempt to use geolocation from an invalid URL: " | 184 LOG(WARNING) << "Attempt to use geolocation from an invalid URL: " |
185 << requesting_frame_origin << "," << embedder | 185 << requesting_frame_origin << "," << embedder |
186 << " (geolocation is not supported in popups)"; | 186 << " (geolocation is not supported in popups)"; |
187 NotifyPermissionSet(id, requesting_frame_origin, callback, false); | 187 NotifyPermissionSet(id, requesting_frame_origin, callback, false); |
188 return; | 188 return; |
189 } | 189 } |
190 | 190 |
191 DecidePermission(web_contents, id, requesting_frame_origin, | 191 DecidePermission(web_contents, id, requesting_frame_origin, |
192 embedder, callback); | 192 embedder, "", callback); |
193 } | 193 } |
194 | 194 |
195 void ChromeGeolocationPermissionContext::CancelGeolocationPermissionRequest( | 195 void ChromeGeolocationPermissionContext::CancelGeolocationPermissionRequest( |
196 int render_process_id, | 196 int render_process_id, |
197 int render_view_id, | 197 int render_view_id, |
198 int bridge_id, | 198 int bridge_id, |
199 const GURL& requesting_frame) { | 199 const GURL& requesting_frame) { |
200 CancelPendingInfobarRequest(PermissionRequestID( | 200 CancelPendingInfobarRequest(PermissionRequestID( |
201 render_process_id, render_view_id, bridge_id, 0)); | 201 render_process_id, render_view_id, bridge_id, 0)); |
202 } | 202 } |
203 | 203 |
204 void ChromeGeolocationPermissionContext::DecidePermission( | 204 void ChromeGeolocationPermissionContext::DecidePermission( |
205 content::WebContents* web_contents, | 205 content::WebContents* web_contents, |
206 const PermissionRequestID& id, | 206 const PermissionRequestID& id, |
207 const GURL& requesting_frame, | 207 const GURL& requesting_frame, |
208 const GURL& embedder, | 208 const GURL& embedder, |
| 209 const std::string& accept_button_label, |
209 base::Callback<void(bool)> callback) { | 210 base::Callback<void(bool)> callback) { |
210 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 211 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
211 | 212 |
212 ContentSetting content_setting = | 213 ContentSetting content_setting = |
213 profile_->GetHostContentSettingsMap()->GetContentSetting( | 214 profile_->GetHostContentSettingsMap()->GetContentSetting( |
214 requesting_frame, embedder, CONTENT_SETTINGS_TYPE_GEOLOCATION, | 215 requesting_frame, embedder, CONTENT_SETTINGS_TYPE_GEOLOCATION, |
215 std::string()); | 216 std::string()); |
216 switch (content_setting) { | 217 switch (content_setting) { |
217 case CONTENT_SETTING_BLOCK: | 218 case CONTENT_SETTING_BLOCK: |
218 PermissionDecided(id, requesting_frame, embedder, callback, false); | 219 PermissionDecided(id, requesting_frame, embedder, callback, false); |
219 break; | 220 break; |
220 case CONTENT_SETTING_ALLOW: | 221 case CONTENT_SETTING_ALLOW: |
221 PermissionDecided(id, requesting_frame, embedder, callback, true); | 222 PermissionDecided(id, requesting_frame, embedder, callback, true); |
222 break; | 223 break; |
223 default: | 224 default: |
224 if (PermissionBubbleManager::Enabled()) { | 225 if (PermissionBubbleManager::Enabled()) { |
225 PermissionBubbleManager* mgr = | 226 PermissionBubbleManager* mgr = |
226 PermissionBubbleManager::FromWebContents(web_contents); | 227 PermissionBubbleManager::FromWebContents(web_contents); |
227 mgr->AddRequest(new GeolocationPermissionRequest( | 228 mgr->AddRequest(new GeolocationPermissionRequest( |
228 this, id, requesting_frame, callback, | 229 this, id, requesting_frame, callback, |
229 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages))); | 230 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages))); |
230 } else { | 231 } else { |
231 // setting == ask. Prompt the user. | 232 // setting == ask. Prompt the user. |
232 QueueController()->CreateInfoBarRequest( | 233 QueueController()->CreateInfoBarRequest( |
233 id, requesting_frame, embedder, base::Bind( | 234 id, requesting_frame, embedder, accept_button_label, |
234 &ChromeGeolocationPermissionContext::NotifyPermissionSet, | 235 base::Bind( |
| 236 &ChromeGeolocationPermissionContext::NotifyPermissionSet, |
235 base::Unretained(this), id, requesting_frame, callback)); | 237 base::Unretained(this), id, requesting_frame, callback)); |
236 } | 238 } |
237 } | 239 } |
238 } | 240 } |
239 | 241 |
| 242 void ChromeGeolocationPermissionContext::CreateInfoBarRequest( |
| 243 const PermissionRequestID& id, |
| 244 const GURL& requesting_frame, |
| 245 const GURL& embedder, |
| 246 const std::string accept_button_label, |
| 247 base::Callback<void(bool)> callback) { |
| 248 QueueController()->CreateInfoBarRequest( |
| 249 id, requesting_frame, embedder, accept_button_label, base::Bind( |
| 250 &ChromeGeolocationPermissionContext::NotifyPermissionSet, |
| 251 base::Unretained(this), id, requesting_frame, callback)); |
| 252 } |
| 253 |
240 void ChromeGeolocationPermissionContext::ShutdownOnUIThread() { | 254 void ChromeGeolocationPermissionContext::ShutdownOnUIThread() { |
241 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 255 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
242 permission_queue_controller_.reset(); | 256 permission_queue_controller_.reset(); |
243 shutting_down_ = true; | 257 shutting_down_ = true; |
244 } | 258 } |
245 | 259 |
246 void ChromeGeolocationPermissionContext::PermissionDecided( | 260 void ChromeGeolocationPermissionContext::PermissionDecided( |
247 const PermissionRequestID& id, | 261 const PermissionRequestID& id, |
248 const GURL& requesting_frame, | 262 const GURL& requesting_frame, |
249 const GURL& embedder, | 263 const GURL& embedder, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 this, id)); | 311 this, id)); |
298 return; | 312 return; |
299 } | 313 } |
300 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 314 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
301 if (shutting_down_) | 315 if (shutting_down_) |
302 return; | 316 return; |
303 | 317 |
304 // TODO(gbillock): handle permission bubble cancellation. | 318 // TODO(gbillock): handle permission bubble cancellation. |
305 QueueController()->CancelInfoBarRequest(id); | 319 QueueController()->CancelInfoBarRequest(id); |
306 } | 320 } |
OLD | NEW |