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

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

Issue 2458453002: [sensors] Add Permission guard to the generic sensor apis.
Patch Set: Remove resetPermission + Rebase 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 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(

Powered by Google App Engine
This is Rietveld 408576698