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

Unified Diff: content/browser/geofencing/geofencing_manager.cc

Issue 701953007: Expose mock geofencing service via testRunner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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: content/browser/geofencing/geofencing_manager.cc
diff --git a/content/browser/geofencing/geofencing_manager.cc b/content/browser/geofencing/geofencing_manager.cc
index 6899c73067a2c4be63108f24e00cf05413ac0a0c..224266d12e715def237def44e09f882ff189079d 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,8 +92,10 @@ 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_) {
- service_->UnregisterRegion(registration.first);
+ for (const auto& service_worker : registrations_) {
+ GeofencingService* service = ServiceForServiceWorker(service_worker.first);
+ for (const auto& registration : service_worker.second)
+ service->UnregisterRegion(registration.second.geofencing_registration_id);
}
}
@@ -120,7 +123,9 @@ void GeofencingManager::RegisterRegion(
service_worker_origin = service_worker_registration->pattern().GetOrigin();
}
- if (!service_->IsServiceAvailable()) {
+ GeofencingService* service =
+ ServiceForServiceWorker(service_worker_registration_id);
+ if (!service->IsServiceAvailable()) {
callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE);
return;
}
@@ -132,12 +137,9 @@ void GeofencingManager::RegisterRegion(
return;
}
- AddRegistration(service_worker_registration_id,
- service_worker_origin,
- region_id,
- region,
- callback,
- service_->RegisterRegion(region, this));
+ AddRegistration(service_worker_registration_id, service_worker_origin,
+ region_id, region, callback,
+ service->RegisterRegion(region, this));
}
void GeofencingManager::UnregisterRegion(int64 service_worker_registration_id,
@@ -159,7 +161,9 @@ void GeofencingManager::UnregisterRegion(int64 service_worker_registration_id,
}
}
- if (!service_->IsServiceAvailable()) {
+ GeofencingService* service =
+ ServiceForServiceWorker(service_worker_registration_id);
+ if (!service->IsServiceAvailable()) {
callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE);
return;
}
@@ -178,7 +182,7 @@ void GeofencingManager::UnregisterRegion(int64 service_worker_registration_id,
return;
}
- service_->UnregisterRegion(registration->geofencing_registration_id);
+ service->UnregisterRegion(registration->geofencing_registration_id);
ClearRegistration(registration);
callback.Run(GEOFENCING_STATUS_OK);
}
@@ -200,7 +204,9 @@ GeofencingStatus GeofencingManager::GetRegisteredRegions(
}
}
- if (!service_->IsServiceAvailable()) {
+ GeofencingService* service =
+ ServiceForServiceWorker(service_worker_registration_id);
+ if (!service->IsServiceAvailable()) {
return GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE;
}
@@ -217,6 +223,32 @@ GeofencingStatus GeofencingManager::GetRegisteredRegions(
return GEOFENCING_STATUS_OK;
}
+void GeofencingManager::SetMockProvider(int64 service_worker_registration_id,
+ GeofencingMockState mock_state) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ // First erase all current registration for this service worker.
+ CleanUpForServiceWorker(service_worker_registration_id);
+
+ // Then set or reset the mock service for the service worker.
+ if (mock_state == GeofencingMockState::NONE) {
+ mock_services_.erase(service_worker_registration_id);
+ } else {
+ mock_services_[service_worker_registration_id] =
+ make_linked_ptr(new MockGeofencingService(
+ mock_state != GeofencingMockState::SERVICE_UNAVAILABLE));
+ }
+}
+
+void GeofencingManager::SetMockPosition(int64 service_worker_registration_id,
+ double latitude,
+ double longitude) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ auto it = mock_services_.find(service_worker_registration_id);
+ if (it == mock_services_.end())
+ return;
+ it->second->SetMockPosition(latitude, longitude);
+}
+
void GeofencingManager::RegistrationFinished(int64 geofencing_registration_id,
GeofencingStatus status) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
@@ -241,6 +273,14 @@ void GeofencingManager::RegionExited(int64 geofencing_registration_id) {
geofencing_registration_id);
}
+GeofencingService* GeofencingManager::ServiceForServiceWorker(
+ int64 service_worker_registration_id) {
+ auto it = mock_services_.find(service_worker_registration_id);
+ if (it == mock_services_.end())
+ return service_;
+ return it->second.get();
+}
+
GeofencingManager::Registration* GeofencingManager::FindRegistration(
int64 service_worker_registration_id,
const std::string& region_id) {
@@ -300,6 +340,27 @@ void GeofencingManager::ClearRegistration(Registration* registration) {
registrations_.erase(registrations_iterator);
}
+void GeofencingManager::CleanUpForServiceWorker(
+ int64 service_worker_registration_id) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ ServiceWorkerRegistrationsMap::iterator registrations_iterator =
+ registrations_.find(service_worker_registration_id);
+ if (registrations_iterator == registrations_.end())
+ return;
+
+ GeofencingService* service =
+ ServiceForServiceWorker(service_worker_registration_id);
+ for (auto it = registrations_iterator->second.begin();
+ !registrations_iterator->second.empty();) {
+ int geofencing_registration_id = it->second.geofencing_registration_id;
+ service->UnregisterRegion(geofencing_registration_id);
+ registrations_by_id_.erase(geofencing_registration_id);
+ auto old_it = it;
+ ++it;
+ registrations_iterator->second.erase(old_it);
+ }
+}
+
void GeofencingManager::DispatchGeofencingEvent(
blink::WebGeofencingEventType event_type,
int64 geofencing_registration_id) {

Powered by Google App Engine
This is Rietveld 408576698