Chromium Code Reviews| Index: third_party/WebKit/Source/modules/sensor/SensorProviderProxy.cpp |
| diff --git a/third_party/WebKit/Source/modules/sensor/SensorProviderProxy.cpp b/third_party/WebKit/Source/modules/sensor/SensorProviderProxy.cpp |
| index 243c8f567abd3b83ac192d914e82462333631f7b..1f9113ee9fa6859a36c9f30314185776767b7645 100644 |
| --- a/third_party/WebKit/Source/modules/sensor/SensorProviderProxy.cpp |
| +++ b/third_party/WebKit/Source/modules/sensor/SensorProviderProxy.cpp |
| @@ -4,6 +4,8 @@ |
| #include "modules/sensor/SensorProviderProxy.h" |
| +#include "core/dom/ExecutionContext.h" |
| +#include "modules/permissions/PermissionUtils.h" |
| #include "modules/sensor/SensorProxy.h" |
| #include "modules/sensor/SensorReading.h" |
| #include "platform/mojo/MojoHelper.h" |
| @@ -42,12 +44,44 @@ DEFINE_TRACE(SensorProviderProxy) { |
| Supplement<LocalFrame>::trace(visitor); |
| } |
| +void SensorProviderProxy::onPermissionServiceConnectionError() { |
| + if (!Platform::current()) { |
| + // TODO(rockot): Clean this up once renderer shutdown sequence is fixed. |
| + return; |
| + } |
| + |
| + m_permissionService.reset(); |
|
shalamov
2016/11/14 14:40:06
If you reset it here, and access it on initialize
riju_
2016/11/16 12:38:25
Yes, I am removing from initialize() now.
|
| + for (SensorProxy* sensor : m_sensors) { |
| + sensor->handleSensorError(SecurityError, |
| + "Permission service not available."); |
| + } |
| +} |
| + |
| SensorProxy* SensorProviderProxy::createSensor( |
| device::mojom::blink::SensorType type, |
| + ExecutionContext* context, |
| std::unique_ptr<SensorReadingFactory> readingFactory) { |
| DCHECK(!getSensor(type)); |
| - SensorProxy* sensor = new SensorProxy(type, this, std::move(readingFactory)); |
| + // Get permission service. |
| + if (connectToPermissionService(context, |
| + mojo::GetProxy(&m_permissionService))) { |
| + m_permissionService.set_connection_error_handler(convertToBaseCallback( |
| + WTF::bind(&SensorProviderProxy::onPermissionServiceConnectionError, |
| + wrapWeakPersistent(this)))); |
| + } |
| + if (!m_permissionService) { |
| + for (SensorProxy* sensor : m_sensors) { |
| + sensor->handleSensorError( |
| + SecurityError, |
| + "In its current state, the global scope can't request permissions"); |
| + } |
| + } |
| + |
| + RefPtr<SecurityOrigin> origin = context->getSecurityOrigin(); |
| + DCHECK(origin); |
| + SensorProxy* sensor = new SensorProxy(type, m_permissionService.get(), origin, |
| + this, std::move(readingFactory)); |
| m_sensors.add(sensor); |
| return sensor; |