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

Unified Diff: chrome/browser/geolocation/geolocation_permission_context.cc

Issue 459953002: Migrate geolocation permissions to the new common permission class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/geolocation/geolocation_permission_context.cc
diff --git a/chrome/browser/geolocation/geolocation_permission_context.cc b/chrome/browser/geolocation/geolocation_permission_context.cc
index d9e03732662382d2a1c3aac5cbf6bcffd343b37c..af63c43a31795cb6d5cd6f5a578b0a910e06887e 100644
--- a/chrome/browser/geolocation/geolocation_permission_context.cc
+++ b/chrome/browser/geolocation/geolocation_permission_context.cc
@@ -4,339 +4,78 @@
#include "chrome/browser/geolocation/geolocation_permission_context.h"
-#include <functional>
-#include <string>
-#include <vector>
-
#include "base/bind.h"
-#include "base/prefs/pref_service.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/tab_contents/tab_util.h"
-#include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
-#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/grit/generated_resources.h"
#include "components/content_settings/core/common/permission_request_id.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
-#include "grit/theme_resources.h"
-#include "net/base/net_util.h"
-#include "ui/base/l10n/l10n_util.h"
-
-class GeolocationPermissionRequest : public PermissionBubbleRequest {
- public:
- GeolocationPermissionRequest(GeolocationPermissionContext* context,
- const PermissionRequestID& id,
- const GURL& requesting_frame,
- const GURL& embedder,
- bool user_gesture,
- base::Callback<void(bool)> callback,
- const std::string& display_languages);
- virtual ~GeolocationPermissionRequest();
-
- // PermissionBubbleDelegate:
- virtual int GetIconID() const OVERRIDE;
- virtual base::string16 GetMessageText() const OVERRIDE;
- virtual base::string16 GetMessageTextFragment() const OVERRIDE;
- virtual bool HasUserGesture() const OVERRIDE;
- virtual GURL GetRequestingHostname() const OVERRIDE;
- virtual void PermissionGranted() OVERRIDE;
- virtual void PermissionDenied() OVERRIDE;
- virtual void Cancelled() OVERRIDE;
- virtual void RequestFinished() OVERRIDE;
-
- private:
- GeolocationPermissionContext* context_;
- PermissionRequestID id_;
- GURL requesting_frame_;
- GURL embedder_;
- bool user_gesture_;
- base::Callback<void(bool)> callback_;
- std::string display_languages_;
-};
-
-GeolocationPermissionRequest::GeolocationPermissionRequest(
- GeolocationPermissionContext* context,
- const PermissionRequestID& id,
- const GURL& requesting_frame,
- const GURL& embedder,
- bool user_gesture,
- base::Callback<void(bool)> callback,
- const std::string& display_languages)
- : context_(context),
- id_(id),
- requesting_frame_(requesting_frame),
- embedder_(embedder),
- user_gesture_(user_gesture),
- callback_(callback),
- display_languages_(display_languages) {}
-
-GeolocationPermissionRequest::~GeolocationPermissionRequest() {}
-
-int GeolocationPermissionRequest::GetIconID() const {
- return IDR_INFOBAR_GEOLOCATION;
-}
-
-base::string16 GeolocationPermissionRequest::GetMessageText() const {
- return l10n_util::GetStringFUTF16(
- IDS_GEOLOCATION_INFOBAR_QUESTION,
- net::FormatUrl(requesting_frame_.GetOrigin(), display_languages_,
- net::kFormatUrlOmitUsernamePassword |
- net::kFormatUrlOmitTrailingSlashOnBareHostname,
- net::UnescapeRule::SPACES, NULL, NULL, NULL));
-}
-
-base::string16 GeolocationPermissionRequest::GetMessageTextFragment() const {
- return l10n_util::GetStringUTF16(IDS_GEOLOCATION_INFOBAR_PERMISSION_FRAGMENT);
-}
-
-bool GeolocationPermissionRequest::HasUserGesture() const {
- return user_gesture_;
-}
-
-GURL GeolocationPermissionRequest::GetRequestingHostname() const {
- return requesting_frame_;
-}
-
-void GeolocationPermissionRequest::PermissionGranted() {
- context_->QueueController()->UpdateContentSetting(
- requesting_frame_, embedder_, true);
- context_->NotifyPermissionSet(id_, requesting_frame_, callback_, true);
-}
-
-void GeolocationPermissionRequest::PermissionDenied() {
- context_->QueueController()->UpdateContentSetting(
- requesting_frame_, embedder_, false);
- context_->NotifyPermissionSet(id_, requesting_frame_, callback_, false);
-}
-
-void GeolocationPermissionRequest::Cancelled() {
-}
-
-void GeolocationPermissionRequest::RequestFinished() {
- // Deletes 'this'.
- context_->RequestFinished(this);
-}
GeolocationPermissionContext::GeolocationPermissionContext(
Profile* profile)
- : profile_(profile),
- shutting_down_(false),
+ : PermissionContextBase(profile, CONTENT_SETTINGS_TYPE_GEOLOCATION),
extensions_context_(profile) {
}
GeolocationPermissionContext::~GeolocationPermissionContext() {
- // GeolocationPermissionContext may be destroyed on either the UI thread
- // or the IO thread, but the PermissionQueueController must have been
- // destroyed on the UI thread.
- DCHECK(!permission_queue_controller_.get());
}
-void GeolocationPermissionContext::RequestGeolocationPermission(
+void GeolocationPermissionContext::RequestPermission(
content::WebContents* web_contents,
- int bridge_id,
- const GURL& requesting_frame,
+ const PermissionRequestID& id,
+ const GURL& requesting_frame_origin,
bool user_gesture,
- base::Callback<void(bool)> result_callback,
- base::Closure* cancel_callback) {
- GURL requesting_frame_origin = requesting_frame.GetOrigin();
- if (shutting_down_)
- return;
-
- int render_process_id = web_contents->GetRenderProcessHost()->GetID();
- int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID();
- if (cancel_callback) {
- *cancel_callback = base::Bind(
- &GeolocationPermissionContext::CancelGeolocationPermissionRequest,
- this, render_process_id, render_view_id, bridge_id);
- }
-
- const PermissionRequestID id(
- render_process_id, render_view_id, bridge_id, GURL());
+ const BrowserPermissionCallback& callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ GURL embedder_origin = web_contents->GetLastCommittedURL().GetOrigin();
bool permission_set;
bool new_permission;
if (extensions_context_.RequestPermission(
- web_contents, id, bridge_id, requesting_frame, user_gesture,
- result_callback, &permission_set, &new_permission)) {
+ web_contents, id, id.bridge_id(), requesting_frame_origin, user_gesture,
+ callback, &permission_set, &new_permission)) {
if (permission_set) {
- NotifyPermissionSet(id, requesting_frame_origin, result_callback,
- new_permission);
+ NotifyPermissionSet(id, requesting_frame_origin, embedder_origin,
+ callback, true, new_permission);
}
return;
}
- GURL embedder = web_contents->GetLastCommittedURL().GetOrigin();
- if (!requesting_frame_origin.is_valid() || !embedder.is_valid()) {
+ if (!requesting_frame_origin.is_valid() || !embedder_origin.is_valid()) {
LOG(WARNING) << "Attempt to use geolocation from an invalid URL: "
- << requesting_frame_origin << "," << embedder
- << " (geolocation is not supported in popups)";
- NotifyPermissionSet(id, requesting_frame_origin, result_callback, false);
+ << requesting_frame_origin << "," << embedder_origin
+ << " (geolocation is not supported in popups)";
+ NotifyPermissionSet(id, requesting_frame_origin, embedder_origin,
+ callback, false /* persist */, false /* allowed */);
return;
}
- DecidePermission(web_contents, id, requesting_frame_origin, user_gesture,
- embedder, result_callback);
-}
-
-void GeolocationPermissionContext::CancelGeolocationPermissionRequest(
- int render_process_id,
- int render_view_id,
- int bridge_id) {
- content::WebContents* web_contents = tab_util::GetWebContentsByID(
- render_process_id, render_view_id);
- if (extensions_context_.CancelPermissionRequest(web_contents, bridge_id))
- return;
-
- CancelPendingInfobarRequest(PermissionRequestID(
- render_process_id, render_view_id, bridge_id, GURL()));
+ PermissionContextBase::RequestPermission(web_contents, id,
+ requesting_frame_origin,
+ user_gesture,
+ callback);
}
-void GeolocationPermissionContext::DecidePermission(
+void GeolocationPermissionContext::CancelPermissionRequest(
content::WebContents* web_contents,
- const PermissionRequestID& id,
- const GURL& requesting_frame,
- bool user_gesture,
- const GURL& embedder,
- base::Callback<void(bool)> callback) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
- ContentSetting content_setting =
- profile_->GetHostContentSettingsMap()
- ->GetContentSettingAndMaybeUpdateLastUsage(
- requesting_frame,
- embedder,
- CONTENT_SETTINGS_TYPE_GEOLOCATION,
- std::string());
- switch (content_setting) {
- case CONTENT_SETTING_BLOCK:
- PermissionDecided(id, requesting_frame, embedder, callback, false);
- break;
- case CONTENT_SETTING_ALLOW:
- PermissionDecided(id, requesting_frame, embedder, callback, true);
- break;
- default:
- if (PermissionBubbleManager::Enabled()) {
- PermissionBubbleManager* mgr =
- PermissionBubbleManager::FromWebContents(web_contents);
- if (mgr) {
- scoped_ptr<GeolocationPermissionRequest> request_ptr(
- new GeolocationPermissionRequest(
- this, id, requesting_frame, embedder, user_gesture, callback,
- profile_->GetPrefs()->GetString(prefs::kAcceptLanguages)));
- GeolocationPermissionRequest* request = request_ptr.get();
- pending_requests_.add(id.ToString(), request_ptr.Pass());
- mgr->AddRequest(request);
- }
- } else {
- // setting == ask. Prompt the user.
- QueueController()->CreateInfoBarRequest(
- id, requesting_frame, embedder,
- base::Bind(
- &GeolocationPermissionContext::NotifyPermissionSet,
- base::Unretained(this), id, requesting_frame, callback));
- }
- }
-}
-
-void GeolocationPermissionContext::CreateInfoBarRequest(
- const PermissionRequestID& id,
- const GURL& requesting_frame,
- const GURL& embedder,
- base::Callback<void(bool)> callback) {
- QueueController()->CreateInfoBarRequest(
- id, requesting_frame, embedder, base::Bind(
- &GeolocationPermissionContext::NotifyPermissionSet,
- base::Unretained(this), id, requesting_frame, callback));
-}
+ const PermissionRequestID& id) {
-void GeolocationPermissionContext::RequestFinished(
- GeolocationPermissionRequest* request) {
- base::ScopedPtrHashMap<std::string,
- GeolocationPermissionRequest>::iterator it;
- for (it = pending_requests_.begin(); it != pending_requests_.end(); ++it) {
- if (it->second == request) {
- pending_requests_.take_and_erase(it);
+ if (extensions_context_.CancelPermissionRequest(
+ web_contents, id.bridge_id()))
return;
- }
- }
+ PermissionContextBase::CancelPermissionRequest(web_contents, id);
}
-
-void GeolocationPermissionContext::ShutdownOnUIThread() {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- permission_queue_controller_.reset();
- shutting_down_ = true;
-}
-
-void GeolocationPermissionContext::PermissionDecided(
+void GeolocationPermissionContext::UpdateTabContext(
const PermissionRequestID& id,
const GURL& requesting_frame,
- const GURL& embedder,
- base::Callback<void(bool)> callback,
bool allowed) {
- NotifyPermissionSet(id, requesting_frame, callback, allowed);
-}
-
-void GeolocationPermissionContext::NotifyPermissionSet(
- const PermissionRequestID& id,
- const GURL& requesting_frame,
- base::Callback<void(bool)> callback,
- bool allowed) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
-
// WebContents may have gone away (or not exists for extension).
TabSpecificContentSettings* content_settings =
TabSpecificContentSettings::Get(id.render_process_id(),
id.render_view_id());
- if (content_settings) {
- content_settings->OnGeolocationPermissionSet(requesting_frame.GetOrigin(),
- allowed);
- }
-
- callback.Run(allowed);
-}
-
-PermissionQueueController*
- GeolocationPermissionContext::QueueController() {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- DCHECK(!shutting_down_);
- if (!permission_queue_controller_)
- permission_queue_controller_.reset(CreateQueueController());
- return permission_queue_controller_.get();
-}
-
-PermissionQueueController*
- GeolocationPermissionContext::CreateQueueController() {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- return new PermissionQueueController(profile(),
- CONTENT_SETTINGS_TYPE_GEOLOCATION);
-}
-
-void GeolocationPermissionContext::CancelPendingInfobarRequest(
- const PermissionRequestID& id) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- if (shutting_down_)
- return;
-
- if (PermissionBubbleManager::Enabled()) {
- GeolocationPermissionRequest* cancelling =
- pending_requests_.get(id.ToString());
- content::WebContents* web_contents = tab_util::GetWebContentsByID(
- id.render_process_id(), id.render_view_id());
- if (cancelling != NULL && web_contents != NULL &&
- PermissionBubbleManager::FromWebContents(web_contents) != NULL) {
- PermissionBubbleManager::FromWebContents(web_contents)->
- CancelRequest(cancelling);
- }
- return;
- }
-
- QueueController()->CancelInfoBarRequest(id);
+ if (content_settings)
+ content_settings->OnGeolocationPermissionSet(
+ requesting_frame.GetOrigin(), allowed);
}

Powered by Google App Engine
This is Rietveld 408576698