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 "platform/v8_inspector/V8StringUtil.h" | 5 #include "platform/v8_inspector/V8StringUtil.h" |
6 | 6 |
| 7 #include "platform/inspector_protocol/InspectorProtocol.h" |
7 #include "platform/v8_inspector/V8InspectorImpl.h" | 8 #include "platform/v8_inspector/V8InspectorImpl.h" |
8 #include "platform/v8_inspector/V8InspectorSessionImpl.h" | 9 #include "platform/v8_inspector/V8InspectorSessionImpl.h" |
9 #include "platform/v8_inspector/V8Regex.h" | 10 #include "platform/v8_inspector/V8Regex.h" |
10 | 11 |
11 namespace v8_inspector { | 12 namespace v8_inspector { |
12 | 13 |
13 namespace { | 14 namespace { |
14 | 15 |
15 String16 findMagicComment(const String16& content, const String16& name, bool mu
ltiline) | 16 String16 findMagicComment(const String16& content, const String16& name, bool mu
ltiline) |
16 { | 17 { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 if (string.isEmpty()) | 161 if (string.isEmpty()) |
161 return v8::String::Empty(isolate); | 162 return v8::String::Empty(isolate); |
162 return v8::String::NewFromTwoByte(isolate, reinterpret_cast<const uint16_t*>
(string.characters16()), v8::NewStringType::kInternalized, string.length()).ToLo
calChecked(); | 163 return v8::String::NewFromTwoByte(isolate, reinterpret_cast<const uint16_t*>
(string.characters16()), v8::NewStringType::kInternalized, string.length()).ToLo
calChecked(); |
163 } | 164 } |
164 | 165 |
165 v8::Local<v8::String> toV8StringInternalized(v8::Isolate* isolate, const char* s
tr) | 166 v8::Local<v8::String> toV8StringInternalized(v8::Isolate* isolate, const char* s
tr) |
166 { | 167 { |
167 return v8::String::NewFromUtf8(isolate, str, v8::NewStringType::kInternalize
d).ToLocalChecked(); | 168 return v8::String::NewFromUtf8(isolate, str, v8::NewStringType::kInternalize
d).ToLocalChecked(); |
168 } | 169 } |
169 | 170 |
| 171 v8::Local<v8::String> toV8String(v8::Isolate* isolate, const StringView& string) |
| 172 { |
| 173 if (!string.length()) |
| 174 return v8::String::Empty(isolate); |
| 175 if (string.is8Bit()) |
| 176 return v8::String::NewFromOneByte(isolate, reinterpret_cast<const uint8_
t*>(string.characters8()), v8::NewStringType::kNormal, string.length()).ToLocalC
hecked(); |
| 177 return v8::String::NewFromTwoByte(isolate, reinterpret_cast<const uint16_t*>
(string.characters16()), v8::NewStringType::kNormal, string.length()).ToLocalChe
cked(); |
| 178 } |
| 179 |
170 String16 toProtocolString(v8::Local<v8::String> value) | 180 String16 toProtocolString(v8::Local<v8::String> value) |
171 { | 181 { |
172 if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) | 182 if (value.IsEmpty() || value->IsNull() || value->IsUndefined()) |
173 return String16(); | 183 return String16(); |
174 std::unique_ptr<UChar[]> buffer(new UChar[value->Length()]); | 184 std::unique_ptr<UChar[]> buffer(new UChar[value->Length()]); |
175 value->Write(reinterpret_cast<uint16_t*>(buffer.get()), 0, value->Length()); | 185 value->Write(reinterpret_cast<uint16_t*>(buffer.get()), 0, value->Length()); |
176 return String16(buffer.get(), value->Length()); | 186 return String16(buffer.get(), value->Length()); |
177 } | 187 } |
178 | 188 |
179 String16 toProtocolStringWithTypeCheck(v8::Local<v8::Value> value) | 189 String16 toProtocolStringWithTypeCheck(v8::Local<v8::Value> value) |
180 { | 190 { |
181 if (value.IsEmpty() || !value->IsString()) | 191 if (value.IsEmpty() || !value->IsString()) |
182 return String16(); | 192 return String16(); |
183 return toProtocolString(value.As<v8::String>()); | 193 return toProtocolString(value.As<v8::String>()); |
184 } | 194 } |
185 | 195 |
| 196 String16 toString16(const StringView& string) |
| 197 { |
| 198 if (!string.length()) |
| 199 return String16(); |
| 200 if (string.is8Bit()) |
| 201 return String16(reinterpret_cast<const char*>(string.characters8()), str
ing.length()); |
| 202 return String16(reinterpret_cast<const UChar*>(string.characters16()), strin
g.length()); |
| 203 } |
| 204 |
| 205 StringView toStringView(const String16& string) |
| 206 { |
| 207 if (string.isEmpty()) |
| 208 return StringView(); |
| 209 return StringView(reinterpret_cast<const uint16_t*>(string.characters16()),
string.length()); |
| 210 } |
| 211 |
| 212 bool stringViewStartsWith(const StringView& string, const char* prefix) |
| 213 { |
| 214 if (!string.length()) |
| 215 return !(*prefix); |
| 216 if (string.is8Bit()) { |
| 217 for (size_t i = 0, j = 0; prefix[j] && i < string.length(); ++i, ++j) { |
| 218 if (string.characters8()[i] != prefix[j]) |
| 219 return false; |
| 220 } |
| 221 } else { |
| 222 for (size_t i = 0, j = 0; prefix[j] && i < string.length(); ++i, ++j) { |
| 223 if (string.characters16()[i] != prefix[j]) |
| 224 return false; |
| 225 } |
| 226 } |
| 227 return true; |
| 228 } |
| 229 |
| 230 std::unique_ptr<protocol::Value> parseJSON(const StringView& string) |
| 231 { |
| 232 if (!string.length()) |
| 233 return nullptr; |
| 234 if (string.is8Bit()) |
| 235 return blink::protocol::parseJSON(string.characters8(), string.length())
; |
| 236 return blink::protocol::parseJSON(string.characters16(), string.length()); |
| 237 } |
| 238 |
186 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> searchInTextByLine
sImpl(V8InspectorSession* session, const String16& text, const String16& query,
const bool caseSensitive, const bool isRegex) | 239 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> searchInTextByLine
sImpl(V8InspectorSession* session, const String16& text, const String16& query,
const bool caseSensitive, const bool isRegex) |
187 { | 240 { |
188 std::unique_ptr<V8Regex> regex = createSearchRegex(static_cast<V8InspectorSe
ssionImpl*>(session)->inspector(), query, caseSensitive, isRegex); | 241 std::unique_ptr<V8Regex> regex = createSearchRegex(static_cast<V8InspectorSe
ssionImpl*>(session)->inspector(), query, caseSensitive, isRegex); |
189 std::vector<std::pair<int, String16>> matches = scriptRegexpMatchesByLines(*
regex.get(), text); | 242 std::vector<std::pair<int, String16>> matches = scriptRegexpMatchesByLines(*
regex.get(), text); |
190 | 243 |
191 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> result; | 244 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> result; |
192 for (const auto& match : matches) | 245 for (const auto& match : matches) |
193 result.push_back(buildObjectForSearchMatch(match.first, match.second)); | 246 result.push_back(buildObjectForSearchMatch(match.first, match.second)); |
194 return result; | 247 return result; |
195 } | 248 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 if (!propertyValue) | 323 if (!propertyValue) |
271 return nullptr; | 324 return nullptr; |
272 jsonObject->setValue(toProtocolString(propertyName), std::move(prope
rtyValue)); | 325 jsonObject->setValue(toProtocolString(propertyName), std::move(prope
rtyValue)); |
273 } | 326 } |
274 return std::move(jsonObject); | 327 return std::move(jsonObject); |
275 } | 328 } |
276 NOTREACHED(); | 329 NOTREACHED(); |
277 return nullptr; | 330 return nullptr; |
278 } | 331 } |
279 | 332 |
| 333 // static |
| 334 std::unique_ptr<StringBuffer> StringBuffer::create(const StringView& string) |
| 335 { |
| 336 String16 owner = toString16(string); |
| 337 return StringBufferImpl::adopt(owner); |
| 338 } |
| 339 |
| 340 // static |
| 341 std::unique_ptr<StringBufferImpl> StringBufferImpl::adopt(String16& string) |
| 342 { |
| 343 return wrapUnique(new StringBufferImpl(string)); |
| 344 } |
| 345 |
| 346 StringBufferImpl::StringBufferImpl(String16& string) |
| 347 { |
| 348 m_owner.swap(string); |
| 349 m_string = toStringView(m_owner); |
| 350 } |
| 351 |
280 } // namespace v8_inspector | 352 } // namespace v8_inspector |
OLD | NEW |