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

Unified Diff: third_party/WebKit/Source/modules/sensor/SensorProxy.cpp

Issue 2458453002: [sensors] Add Permission guard to the generic sensor apis.
Patch Set: Fix mikhail's comments Created 4 years, 1 month 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: 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 e3b01f30c0d560100a8eb40e5720b98fa23a2870..b67d4336a591e9fd198988095b98b2d8838d80c4 100644
--- a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
@@ -5,16 +5,26 @@
#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"
+#include "wtf/RefPtr.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,
+ PassRefPtr<SecurityOrigin> origin,
SensorProviderProxy* provider,
std::unique_ptr<SensorReadingFactory> readingFactory)
: m_type(sensorType),
@@ -24,7 +34,24 @@ SensorProxy::SensorProxy(SensorType sensorType,
m_state(SensorProxy::Uninitialized),
m_suspended(false),
m_readingFactory(std::move(readingFactory)),
- m_maximumFrequency(0.0) {}
+ m_maximumFrequency(0.0),
+ m_permissionStatus(PermissionStatus::ASK),
+ m_permissionService(permissionService),
+ m_securityOrigin(std::move(origin)) {}
Mikhail 2016/11/15 14:03:18 no need to move PassRefPtr, I think PassRefPtr its
riju_ 2016/11/16 12:38:25 Done.
+
+void SensorProxy::onPermissionUpdate(PermissionStatus status) {
+ if (m_permissionStatus != status) {
+ m_permissionStatus = status;
+ SensorPermissionChanged();
+ }
+
+ // Keep listening to changes.
+ m_permissionService->GetNextPermissionChange(
+ createPermissionDescriptor(PermissionName::SENSORS), m_securityOrigin,
+ m_permissionStatus,
+ convertToBaseCallback(
+ WTF::bind(&SensorProxy::onPermissionUpdate, wrapPersistent(this))));
+}
SensorProxy::~SensorProxy() {}
@@ -56,11 +83,14 @@ void SensorProxy::initialize() {
return;
}
- m_state = Initializing;
- auto callback = convertToBaseCallback(
- WTF::bind(&SensorProxy::onSensorCreated, wrapWeakPersistent(this)));
- m_provider->sensorProvider()->GetSensor(m_type, mojo::GetProxy(&m_sensor),
- callback);
+ // Request permission.
+ if (m_permissionStatus == PermissionStatus::ASK) {
Mikhail 2016/11/15 14:03:18 what if (m_permissionStatus != PermissionStatus::A
riju_ 2016/11/16 12:38:25 Done.
+ m_permissionService->RequestPermission(
shalamov 2016/11/14 14:40:06 Can be garbage, if invalidated.
riju_ 2016/11/16 12:38:25 Acknowledged.
+ createPermissionDescriptor(PermissionName::SENSORS), m_securityOrigin,
+ UserGestureIndicator::processingUserGesture(),
+ convertToBaseCallback(
+ WTF::bind(&SensorProxy::onPermissionUpdate, wrapPersistent(this))));
+ }
}
void SensorProxy::addConfiguration(
@@ -128,6 +158,19 @@ void SensorProxy::SensorReadingChanged() {
observer->onSensorReadingChanged();
}
+void SensorProxy::SensorPermissionChanged() {
+ // If Permission is revoked throw error and reset connection.
+ if (m_permissionStatus != PermissionStatus::GRANTED) {
+ m_provider->onPermissionServiceConnectionError();
shalamov 2016/11/14 14:40:06 This will invalidate permission proxy when permiss
Mikhail 2016/11/15 14:03:18 we should prepare implementation for more granular
riju_ 2016/11/16 12:38:25 Acknowledged.
riju_ 2016/11/16 12:38:25 My bad, handleSensorError() is called now
+ } else {
+ m_state = Initializing;
shalamov 2016/11/14 14:40:07 Can there be a case when we get "GRANTED" and prox
Mikhail 2016/11/15 14:03:18 we should not assign m_state here. What if SensorP
riju_ 2016/11/16 12:38:26 Added a check now, so that we don't call GetProxy
+ auto callback = convertToBaseCallback(
+ WTF::bind(&SensorProxy::onSensorCreated, wrapWeakPersistent(this)));
+ m_provider->sensorProvider()->GetSensor(m_type, mojo::GetProxy(&m_sensor),
+ callback);
+ }
+}
+
void SensorProxy::handleSensorError(ExceptionCode code,
String sanitizedMessage,
String unsanitizedMessage) {

Powered by Google App Engine
This is Rietveld 408576698