| 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(
|
|
|