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

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

Issue 2797713002: [sensor][permission] Adding permission guard to sensors based on Generic Sensor.
Patch Set: blink format changes Created 3 years, 8 months 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
« no previous file with comments | « third_party/WebKit/Source/modules/sensor/SensorProxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 d5f7e3a72555834d45f4ecf7f755a7fe0a82e017..190942cb98fd1d89f3a62a65e727914e25f7c180 100644
--- a/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.cpp
@@ -6,16 +6,43 @@
#include "core/dom/Document.h"
#include "core/frame/LocalFrame.h"
+#include "modules/permissions/PermissionUtils.h"
#include "modules/sensor/SensorProviderProxy.h"
#include "modules/sensor/SensorReadingUpdater.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;
+
+namespace {
+PermissionName GetPermissionType(SensorType type) {
+ PermissionName permission_name = PermissionName::ACCELEROMETER;
+
+ if (type == SensorType::AMBIENT_LIGHT)
+ permission_name = PermissionName::AMBIENT_LIGHT_SENSOR;
+ else if (type == SensorType::ACCELEROMETER)
+ permission_name = PermissionName::ACCELEROMETER;
+ else if (type == SensorType::GYROSCOPE)
+ permission_name = PermissionName::GYROSCOPE;
+ else if (type == SensorType::MAGNETOMETER)
+ permission_name = PermissionName::MAGNETOMETER;
+ else if (type == SensorType::ABSOLUTE_ORIENTATION)
+ permission_name = PermissionName::ORIENTATION_SENSOR;
+
+ return permission_name;
+}
+}
+
SensorProxy::SensorProxy(SensorType sensor_type,
+ RefPtr<SecurityOrigin> origin,
SensorProviderProxy* provider,
Page* page)
: PageVisibilityObserver(page),
@@ -24,7 +51,46 @@ SensorProxy::SensorProxy(SensorType sensor_type,
provider_(provider),
client_binding_(this),
state_(SensorProxy::kUninitialized),
- suspended_(false) {}
+ suspended_(false),
+ security_origin_(std::move(origin)),
+ binding_(this),
+ permission_subscribed_(false) {}
+
+void SensorProxy::OnPermissionStatusChange(PermissionStatus status) {
+ if (state_ == kUninitialized)
+ return;
+
+ PermissionName permission_name = GetPermissionType(type_);
+
+ switch (status) {
+ case mojom::blink::PermissionStatus::DENIED:
+ HandleSensorError();
+ // HandleSensorError(NotAllowedError, "Permission denied.");
+ return;
+ case mojom::blink::PermissionStatus::ASK:
+ HandleSensorError();
+ // HandleSensorError(NotAllowedError, "Permission revoked.");
+ return;
+ case mojom::blink::PermissionStatus::GRANTED:
+ if (IsInitializing()) {
+ if (permission_subscribed_) {
+ DCHECK(!binding_.is_bound());
+ mojom::blink::PermissionObserverPtr observer;
+ binding_.Bind(mojo::MakeRequest(&observer));
+ provider_->permission_service_->AddPermissionObserver(
+ CreatePermissionDescriptor(permission_name), security_origin_,
+ status, std::move(observer));
+ permission_subscribed_ = true;
+ }
+ state_ = kInitialized;
+ for (Observer* observer : observers_)
+ observer->OnSensorInitialized();
+ }
+ break;
+ default:
+ NOTREACHED();
+ }
+}
SensorProxy::~SensorProxy() {}
@@ -234,6 +300,14 @@ void SensorProxy::OnSensorCreated(SensorInitParamsPtr params,
for (Observer* observer : observers_)
observer->OnSensorInitialized();
+
+ PermissionName permission_name = GetPermissionType(type_);
+
+ provider_->permission_service_->RequestPermission(
+ CreatePermissionDescriptor(permission_name), security_origin_,
+ UserGestureIndicator::ProcessingUserGesture(),
+ ConvertToBaseCallback(WTF::Bind(&SensorProxy::OnPermissionStatusChange,
+ WrapWeakPersistent(this))));
}
void SensorProxy::OnAddConfigurationCompleted(
« no previous file with comments | « third_party/WebKit/Source/modules/sensor/SensorProxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698