OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/sensor/SensorProviderProxy.h" | 5 #include "modules/sensor/SensorProviderProxy.h" |
6 | 6 |
7 #include "modules/sensor/SensorProxy.h" | 7 #include "modules/sensor/SensorProxy.h" |
8 #include "platform/mojo/MojoHelper.h" | 8 #include "platform/mojo/MojoHelper.h" |
9 #include "public/platform/InterfaceProvider.h" | 9 #include "public/platform/InterfaceProvider.h" |
10 #include "public/platform/Platform.h" | 10 #include "public/platform/Platform.h" |
11 | 11 |
12 namespace blink { | 12 namespace blink { |
13 | 13 |
14 // SensorProviderProxy | 14 // SensorProviderProxy |
15 SensorProviderProxy::SensorProviderProxy(LocalFrame& frame) | 15 SensorProviderProxy::SensorProviderProxy(LocalFrame& frame) |
16 : Supplement<LocalFrame>(frame) {} | 16 : Supplement<LocalFrame>(frame) {} |
17 | 17 |
18 void SensorProviderProxy::InitializeIfNeeded(LocalFrame* frame) { | 18 void SensorProviderProxy::InitializeIfNeeded(LocalFrame* frame) { |
19 if (IsInitialized()) | 19 if (IsInitialized()) |
20 return; | 20 return; |
21 | 21 |
22 frame->GetInterfaceProvider()->GetInterface( | 22 frame->GetInterfaceProvider()->GetInterface( |
23 mojo::MakeRequest(&sensor_provider_)); | 23 mojo::MakeRequest(&sensor_provider_)); |
24 sensor_provider_.set_connection_error_handler(ConvertToBaseCallback( | 24 sensor_provider_.set_connection_error_handler(ConvertToBaseCallback( |
25 WTF::Bind(&SensorProviderProxy::OnSensorProviderConnectionError, | 25 WTF::Bind(&SensorProviderProxy::OnSensorProviderConnectionError, |
26 WrapWeakPersistent(this)))); | 26 WrapWeakPersistent(this)))); |
| 27 // Get permission service. |
| 28 frame->GetInterfaceProvider()->GetInterface( |
| 29 mojo::MakeRequest(&permission_service_)); |
| 30 permission_service_.set_connection_error_handler(ConvertToBaseCallback( |
| 31 WTF::Bind(&SensorProviderProxy::OnSensorProviderConnectionError, |
| 32 WrapWeakPersistent(this)))); |
27 } | 33 } |
28 | 34 |
29 const char* SensorProviderProxy::SupplementName() { | 35 const char* SensorProviderProxy::SupplementName() { |
30 return "SensorProvider"; | 36 return "SensorProvider"; |
31 } | 37 } |
32 | 38 |
33 // static | 39 // static |
34 SensorProviderProxy* SensorProviderProxy::From(LocalFrame* frame) { | 40 SensorProviderProxy* SensorProviderProxy::From(LocalFrame* frame) { |
35 DCHECK(frame); | 41 DCHECK(frame); |
36 SensorProviderProxy* provider_proxy = static_cast<SensorProviderProxy*>( | 42 SensorProviderProxy* provider_proxy = static_cast<SensorProviderProxy*>( |
37 Supplement<LocalFrame>::From(*frame, SupplementName())); | 43 Supplement<LocalFrame>::From(*frame, SupplementName())); |
38 if (!provider_proxy) { | 44 if (!provider_proxy) { |
39 provider_proxy = new SensorProviderProxy(*frame); | 45 provider_proxy = new SensorProviderProxy(*frame); |
40 Supplement<LocalFrame>::ProvideTo(*frame, SupplementName(), provider_proxy); | 46 Supplement<LocalFrame>::ProvideTo(*frame, SupplementName(), provider_proxy); |
41 } | 47 } |
42 provider_proxy->InitializeIfNeeded(frame); | 48 provider_proxy->InitializeIfNeeded(frame); |
43 return provider_proxy; | 49 return provider_proxy; |
44 } | 50 } |
45 | 51 |
46 SensorProviderProxy::~SensorProviderProxy() {} | 52 SensorProviderProxy::~SensorProviderProxy() {} |
47 | 53 |
| 54 void SensorProviderProxy::resetPermissionService() { |
| 55 permission_service_.reset(); |
| 56 } |
| 57 |
48 DEFINE_TRACE(SensorProviderProxy) { | 58 DEFINE_TRACE(SensorProviderProxy) { |
49 visitor->Trace(sensor_proxies_); | 59 visitor->Trace(sensor_proxies_); |
50 Supplement<LocalFrame>::Trace(visitor); | 60 Supplement<LocalFrame>::Trace(visitor); |
51 } | 61 } |
52 | 62 |
53 SensorProxy* SensorProviderProxy::CreateSensorProxy( | 63 SensorProxy* SensorProviderProxy::CreateSensorProxy( |
54 device::mojom::blink::SensorType type, | 64 device::mojom::blink::SensorType type, |
55 Page* page) { | 65 Page* page, |
| 66 RefPtr<SecurityOrigin> origin) { |
56 DCHECK(!GetSensorProxy(type)); | 67 DCHECK(!GetSensorProxy(type)); |
57 | 68 |
58 SensorProxy* sensor = new SensorProxy(type, this, page); | 69 SensorProxy* sensor = new SensorProxy(type, std::move(origin), this, page); |
59 sensor_proxies_.insert(sensor); | 70 sensor_proxies_.insert(sensor); |
60 | 71 |
61 return sensor; | 72 return sensor; |
62 } | 73 } |
63 | 74 |
64 SensorProxy* SensorProviderProxy::GetSensorProxy( | 75 SensorProxy* SensorProviderProxy::GetSensorProxy( |
65 device::mojom::blink::SensorType type) { | 76 device::mojom::blink::SensorType type) { |
66 for (SensorProxy* sensor : sensor_proxies_) { | 77 for (SensorProxy* sensor : sensor_proxies_) { |
67 // TODO(Mikhail) : Hash sensors by type for efficiency. | 78 // TODO(Mikhail) : Hash sensors by type for efficiency. |
68 if (sensor->GetType() == type) | 79 if (sensor->GetType() == type) |
69 return sensor; | 80 return sensor; |
70 } | 81 } |
71 | 82 |
72 return nullptr; | 83 return nullptr; |
73 } | 84 } |
74 | 85 |
75 void SensorProviderProxy::OnSensorProviderConnectionError() { | 86 void SensorProviderProxy::OnSensorProviderConnectionError() { |
| 87 permission_service_.reset(); |
76 sensor_provider_.reset(); | 88 sensor_provider_.reset(); |
77 for (SensorProxy* sensor : sensor_proxies_) | 89 for (SensorProxy* sensor : sensor_proxies_) |
78 sensor->HandleSensorError(); | 90 sensor->HandleSensorError(); |
79 } | 91 } |
80 | 92 |
81 } // namespace blink | 93 } // namespace blink |
OLD | NEW |