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

Side by Side Diff: src/inspector/string-util.cc

Issue 2467853003: [inspector] migrate Runtime to new style (Closed)
Patch Set: addressed comments Created 4 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « src/inspector/string-util.h ('k') | src/inspector/v8-console.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project 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 "src/inspector/string-util.h" 5 #include "src/inspector/string-util.h"
6 6
7 #include "src/inspector/protocol/Protocol.h" 7 #include "src/inspector/protocol/Protocol.h"
8 8
9 namespace v8_inspector { 9 namespace v8_inspector {
10 10
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 } 104 }
105 105
106 std::unique_ptr<protocol::Value> parseJSON(const String16& string) { 106 std::unique_ptr<protocol::Value> parseJSON(const String16& string) {
107 if (!string.length()) return nullptr; 107 if (!string.length()) return nullptr;
108 return protocol::parseJSON(string.characters16(), 108 return protocol::parseJSON(string.characters16(),
109 static_cast<int>(string.length())); 109 static_cast<int>(string.length()));
110 } 110 }
111 111
112 } // namespace protocol 112 } // namespace protocol
113 113
114 std::unique_ptr<protocol::Value> toProtocolValue(protocol::String* errorString,
115 v8::Local<v8::Context> context,
116 v8::Local<v8::Value> value,
117 int maxDepth) {
118 if (value.IsEmpty()) {
119 UNREACHABLE();
120 return nullptr;
121 }
122
123 if (!maxDepth) {
124 *errorString = "Object reference chain is too long";
125 return nullptr;
126 }
127 maxDepth--;
128
129 if (value->IsNull() || value->IsUndefined()) return protocol::Value::null();
130 if (value->IsBoolean())
131 return protocol::FundamentalValue::create(value.As<v8::Boolean>()->Value());
132 if (value->IsNumber()) {
133 double doubleValue = value.As<v8::Number>()->Value();
134 int intValue = static_cast<int>(doubleValue);
135 if (intValue == doubleValue)
136 return protocol::FundamentalValue::create(intValue);
137 return protocol::FundamentalValue::create(doubleValue);
138 }
139 if (value->IsString())
140 return protocol::StringValue::create(
141 toProtocolString(value.As<v8::String>()));
142 if (value->IsArray()) {
143 v8::Local<v8::Array> array = value.As<v8::Array>();
144 std::unique_ptr<protocol::ListValue> inspectorArray =
145 protocol::ListValue::create();
146 uint32_t length = array->Length();
147 for (uint32_t i = 0; i < length; i++) {
148 v8::Local<v8::Value> value;
149 if (!array->Get(context, i).ToLocal(&value)) {
150 *errorString = "Internal error";
151 return nullptr;
152 }
153 std::unique_ptr<protocol::Value> element =
154 toProtocolValue(errorString, context, value, maxDepth);
155 if (!element) return nullptr;
156 inspectorArray->pushValue(std::move(element));
157 }
158 return std::move(inspectorArray);
159 }
160 if (value->IsObject()) {
161 std::unique_ptr<protocol::DictionaryValue> jsonObject =
162 protocol::DictionaryValue::create();
163 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(value);
164 v8::Local<v8::Array> propertyNames;
165 if (!object->GetPropertyNames(context).ToLocal(&propertyNames)) {
166 *errorString = "Internal error";
167 return nullptr;
168 }
169 uint32_t length = propertyNames->Length();
170 for (uint32_t i = 0; i < length; i++) {
171 v8::Local<v8::Value> name;
172 if (!propertyNames->Get(context, i).ToLocal(&name)) {
173 *errorString = "Internal error";
174 return nullptr;
175 }
176 // FIXME(yurys): v8::Object should support GetOwnPropertyNames
177 if (name->IsString()) {
178 v8::Maybe<bool> hasRealNamedProperty = object->HasRealNamedProperty(
179 context, v8::Local<v8::String>::Cast(name));
180 if (!hasRealNamedProperty.IsJust() || !hasRealNamedProperty.FromJust())
181 continue;
182 }
183 v8::Local<v8::String> propertyName;
184 if (!name->ToString(context).ToLocal(&propertyName)) continue;
185 v8::Local<v8::Value> property;
186 if (!object->Get(context, name).ToLocal(&property)) {
187 *errorString = "Internal error";
188 return nullptr;
189 }
190 std::unique_ptr<protocol::Value> propertyValue =
191 toProtocolValue(errorString, context, property, maxDepth);
192 if (!propertyValue) return nullptr;
193 jsonObject->setValue(toProtocolString(propertyName),
194 std::move(propertyValue));
195 }
196 return std::move(jsonObject);
197 }
198 *errorString = "Object couldn't be returned by value";
199 return nullptr;
200 }
201
202 // static 114 // static
203 std::unique_ptr<StringBuffer> StringBuffer::create(const StringView& string) { 115 std::unique_ptr<StringBuffer> StringBuffer::create(const StringView& string) {
204 String16 owner = toString16(string); 116 String16 owner = toString16(string);
205 return StringBufferImpl::adopt(owner); 117 return StringBufferImpl::adopt(owner);
206 } 118 }
207 119
208 // static 120 // static
209 std::unique_ptr<StringBufferImpl> StringBufferImpl::adopt(String16& string) { 121 std::unique_ptr<StringBufferImpl> StringBufferImpl::adopt(String16& string) {
210 return wrapUnique(new StringBufferImpl(string)); 122 return wrapUnique(new StringBufferImpl(string));
211 } 123 }
212 124
213 StringBufferImpl::StringBufferImpl(String16& string) { 125 StringBufferImpl::StringBufferImpl(String16& string) {
214 m_owner.swap(string); 126 m_owner.swap(string);
215 m_string = toStringView(m_owner); 127 m_string = toStringView(m_owner);
216 } 128 }
217 129
218 } // namespace v8_inspector 130 } // namespace v8_inspector
OLDNEW
« no previous file with comments | « src/inspector/string-util.h ('k') | src/inspector/v8-console.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698