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

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

Issue 23345004: Fix Android strict-mode violation in GeoLocation info bar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix ups Created 7 years, 4 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
diff --git a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
index e3bfc924f2cb2f1abdae72804f1179212c514c76..61c23cccf3d37e9d31135be316c8d0746c902495 100644
--- a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
+++ b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/worker_pool.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/content_settings/permission_request_id.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
@@ -103,7 +104,13 @@ void ChromeGeolocationPermissionContext::RequestGeolocationPermission(
return;
}
- DecidePermission(id, requesting_frame, embedder, callback);
+ // DecidePermission is a bit heavy. Avoid hogging the UI thread
+ // now that we are done with extension related stuff.
+ base::WorkerPool::PostTask(FROM_HERE,
joth 2013/08/20 23:07:21 WorkerPool is a bit funny about non-joinable threa
acleung1 2013/08/23 23:13:09 Ok. I removed this and keep the execution of these
+ base::Bind(
+ &ChromeGeolocationPermissionContext::DecidePermission,
+ this, id, requesting_frame, embedder, callback), true);
+ return;
}
void ChromeGeolocationPermissionContext::CancelGeolocationPermissionRequest(
@@ -120,7 +127,6 @@ void ChromeGeolocationPermissionContext::DecidePermission(
const GURL& requesting_frame,
const GURL& embedder,
base::Callback<void(bool)> callback) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
ContentSetting content_setting =
profile_->GetHostContentSettingsMap()->GetContentSetting(
joth 2013/08/20 23:07:21 This looks bad. Pretty sure profile_ is not thread
acleung1 2013/08/23 23:13:09 Fixed. Kept in UI.
@@ -134,12 +140,24 @@ void ChromeGeolocationPermissionContext::DecidePermission(
PermissionDecided(id, requesting_frame, embedder, callback, true);
break;
default:
- // setting == ask. Prompt the user.
+ // setting == ask. Prompt the user in the UI thread now.
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(
+ &ChromeGeolocationPermissionContext::CreateInfoBarRequest,
+ base::Unretained(this), id, requesting_frame, embedder,callback));
joth 2013/08/20 23:07:21 why use Unretained() here but not on line 112?
acleung1 2013/08/23 23:13:09 Removed the early call and kept using unretained h
+ }
+}
+
+void ChromeGeolocationPermissionContext::CreateInfoBarRequest(
+ const PermissionRequestID& id,
+ const GURL& requesting_frame,
+ const GURL& embedder,
+ base::Callback<void(bool)> callback) {
QueueController()->CreateInfoBarRequest(
id, requesting_frame, embedder, base::Bind(
&ChromeGeolocationPermissionContext::NotifyPermissionSet,
base::Unretained(this), id, requesting_frame, callback));
- }
}
void ChromeGeolocationPermissionContext::ShutdownOnUIThread() {
@@ -178,7 +196,6 @@ void ChromeGeolocationPermissionContext::NotifyPermissionSet(
PermissionQueueController*
ChromeGeolocationPermissionContext::QueueController() {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
Michael van Ouwerkerk 2013/08/21 10:24:45 Instead of deleting, could you modify such checks
acleung1 2013/08/23 23:13:09 I am moving this back to the UI thread as well. A
DCHECK(!shutting_down_);
if (!permission_queue_controller_)
permission_queue_controller_.reset(CreateQueueController());
@@ -187,7 +204,6 @@ PermissionQueueController*
PermissionQueueController*
ChromeGeolocationPermissionContext::CreateQueueController() {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
return new PermissionQueueController(profile(),
joth 2013/08/20 23:07:21 again using profile on non-UI thread?
acleung1 2013/08/23 23:13:09 fixed.
CONTENT_SETTINGS_TYPE_GEOLOCATION);
}

Powered by Google App Engine
This is Rietveld 408576698