Index: third_party/WebKit/Source/modules/sensor/SensorProxy.cpp |
diff --git a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp |
index 22103b6862f8e50bfbe7b3d9474aec8c457e08f4..66015b9c5bd24bd01432aeb1921af60ad6b00764 100644 |
--- a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp |
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp |
@@ -5,16 +5,25 @@ |
#include "modules/sensor/SensorProxy.h" |
#include "core/frame/LocalFrame.h" |
+#include "modules/permissions/PermissionUtils.h" |
#include "modules/sensor/SensorProviderProxy.h" |
#include "modules/sensor/SensorReading.h" |
+#include "platform/UserGestureIndicator.h" |
#include "platform/mojo/MojoHelper.h" |
+#include "platform/weborigin/SecurityOrigin.h" |
#include "public/platform/Platform.h" |
using namespace device::mojom::blink; |
namespace blink { |
+using mojom::blink::PermissionName; |
+using mojom::blink::PermissionService; |
+using mojom::blink::PermissionStatus; |
+ |
SensorProxy::SensorProxy(SensorType sensorType, |
+ PermissionService* permissionService, |
+ RefPtr<SecurityOrigin> origin, |
SensorProviderProxy* provider, |
Page* page, |
std::unique_ptr<SensorReadingFactory> readingFactory) |
@@ -27,7 +36,43 @@ SensorProxy::SensorProxy(SensorType sensorType, |
m_suspended(false), |
m_readingFactory(std::move(readingFactory)), |
m_maximumFrequency(0.0), |
- m_timer(this, &SensorProxy::onTimerFired) {} |
+ m_timer(this, &SensorProxy::onTimerFired), |
+ m_permissionStatus(PermissionStatus::ASK), |
+ m_permissionService(permissionService), |
+ m_securityOrigin(std::move(origin)) {} |
+ |
+void SensorProxy::onPermissionUpdate(PermissionStatus status) { |
+ if (m_state == Uninitialized) |
+ return; |
+ |
+ if (m_permissionStatus != status) |
+ m_permissionStatus = status; |
Mikhail
2016/11/28 20:07:53
Think m_permissionStatus is not needed as not used
riju_
2016/11/29 07:19:47
Because I wanted to make sure that, whenever Senso
shalamov
2016/11/29 08:29:10
I agree with Mikhail, this line of code and member
Mikhail
2016/11/29 08:46:29
mm.. how does it help to make sure it is always in
|
+ |
+ switch (status) { |
+ case mojom::blink::PermissionStatus::DENIED: |
+ handleSensorError(NotAllowedError, "Permission denied."); |
+ return; |
+ case mojom::blink::PermissionStatus::ASK: |
+ handleSensorError(NotAllowedError, "Permission revoked."); |
+ break; |
Mikhail
2016/11/28 20:07:53
why not return here?
riju_
2016/11/29 07:19:47
Because if it is ASK, I would still like to subscr
Mikhail
2016/11/29 08:46:29
This subscription is meaningless as error handler
|
+ case mojom::blink::PermissionStatus::GRANTED: |
+ if (isInitializing()) { |
+ m_state = Initialized; |
+ for (Observer* observer : m_observers) |
+ observer->onSensorInitialized(); |
+ } |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ |
+ // Keep listening to changes. |
+ m_permissionService->GetNextPermissionChange( |
+ createPermissionDescriptor(PermissionName::SENSORS), m_securityOrigin, |
+ m_permissionStatus, |
+ convertToBaseCallback(WTF::bind(&SensorProxy::onPermissionUpdate, |
+ wrapWeakPersistent(this)))); |
+} |
SensorProxy::~SensorProxy() {} |
@@ -227,9 +272,12 @@ void SensorProxy::onSensorCreated(SensorInitParamsPtr params, |
m_sensor.set_connection_error_handler( |
convertToBaseCallback(std::move(errorCallback))); |
- m_state = Initialized; |
- for (Observer* observer : m_observers) |
- observer->onSensorInitialized(); |
+ // Request permission. |
+ m_permissionService->RequestPermission( |
+ createPermissionDescriptor(PermissionName::SENSORS), m_securityOrigin, |
+ UserGestureIndicator::processingUserGesture(), |
+ convertToBaseCallback(WTF::bind(&SensorProxy::onPermissionUpdate, |
+ wrapWeakPersistent(this)))); |
} |
void SensorProxy::onAddConfigurationCompleted( |