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/peerconnection/RTCStatsReport.h" | 5 #include "modules/peerconnection/RTCStatsReport.h" |
6 | 6 |
7 namespace blink { | 7 namespace blink { |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
11 template <typename T> | 11 template <typename T> |
12 bool addPropertyValue(v8::Local<v8::Object>& v8Object, | 12 bool addPropertyValue(v8::Local<v8::Object>& v8Object, |
13 v8::Isolate* isolate, | 13 v8::Isolate* isolate, |
14 T name, | 14 T name, |
15 v8::Local<v8::Value> value) { | 15 v8::Local<v8::Value> value) { |
16 return v8CallBoolean(v8Object->CreateDataProperty( | 16 return v8CallBoolean(v8Object->CreateDataProperty( |
17 isolate->GetCurrentContext(), v8String(isolate, name), value)); | 17 isolate->GetCurrentContext(), v8String(isolate, name), value)); |
18 } | 18 } |
19 | 19 |
| 20 bool addPropertySequenceOfBooleans(v8::Local<v8::Object>& v8Object, |
| 21 v8::Isolate* isolate, |
| 22 WebString name, |
| 23 const WebVector<int>& webVector) { |
| 24 v8::Local<v8::Array> v8Array = v8::Array::New(isolate, webVector.size()); |
| 25 for (size_t i = 0; i < webVector.size(); ++i) { |
| 26 if (!v8CallBoolean(v8Array->CreateDataProperty( |
| 27 isolate->GetCurrentContext(), static_cast<uint32_t>(i), |
| 28 v8::Boolean::New(isolate, static_cast<bool>(webVector[i]))))) |
| 29 return false; |
| 30 } |
| 31 return addPropertyValue(v8Object, isolate, name, v8Array); |
| 32 } |
| 33 |
20 template <typename T> | 34 template <typename T> |
21 bool addPropertySequenceOfNumbers(v8::Local<v8::Object>& v8Object, | 35 bool addPropertySequenceOfNumbers(v8::Local<v8::Object>& v8Object, |
22 v8::Isolate* isolate, | 36 v8::Isolate* isolate, |
23 WebString name, | 37 WebString name, |
24 const WebVector<T>& webVector) { | 38 const WebVector<T>& webVector) { |
25 v8::Local<v8::Array> v8Array = v8::Array::New(isolate, webVector.size()); | 39 v8::Local<v8::Array> v8Array = v8::Array::New(isolate, webVector.size()); |
26 for (size_t i = 0; i < webVector.size(); ++i) { | 40 for (size_t i = 0; i < webVector.size(); ++i) { |
27 if (!v8CallBoolean(v8Array->CreateDataProperty( | 41 if (!v8CallBoolean(v8Array->CreateDataProperty( |
28 isolate->GetCurrentContext(), static_cast<uint32_t>(i), | 42 isolate->GetCurrentContext(), static_cast<uint32_t>(i), |
29 v8::Number::New(isolate, static_cast<double>(webVector[i]))))) | 43 v8::Number::New(isolate, static_cast<double>(webVector[i]))))) |
(...skipping 27 matching lines...) Expand all Loading... |
57 success &= addPropertyValue(v8Object, isolate, "timestamp", | 71 success &= addPropertyValue(v8Object, isolate, "timestamp", |
58 v8::Number::New(isolate, stats->timestamp())); | 72 v8::Number::New(isolate, stats->timestamp())); |
59 success &= addPropertyValue(v8Object, isolate, "type", | 73 success &= addPropertyValue(v8Object, isolate, "type", |
60 v8String(isolate, stats->type())); | 74 v8String(isolate, stats->type())); |
61 for (size_t i = 0; i < stats->membersCount() && success; ++i) { | 75 for (size_t i = 0; i < stats->membersCount() && success; ++i) { |
62 std::unique_ptr<WebRTCStatsMember> member = stats->getMember(i); | 76 std::unique_ptr<WebRTCStatsMember> member = stats->getMember(i); |
63 if (!member->isDefined()) | 77 if (!member->isDefined()) |
64 continue; | 78 continue; |
65 WebString name = member->name(); | 79 WebString name = member->name(); |
66 switch (member->type()) { | 80 switch (member->type()) { |
| 81 case WebRTCStatsMemberTypeBool: |
| 82 success &= |
| 83 addPropertyValue(v8Object, isolate, name, |
| 84 v8::Boolean::New(isolate, member->valueBool())); |
| 85 break; |
67 case WebRTCStatsMemberTypeInt32: | 86 case WebRTCStatsMemberTypeInt32: |
68 success &= addPropertyValue( | 87 success &= addPropertyValue( |
69 v8Object, isolate, name, | 88 v8Object, isolate, name, |
70 v8::Number::New(isolate, | 89 v8::Number::New(isolate, |
71 static_cast<double>(member->valueInt32()))); | 90 static_cast<double>(member->valueInt32()))); |
72 break; | 91 break; |
73 case WebRTCStatsMemberTypeUint32: | 92 case WebRTCStatsMemberTypeUint32: |
74 success &= addPropertyValue( | 93 success &= addPropertyValue( |
75 v8Object, isolate, name, | 94 v8Object, isolate, name, |
76 v8::Number::New(isolate, | 95 v8::Number::New(isolate, |
(...skipping 13 matching lines...) Expand all Loading... |
90 break; | 109 break; |
91 case WebRTCStatsMemberTypeDouble: | 110 case WebRTCStatsMemberTypeDouble: |
92 success &= | 111 success &= |
93 addPropertyValue(v8Object, isolate, name, | 112 addPropertyValue(v8Object, isolate, name, |
94 v8::Number::New(isolate, member->valueDouble())); | 113 v8::Number::New(isolate, member->valueDouble())); |
95 break; | 114 break; |
96 case WebRTCStatsMemberTypeString: | 115 case WebRTCStatsMemberTypeString: |
97 success &= addPropertyValue(v8Object, isolate, name, | 116 success &= addPropertyValue(v8Object, isolate, name, |
98 v8String(isolate, member->valueString())); | 117 v8String(isolate, member->valueString())); |
99 break; | 118 break; |
| 119 case WebRTCStatsMemberTypeSequenceBool: |
| 120 success &= addPropertySequenceOfBooleans(v8Object, isolate, name, |
| 121 member->valueSequenceBool()); |
| 122 break; |
100 case WebRTCStatsMemberTypeSequenceInt32: | 123 case WebRTCStatsMemberTypeSequenceInt32: |
101 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, | 124 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, |
102 member->valueSequenceInt32()); | 125 member->valueSequenceInt32()); |
103 break; | 126 break; |
104 case WebRTCStatsMemberTypeSequenceUint32: | 127 case WebRTCStatsMemberTypeSequenceUint32: |
105 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, | 128 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, |
106 member->valueSequenceUint32()); | 129 member->valueSequenceUint32()); |
107 break; | 130 break; |
108 case WebRTCStatsMemberTypeSequenceInt64: | 131 case WebRTCStatsMemberTypeSequenceInt64: |
109 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, | 132 success &= addPropertySequenceOfNumbers(v8Object, isolate, name, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 v8::Local<v8::Value>& value, | 192 v8::Local<v8::Value>& value, |
170 ExceptionState&) { | 193 ExceptionState&) { |
171 std::unique_ptr<WebRTCStats> stats = m_report->getStats(key); | 194 std::unique_ptr<WebRTCStats> stats = m_report->getStats(key); |
172 if (!stats) | 195 if (!stats) |
173 return false; | 196 return false; |
174 value = webRTCStatsToValue(scriptState, stats.get()); | 197 value = webRTCStatsToValue(scriptState, stats.get()); |
175 return true; | 198 return true; |
176 } | 199 } |
177 | 200 |
178 } // namespace blink | 201 } // namespace blink |
OLD | NEW |