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

Unified Diff: chrome/browser/chromeos/policy/device_status_collector.cc

Issue 273523007: Dispatch geolocation IPCs on the UI thread. Aside from simplifying the code to avoid a lot of threa… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 6 years, 7 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/chromeos/policy/device_status_collector.cc
===================================================================
--- chrome/browser/chromeos/policy/device_status_collector.cc (revision 269778)
+++ chrome/browser/chromeos/policy/device_status_collector.cc (working copy)
@@ -81,47 +81,6 @@
namespace policy {
-DeviceStatusCollector::Context::Context() {
-}
-
-DeviceStatusCollector::Context::~Context() {
-}
-
-void DeviceStatusCollector::Context::GetLocationUpdate(
- const content::GeolocationProvider::LocationUpdateCallback& callback) {
- owner_callback_ = callback;
- content::BrowserThread::PostTask(
- content::BrowserThread::IO,
- FROM_HERE,
- base::Bind(&DeviceStatusCollector::Context::GetLocationUpdateInternal,
- this));
-}
-
-void DeviceStatusCollector::Context::GetLocationUpdateInternal() {
- our_callback_ = base::Bind(
- &DeviceStatusCollector::Context::OnLocationUpdate, this);
- content::GeolocationProvider::GetInstance()->AddLocationUpdateCallback(
- our_callback_, true);
-}
-
-void DeviceStatusCollector::Context::OnLocationUpdate(
- const content::Geoposition& geoposition) {
- content::GeolocationProvider::GetInstance()->RemoveLocationUpdateCallback(
- our_callback_);
- our_callback_.Reset();
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(&DeviceStatusCollector::Context::CallCollector,
- this, geoposition));
-}
-
-void DeviceStatusCollector::Context::CallCollector(
- const content::Geoposition& geoposition) {
- owner_callback_.Run(geoposition);
- owner_callback_.Reset();
-}
-
DeviceStatusCollector::DeviceStatusCollector(
PrefService* local_state,
chromeos::system::StatisticsProvider* provider,
@@ -140,14 +99,9 @@
report_boot_mode_(false),
report_location_(false),
report_network_interfaces_(false),
- report_users_(false),
- context_(new Context()) {
- if (location_update_requester) {
+ report_users_(false) {
+ if (location_update_requester)
location_update_requester_ = *location_update_requester;
- } else {
- location_update_requester_ =
- base::Bind(&Context::GetLocationUpdate, context_.get());
- }
idle_poll_timer_.Start(FROM_HERE,
TimeDelta::FromSeconds(kIdlePollIntervalSeconds),
this, &DeviceStatusCollector::CheckIdleState);
@@ -552,20 +506,24 @@
TimeDelta elapsed = GetCurrentTime() - position_.timestamp;
TimeDelta interval =
TimeDelta::FromSeconds(kGeolocationPollIntervalSeconds);
- if (elapsed > interval) {
- geolocation_update_in_progress_ = true;
- location_update_requester_.Run(base::Bind(
- &DeviceStatusCollector::ReceiveGeolocationUpdate,
- weak_factory_.GetWeakPtr()));
- } else {
+ if (elapsed <= interval) {
geolocation_update_timer_.Start(
FROM_HERE,
interval - elapsed,
this,
&DeviceStatusCollector::ScheduleGeolocationUpdateRequest);
+ return;
}
+ }
+
+ geolocation_update_in_progress_ = true;
+ if (location_update_requester_.is_null()) {
+ geolocation_subscription_ = content::GeolocationProvider::GetInstance()->
+ AddLocationUpdateCallback(
+ base::Bind(&DeviceStatusCollector::ReceiveGeolocationUpdate,
+ weak_factory_.GetWeakPtr()),
+ true);
} else {
- geolocation_update_in_progress_ = true;
location_update_requester_.Run(base::Bind(
&DeviceStatusCollector::ReceiveGeolocationUpdate,
weak_factory_.GetWeakPtr()));
« no previous file with comments | « chrome/browser/chromeos/policy/device_status_collector.h ('k') | chrome/browser/extensions/api/location/location_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698