| Index: content/browser/geofencing/geofencing_manager.cc
|
| diff --git a/content/browser/geofencing/geofencing_manager.cc b/content/browser/geofencing/geofencing_manager.cc
|
| index 33afae5ef02d8948b9a4775a85d36923222f2b21..1147d7d26a5c5a22239556f4e846dee9a34cf4c2 100644
|
| --- a/content/browser/geofencing/geofencing_manager.cc
|
| +++ b/content/browser/geofencing/geofencing_manager.cc
|
| @@ -16,12 +16,14 @@ namespace content {
|
|
|
| struct GeofencingManager::Registration {
|
| Registration(int64 service_worker_registration_id,
|
| + const GURL& service_worker_origin,
|
| const std::string& region_id,
|
| const blink::WebCircularGeofencingRegion& region,
|
| const StatusCallback& callback,
|
| int64 geofencing_registration_id);
|
|
|
| int64 service_worker_registration_id;
|
| + GURL service_worker_origin;
|
| std::string region_id;
|
| blink::WebCircularGeofencingRegion region;
|
|
|
| @@ -39,6 +41,7 @@ struct GeofencingManager::Registration {
|
|
|
| GeofencingManager::Registration::Registration(
|
| int64 service_worker_registration_id,
|
| + const GURL& service_worker_origin,
|
| const std::string& region_id,
|
| const blink::WebCircularGeofencingRegion& region,
|
| const GeofencingManager::StatusCallback& callback,
|
| @@ -98,6 +101,21 @@ void GeofencingManager::RegisterRegion(
|
|
|
| // TODO(mek): Validate region_id and region.
|
|
|
| + // Look up service worker. In unit tests |service_worker_context_| might not
|
| + // be set.
|
| + GURL service_worker_origin;
|
| + if (service_worker_context_.get()) {
|
| + ServiceWorkerRegistration* service_worker_registration =
|
| + service_worker_context_->context()->GetLiveRegistration(
|
| + service_worker_registration_id);
|
| + if (!service_worker_registration) {
|
| + callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_NO_SERVICE_WORKER);
|
| + return;
|
| + }
|
| +
|
| + service_worker_origin = service_worker_registration->pattern().GetOrigin();
|
| + }
|
| +
|
| if (!service_->IsServiceAvailable()) {
|
| callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE);
|
| return;
|
| @@ -111,6 +129,7 @@ void GeofencingManager::RegisterRegion(
|
| }
|
|
|
| AddRegistration(service_worker_registration_id,
|
| + service_worker_origin,
|
| region_id,
|
| region,
|
| callback,
|
| @@ -124,6 +143,18 @@ void GeofencingManager::UnregisterRegion(int64 service_worker_registration_id,
|
|
|
| // TODO(mek): Validate region_id.
|
|
|
| + // Look up service worker. In unit tests |service_worker_context_| might not
|
| + // be set.
|
| + if (service_worker_context_.get()) {
|
| + ServiceWorkerRegistration* service_worker_registration =
|
| + service_worker_context_->context()->GetLiveRegistration(
|
| + service_worker_registration_id);
|
| + if (!service_worker_registration) {
|
| + callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_NO_SERVICE_WORKER);
|
| + return;
|
| + }
|
| + }
|
| +
|
| if (!service_->IsServiceAvailable()) {
|
| callback.Run(GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE);
|
| return;
|
| @@ -154,6 +185,17 @@ GeofencingStatus GeofencingManager::GetRegisteredRegions(
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| CHECK(result);
|
|
|
| + // Look up service worker. In unit tests |service_worker_context_| might not
|
| + // be set.
|
| + if (service_worker_context_.get()) {
|
| + ServiceWorkerRegistration* service_worker_registration =
|
| + service_worker_context_->context()->GetLiveRegistration(
|
| + service_worker_registration_id);
|
| + if (!service_worker_registration) {
|
| + return GEOFENCING_STATUS_OPERATION_FAILED_NO_SERVICE_WORKER;
|
| + }
|
| + }
|
| +
|
| if (!service_->IsServiceAvailable()) {
|
| return GEOFENCING_STATUS_OPERATION_FAILED_SERVICE_NOT_AVAILABLE;
|
| }
|
| @@ -212,6 +254,7 @@ GeofencingManager::Registration* GeofencingManager::FindRegistrationById(
|
|
|
| GeofencingManager::Registration& GeofencingManager::AddRegistration(
|
| int64 service_worker_registration_id,
|
| + const GURL& service_worker_origin,
|
| const std::string& region_id,
|
| const blink::WebCircularGeofencingRegion& region,
|
| const StatusCallback& callback,
|
| @@ -222,6 +265,7 @@ GeofencingManager::Registration& GeofencingManager::AddRegistration(
|
| registrations_[service_worker_registration_id]
|
| .insert(std::make_pair(region_id,
|
| Registration(service_worker_registration_id,
|
| + service_worker_origin,
|
| region_id,
|
| region,
|
| callback,
|
|
|