Chromium Code Reviews| Index: chrome/browser/geolocation/geolocation_permission_context_android.cc |
| diff --git a/chrome/browser/geolocation/geolocation_permission_context_android.cc b/chrome/browser/geolocation/geolocation_permission_context_android.cc |
| index 2441e59504926a227e1c0ee655b8baac1dbfbeb0..d906193c81e7f5985703f2d951394b756991753e 100644 |
| --- a/chrome/browser/geolocation/geolocation_permission_context_android.cc |
| +++ b/chrome/browser/geolocation/geolocation_permission_context_android.cc |
| @@ -4,16 +4,22 @@ |
| #include "chrome/browser/geolocation/geolocation_permission_context_android.h" |
| +#include <vector> |
| + |
| +#include "base/bind.h" |
| #include "chrome/browser/android/location_settings.h" |
| #include "chrome/browser/android/location_settings_impl.h" |
| #include "chrome/browser/permissions/permission_request_id.h" |
| +#include "chrome/browser/permissions/permission_update_infobar_delegate_android.h" |
| +#include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/web_contents.h" |
| #include "url/gurl.h" |
| GeolocationPermissionContextAndroid:: |
| GeolocationPermissionContextAndroid(Profile* profile) |
| : GeolocationPermissionContext(profile), |
| - location_settings_(new LocationSettingsImpl()) { |
| + location_settings_(new LocationSettingsImpl()), |
| + weak_factory_(this) { |
| } |
| GeolocationPermissionContextAndroid::~GeolocationPermissionContextAndroid() { |
| @@ -32,10 +38,43 @@ void GeolocationPermissionContextAndroid::RequestPermission( |
| return; |
| } |
| + GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin(); |
| + ContentSetting content_setting = |
| + GeolocationPermissionContext::GetPermissionStatus(requesting_frame_origin, |
| + embedding_origin); |
| + std::vector<ContentSettingsType> content_settings_types; |
| + content_settings_types.push_back(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| + if (content_setting == CONTENT_SETTING_ALLOW && |
| + PermissionUpdateInfoBarDelegate::ShouldShowPermissionInfobar( |
| + web_contents, content_settings_types)) { |
| + PermissionUpdateInfoBarDelegate::Create( |
| + web_contents, content_settings_types, |
| + base::Bind( |
| + &GeolocationPermissionContextAndroid |
| + ::HandleUpdateAndroidPermissions, |
|
Michael van Ouwerkerk
2015/07/22 09:41:26
nit: ws++++? not sure what the official way to wra
Ted C
2015/07/22 19:04:55
Done. Found a couple examples of this, so I'm con
|
| + weak_factory_.GetWeakPtr(), id, requesting_frame_origin, |
| + embedding_origin, callback)); |
| + return; |
| + } |
| + |
| GeolocationPermissionContext::RequestPermission( |
| web_contents, id, requesting_frame_origin, user_gesture, callback); |
| } |
| +void GeolocationPermissionContextAndroid::HandleUpdateAndroidPermissions( |
| + const PermissionRequestID& id, |
| + const GURL& requesting_frame_origin, |
| + const GURL& embedding_origin, |
| + const BrowserPermissionCallback& callback, |
| + bool permissions_updated) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + ContentSetting new_setting = permissions_updated |
| + ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK; |
| + |
| + NotifyPermissionSet(id, requesting_frame_origin, embedding_origin, callback, |
| + false /* persist */, new_setting); |
| +} |
| + |
| void GeolocationPermissionContextAndroid::SetLocationSettingsForTesting( |
| scoped_ptr<LocationSettings> settings) { |
| location_settings_ = settings.Pass(); |