From c2ea7b1babdb7748e08a1f2442f13abac357d194 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@theqtcompany.com> Date: Thu, 12 Mar 2015 14:19:21 +0100 Subject: [PATCH] Fix geolocation (and slight cleanup) Cleanup is mostly to avoid tripping on an assert when calling GeolocationProvider::GetInstance() from outside the UI thread. Change-Id: Id9c964c1cf952a7c867e5154dd2c05e17733a842 Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com> --- src/core/content_browser_client_qt.cpp | 1 - src/core/location_provider_qt.cpp | 11 +---------- src/core/location_provider_qt.h | 1 - src/core/web_contents_delegate_qt.cpp | 7 ++++--- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index b0badde99..a6a133271 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -69,7 +69,6 @@ #include "resource_dispatcher_host_delegate_qt.h" #include "user_script_controller_host.h" #include "web_contents_delegate_qt.h" -#include "access_token_store_qt.h" #include <QGuiApplication> #include <QLocale> diff --git a/src/core/location_provider_qt.cpp b/src/core/location_provider_qt.cpp index e33179412..d17fc3d21 100644 --- a/src/core/location_provider_qt.cpp +++ b/src/core/location_provider_qt.cpp @@ -188,7 +188,7 @@ void QtPositioningHelper::timeout() inline void QtPositioningHelper::postToLocationProvider(const base::Closure &task) { - LocationProviderQt::messageLoop()->PostTask(FROM_HERE, task); + static_cast<content::GeolocationProviderImpl*>(content::GeolocationProvider::GetInstance())->message_loop()->PostTask(FROM_HERE, task); } LocationProviderQt::LocationProviderQt() @@ -203,7 +203,6 @@ LocationProviderQt::~LocationProviderQt() bool LocationProviderQt::StartProvider(bool highAccuracy) { - DCHECK(base::MessageLoop::current() == messageLoop()); QThread *guiThread = qApp->thread(); if (!m_positioningHelper) { m_positioningHelper = new QtPositioningHelper(this); @@ -216,7 +215,6 @@ bool LocationProviderQt::StartProvider(bool highAccuracy) void LocationProviderQt::StopProvider() { - DCHECK(base::MessageLoop::current() == messageLoop()); if (m_positioningHelper) BrowserThread::PostTask(BrowserThread::UI,FROM_HERE, base::Bind(&QtPositioningHelper::stop , base::Unretained(m_positioningHelper))); @@ -224,7 +222,6 @@ void LocationProviderQt::StopProvider() void LocationProviderQt::RequestRefresh() { - DCHECK(base::MessageLoop::current() == messageLoop()); if (m_positioningHelper) BrowserThread::PostTask(BrowserThread::UI,FROM_HERE, base::Bind(&QtPositioningHelper::refresh , base::Unretained(m_positioningHelper))); @@ -237,16 +234,10 @@ void LocationProviderQt::OnPermissionGranted() void LocationProviderQt::updatePosition(const content::Geoposition &position) { - DCHECK(base::MessageLoop::current() == messageLoop()); m_lastKnownPosition = position; NotifyCallback(position); } -base::MessageLoop *LocationProviderQt::messageLoop() -{ - return static_cast<content::GeolocationProviderImpl*>(content::GeolocationProvider::GetInstance())->message_loop(); -} - } // namespace QtWebEngineCore #include "location_provider_qt.moc" diff --git a/src/core/location_provider_qt.h b/src/core/location_provider_qt.h index 15b2e0520..66060479d 100644 --- a/src/core/location_provider_qt.h +++ b/src/core/location_provider_qt.h @@ -67,7 +67,6 @@ public: private: friend class QtPositioningHelper; - static base::MessageLoop *messageLoop(); void updatePosition(const content::Geoposition &); content::Geoposition m_lastKnownPosition; diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index 409514411..581a16adb 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -354,9 +354,10 @@ void WebContentsDelegateQt::cancelGeolocationPermissionRequest(const GURL &reque void WebContentsDelegateQt::geolocationPermissionReply(const QUrl &origin, bool permission) { - if (m_geolocationPermissionRequests.contains(origin)) { - m_geolocationPermissionRequests[origin].Run(permission); - m_geolocationPermissionRequests.remove(origin); + auto it = m_geolocationPermissionRequests.find(origin); + if (it != m_geolocationPermissionRequests.end()) { + (*it).Run(permission); + m_geolocationPermissionRequests.erase(it); } } -- GitLab