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

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

Issue 2458453002: [sensors] Add Permission guard to the generic sensor apis.
Patch Set: rebase + blink reformat 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
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..e4d1642a2170010bf5d15e9932af46b7d5f8c502 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::SENSORS;
+
+ 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(PermissionName::SENSORS),
+ security_origin_, status, std::move(observer));
+ permission_subscribed_ = true;
+ }
+ state_ = kInitialized;
+ for (Observer* observer : observers_)
+ observer->OnSensorInitialized();
+ }
+ break;
+ default:
+ NOTREACHED();
+ }
+}
SensorProxy::~SensorProxy() {}
@@ -230,10 +296,16 @@ void SensorProxy::OnSensorCreated(SensorInitParamsPtr params,
reading_updater_ = SensorReadingUpdater::Create(this, mode_);
- state_ = kInitialized;
-
for (Observer* observer : observers_)
observer->OnSensorInitialized();
+
+ // PermissionName permission_name = GetPermissionType(type_);
+
+ provider_->permission_service_->RequestPermission(
+ CreatePermissionDescriptor(PermissionName::SENSORS), security_origin_,
+ UserGestureIndicator::ProcessingUserGesture(),
+ ConvertToBaseCallback(WTF::Bind(&SensorProxy::OnPermissionStatusChange,
+ WrapWeakPersistent(this))));
}
void SensorProxy::OnAddConfigurationCompleted(

Powered by Google App Engine
This is Rietveld 408576698