Index: content/browser/geofencing/geofencing_manager.cc |
diff --git a/content/browser/geofencing/geofencing_manager.cc b/content/browser/geofencing/geofencing_manager.cc |
index 6899c73067a2c4be63108f24e00cf05413ac0a0c..e13095444208c55eb6ac973c16c9d916ecf97466 100644 |
--- a/content/browser/geofencing/geofencing_manager.cc |
+++ b/content/browser/geofencing/geofencing_manager.cc |
@@ -8,6 +8,7 @@ |
#include "base/callback.h" |
#include "content/browser/geofencing/geofencing_service.h" |
+#include "content/browser/geofencing/mock_geofencing_service.h" |
#include "content/browser/service_worker/service_worker_context_wrapper.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
@@ -91,9 +92,8 @@ void GeofencingManager::ShutdownOnIO() { |
// TODO(mek): This will need to change to support geofence registrations that |
// outlive the browser, although removing the references to this |
// |GeofencingManager| from the |GeofencingService| will still be needed. |
- for (const auto& registration : registrations_by_id_) { |
+ for (const auto& registration : registrations_by_id_) |
service_->UnregisterRegion(registration.first); |
- } |
} |
void GeofencingManager::RegisterRegion( |
@@ -132,11 +132,8 @@ void GeofencingManager::RegisterRegion( |
return; |
} |
- AddRegistration(service_worker_registration_id, |
- service_worker_origin, |
- region_id, |
- region, |
- callback, |
+ AddRegistration(service_worker_registration_id, service_worker_origin, |
+ region_id, region, callback, |
service_->RegisterRegion(region, this)); |
} |
@@ -217,6 +214,37 @@ GeofencingStatus GeofencingManager::GetRegisteredRegions( |
return GEOFENCING_STATUS_OK; |
} |
+void GeofencingManager::SetMockProvider(GeofencingMockState mock_state) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ |
+ // TODO(mek): It would be nice if enabling the mock geofencing service |
+ // wouldn't completely delete all existing registrations but instead just |
+ // somehow keep them around but inactive. |
+ // For now mocking is only used in layout tests, so just clearing all |
+ // registrations works good enough. |
+ for (const auto& registration : registrations_by_id_) |
+ service_->UnregisterRegion(registration.first); |
+ registrations_by_id_.clear(); |
+ registrations_.clear(); |
+ |
+ // Then set or reset the mock service for the service worker. |
+ if (mock_state == GeofencingMockState::NONE) { |
+ service_ = GeofencingServiceImpl::GetInstance(); |
+ mock_service_.reset(); |
+ } else { |
+ mock_service_.reset(new MockGeofencingService( |
+ mock_state != GeofencingMockState::SERVICE_UNAVAILABLE)); |
+ service_ = mock_service_.get(); |
+ } |
+} |
+ |
+void GeofencingManager::SetMockPosition(double latitude, double longitude) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ if (!mock_service_) |
+ return; |
+ mock_service_->SetMockPosition(latitude, longitude); |
+} |
+ |
void GeofencingManager::RegistrationFinished(int64 geofencing_registration_id, |
GeofencingStatus status) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |