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

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

Issue 11269002: Introduce GeolocationPermissionRequestID, a wrapper struct to contain the (render process ID, rende… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 2 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/chrome_geolocation_permission_context.cc
===================================================================
--- chrome/browser/geolocation/chrome_geolocation_permission_context.cc (revision 163741)
+++ chrome/browser/geolocation/chrome_geolocation_permission_context.cc (working copy)
@@ -14,6 +14,7 @@
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/geolocation/geolocation_infobar_queue_controller.h"
+#include "chrome/browser/geolocation/geolocation_permission_request_id.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/tab_util.h"
#include "chrome/browser/view_type_utils.h"
@@ -24,12 +25,7 @@
#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
-using WebKit::WebSecurityOrigin;
-using content::BrowserThread;
-using content::WebContents;
-// GeolocationPermissionContext -----------------------------------------------
-
ChromeGeolocationPermissionContext::ChromeGeolocationPermissionContext(
Profile* profile)
: profile_(profile) {
@@ -39,11 +35,14 @@
}
void ChromeGeolocationPermissionContext::RequestGeolocationPermission(
- int render_process_id, int render_view_id, int bridge_id,
- const GURL& requesting_frame, base::Callback<void(bool)> callback) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
+ int render_process_id,
+ int render_view_id,
+ int bridge_id,
+ const GURL& requesting_frame,
+ base::Callback<void(bool)> callback) {
+ if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
base::Bind(
&ChromeGeolocationPermissionContext::RequestGeolocationPermission,
this, render_process_id, render_view_id, bridge_id,
@@ -51,19 +50,20 @@
return;
}
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- WebContents* web_contents =
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ content::WebContents* web_contents =
tab_util::GetWebContentsByID(render_process_id, render_view_id);
+ const GeolocationPermissionRequestID id(render_process_id, render_view_id,
+ bridge_id);
if (chrome::GetViewType(web_contents) != chrome::VIEW_TYPE_TAB_CONTENTS) {
// The tab may have gone away, or the request may not be from a tab at all.
// TODO(mpcomplete): the request could be from a background page or
// extension popup (tab_contents will have a different ViewType). But why do
// we care? Shouldn't we still put an infobar up in the current tab?
LOG(WARNING) << "Attempt to use geolocation tabless renderer: "
- << render_process_id << "," << render_view_id << ","
- << bridge_id << " (can't prompt user without a visible tab)";
- NotifyPermissionSet(render_process_id, render_view_id, bridge_id,
- requesting_frame, callback, false);
+ << id.ToString()
+ << " (can't prompt user without a visible tab)";
+ NotifyPermissionSet(id, requesting_frame, callback, false);
return;
}
@@ -72,13 +72,12 @@
LOG(WARNING) << "Attempt to use geolocation from an invalid URL: "
<< requesting_frame << "," << embedder
<< " (geolocation is not supported in popups)";
- NotifyPermissionSet(render_process_id, render_view_id, bridge_id,
- requesting_frame, callback, false);
+ NotifyPermissionSet(id, requesting_frame, callback, false);
return;
}
- DecidePermission(render_process_id, render_view_id, bridge_id,
- requesting_frame, embedder, callback);
+ DecidePermission(id, requesting_frame, embedder, callback);
+
}
void ChromeGeolocationPermissionContext::CancelGeolocationPermissionRequest(
@@ -86,30 +85,30 @@
int render_view_id,
int bridge_id,
const GURL& requesting_frame) {
- CancelPendingInfoBarRequest(render_process_id, render_view_id, bridge_id);
+ CancelPendingInfoBarRequest(GeolocationPermissionRequestID(
+ render_process_id, render_view_id, bridge_id));
}
void ChromeGeolocationPermissionContext::DecidePermission(
- int render_process_id, int render_view_id, int bridge_id,
- const GURL& requesting_frame, const GURL& embedder,
+ const GeolocationPermissionRequestID& id,
+ const GURL& requesting_frame,
+ const GURL& embedder,
base::Callback<void(bool)> callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
ExtensionService* extension_service = profile_->GetExtensionService();
if (extension_service) {
const extensions::Extension* extension =
extension_service->extensions()->GetExtensionOrAppByURL(
- ExtensionURLInfo(
- WebSecurityOrigin::createFromString(
- UTF8ToUTF16(requesting_frame.spec())),
- requesting_frame));
+ ExtensionURLInfo(WebKit::WebSecurityOrigin::createFromString(
+ UTF8ToUTF16(requesting_frame.spec())),
+ requesting_frame));
if (extension &&
extension->HasAPIPermission(extensions::APIPermission::kGeolocation)) {
// Make sure the extension is in the calling process.
- if (extension_service->process_map()->Contains(
- extension->id(), render_process_id)) {
- PermissionDecided(render_process_id, render_view_id, bridge_id,
- requesting_frame, embedder, callback, true);
+ if (extension_service->process_map()->Contains(extension->id(),
+ id.render_process_id())) {
+ PermissionDecided(id, requesting_frame, embedder, callback, true);
return;
}
}
@@ -117,55 +116,44 @@
ContentSetting content_setting =
profile_->GetHostContentSettingsMap()->GetContentSetting(
- requesting_frame,
- embedder,
- CONTENT_SETTINGS_TYPE_GEOLOCATION,
+ requesting_frame, embedder, CONTENT_SETTINGS_TYPE_GEOLOCATION,
std::string());
switch (content_setting) {
case CONTENT_SETTING_BLOCK:
- PermissionDecided(render_process_id, render_view_id, bridge_id,
- requesting_frame, embedder, callback, false);
+ PermissionDecided(id, requesting_frame, embedder, callback, false);
break;
case CONTENT_SETTING_ALLOW:
- PermissionDecided(render_process_id, render_view_id, bridge_id,
- requesting_frame, embedder, callback, true);
+ PermissionDecided(id, requesting_frame, embedder, callback, true);
break;
default:
// setting == ask. Prompt the user.
QueueController()->CreateInfoBarRequest(
- render_process_id, render_view_id, bridge_id, requesting_frame,
- embedder, base::Bind(
+ id, requesting_frame, embedder, base::Bind(
&ChromeGeolocationPermissionContext::NotifyPermissionSet,
- base::Unretained(this),
- render_process_id, render_view_id, bridge_id, requesting_frame,
- callback));
+ base::Unretained(this), id, requesting_frame, callback));
}
}
void ChromeGeolocationPermissionContext::PermissionDecided(
- int render_process_id,
- int render_view_id,
- int bridge_id,
+ const GeolocationPermissionRequestID& id,
const GURL& requesting_frame,
const GURL& embedder,
base::Callback<void(bool)> callback,
bool allowed) {
- NotifyPermissionSet(render_process_id, render_view_id, bridge_id,
- requesting_frame, callback, allowed);
+ NotifyPermissionSet(id, requesting_frame, callback, allowed);
}
void ChromeGeolocationPermissionContext::NotifyPermissionSet(
- int render_process_id,
- int render_view_id,
- int bridge_id,
+ const GeolocationPermissionRequestID& id,
const GURL& requesting_frame,
base::Callback<void(bool)> callback,
bool allowed) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
// WebContents may have gone away (or not exists for extension).
TabSpecificContentSettings* content_settings =
- TabSpecificContentSettings::Get(render_process_id, render_view_id);
+ TabSpecificContentSettings::Get(id.render_process_id(),
+ id.render_view_id());
if (content_settings) {
content_settings->OnGeolocationPermissionSet(requesting_frame.GetOrigin(),
allowed);
@@ -176,7 +164,7 @@
GeolocationInfoBarQueueController*
ChromeGeolocationPermissionContext::QueueController() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
if (!geolocation_infobar_queue_controller_)
geolocation_infobar_queue_controller_.reset(CreateQueueController());
return geolocation_infobar_queue_controller_.get();
@@ -184,25 +172,20 @@
GeolocationInfoBarQueueController*
ChromeGeolocationPermissionContext::CreateQueueController() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
return new GeolocationInfoBarQueueController(profile());
}
void ChromeGeolocationPermissionContext::CancelPendingInfoBarRequest(
- int render_process_id,
- int render_view_id,
- int bridge_id) {
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
+ const GeolocationPermissionRequestID& id) {
+ if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
base::Bind(
&ChromeGeolocationPermissionContext::CancelPendingInfoBarRequest,
- this, render_process_id, render_view_id, bridge_id));
+ this, id));
return;
}
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- QueueController()->CancelInfoBarRequest(
- render_process_id,
- render_view_id,
- bridge_id);
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ QueueController()->CancelInfoBarRequest(id);
}

Powered by Google App Engine
This is Rietveld 408576698