| Index: src/inspector/SearchUtil.cpp
 | 
| diff --git a/src/inspector/SearchUtil.cpp b/src/inspector/SearchUtil.cpp
 | 
| deleted file mode 100644
 | 
| index 8db6e07e6436c3968146fe164c01469e2550e35f..0000000000000000000000000000000000000000
 | 
| --- a/src/inspector/SearchUtil.cpp
 | 
| +++ /dev/null
 | 
| @@ -1,173 +0,0 @@
 | 
| -// Copyright 2016 the V8 project authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "src/inspector/SearchUtil.h"
 | 
| -
 | 
| -#include "src/inspector/V8InspectorImpl.h"
 | 
| -#include "src/inspector/V8InspectorSessionImpl.h"
 | 
| -#include "src/inspector/V8Regex.h"
 | 
| -#include "src/inspector/protocol/Protocol.h"
 | 
| -
 | 
| -namespace v8_inspector {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -String16 findMagicComment(const String16& content, const String16& name, bool multiline)
 | 
| -{
 | 
| -    DCHECK(name.find("=") == String16::kNotFound);
 | 
| -    unsigned length = content.length();
 | 
| -    unsigned nameLength = name.length();
 | 
| -
 | 
| -    size_t pos = length;
 | 
| -    size_t equalSignPos = 0;
 | 
| -    size_t closingCommentPos = 0;
 | 
| -    while (true) {
 | 
| -        pos = content.reverseFind(name, pos);
 | 
| -        if (pos == String16::kNotFound)
 | 
| -            return String16();
 | 
| -
 | 
| -        // Check for a /\/[\/*][@#][ \t]/ regexp (length of 4) before found name.
 | 
| -        if (pos < 4)
 | 
| -            return String16();
 | 
| -        pos -= 4;
 | 
| -        if (content[pos] != '/')
 | 
| -            continue;
 | 
| -        if ((content[pos + 1] != '/' || multiline)
 | 
| -            && (content[pos + 1] != '*' || !multiline))
 | 
| -            continue;
 | 
| -        if (content[pos + 2] != '#' && content[pos + 2] != '@')
 | 
| -            continue;
 | 
| -        if (content[pos + 3] != ' ' && content[pos + 3] != '\t')
 | 
| -            continue;
 | 
| -        equalSignPos = pos + 4 + nameLength;
 | 
| -        if (equalSignPos < length && content[equalSignPos] != '=')
 | 
| -            continue;
 | 
| -        if (multiline) {
 | 
| -            closingCommentPos = content.find("*/", equalSignPos + 1);
 | 
| -            if (closingCommentPos == String16::kNotFound)
 | 
| -                return String16();
 | 
| -        }
 | 
| -
 | 
| -        break;
 | 
| -    }
 | 
| -
 | 
| -    DCHECK(equalSignPos);
 | 
| -    DCHECK(!multiline || closingCommentPos);
 | 
| -    size_t urlPos = equalSignPos + 1;
 | 
| -    String16 match = multiline
 | 
| -        ? content.substring(urlPos, closingCommentPos - urlPos)
 | 
| -        : content.substring(urlPos);
 | 
| -
 | 
| -    size_t newLine = match.find("\n");
 | 
| -    if (newLine != String16::kNotFound)
 | 
| -        match = match.substring(0, newLine);
 | 
| -    match = match.stripWhiteSpace();
 | 
| -
 | 
| -    for (unsigned i = 0; i < match.length(); ++i) {
 | 
| -        UChar c = match[i];
 | 
| -        if (c == '"' || c == '\'' || c == ' ' || c == '\t')
 | 
| -            return "";
 | 
| -    }
 | 
| -
 | 
| -    return match;
 | 
| -}
 | 
| -
 | 
| -String16 createSearchRegexSource(const String16& text)
 | 
| -{
 | 
| -    String16Builder result;
 | 
| -
 | 
| -    for (unsigned i = 0; i < text.length(); i++) {
 | 
| -        UChar c = text[i];
 | 
| -        if (c == '[' || c == ']' || c == '(' || c == ')' || c == '{' || c == '}'
 | 
| -            || c == '+' || c == '-' || c == '*' || c == '.' || c == ',' || c == '?'
 | 
| -            || c == '\\' || c == '^' || c == '$' || c == '|') {
 | 
| -            result.append('\\');
 | 
| -        }
 | 
| -        result.append(c);
 | 
| -    }
 | 
| -
 | 
| -    return result.toString();
 | 
| -}
 | 
| -
 | 
| -std::unique_ptr<std::vector<unsigned>> lineEndings(const String16& text)
 | 
| -{
 | 
| -    std::unique_ptr<std::vector<unsigned>> result(new std::vector<unsigned>());
 | 
| -
 | 
| -    const String16 lineEndString = "\n";
 | 
| -    unsigned start = 0;
 | 
| -    while (start < text.length()) {
 | 
| -        size_t lineEnd = text.find(lineEndString, start);
 | 
| -        if (lineEnd == String16::kNotFound)
 | 
| -            break;
 | 
| -
 | 
| -        result->push_back(static_cast<unsigned>(lineEnd));
 | 
| -        start = lineEnd + 1;
 | 
| -    }
 | 
| -    result->push_back(static_cast<unsigned>(text.length()));
 | 
| -
 | 
| -    return result;
 | 
| -}
 | 
| -
 | 
| -std::vector<std::pair<int, String16>> scriptRegexpMatchesByLines(const V8Regex& regex, const String16& text)
 | 
| -{
 | 
| -    std::vector<std::pair<int, String16>> result;
 | 
| -    if (text.isEmpty())
 | 
| -        return result;
 | 
| -
 | 
| -    std::unique_ptr<std::vector<unsigned>> endings(lineEndings(text));
 | 
| -    unsigned size = endings->size();
 | 
| -    unsigned start = 0;
 | 
| -    for (unsigned lineNumber = 0; lineNumber < size; ++lineNumber) {
 | 
| -        unsigned lineEnd = endings->at(lineNumber);
 | 
| -        String16 line = text.substring(start, lineEnd - start);
 | 
| -        if (line.length() && line[line.length() - 1] == '\r')
 | 
| -            line = line.substring(0, line.length() - 1);
 | 
| -
 | 
| -        int matchLength;
 | 
| -        if (regex.match(line, 0, &matchLength) != -1)
 | 
| -            result.push_back(std::pair<int, String16>(lineNumber, line));
 | 
| -
 | 
| -        start = lineEnd + 1;
 | 
| -    }
 | 
| -    return result;
 | 
| -}
 | 
| -
 | 
| -std::unique_ptr<protocol::Debugger::SearchMatch> buildObjectForSearchMatch(int lineNumber, const String16& lineContent)
 | 
| -{
 | 
| -    return protocol::Debugger::SearchMatch::create()
 | 
| -        .setLineNumber(lineNumber)
 | 
| -        .setLineContent(lineContent)
 | 
| -        .build();
 | 
| -}
 | 
| -
 | 
| -std::unique_ptr<V8Regex> createSearchRegex(V8InspectorImpl* inspector, const String16& query, bool caseSensitive, bool isRegex)
 | 
| -{
 | 
| -    String16 regexSource = isRegex ? query : createSearchRegexSource(query);
 | 
| -    return wrapUnique(new V8Regex(inspector, regexSource, caseSensitive));
 | 
| -}
 | 
| -
 | 
| -} // namespace
 | 
| -
 | 
| -std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> searchInTextByLinesImpl(V8InspectorSession* session, const String16& text, const String16& query, const bool caseSensitive, const bool isRegex)
 | 
| -{
 | 
| -    std::unique_ptr<V8Regex> regex = createSearchRegex(static_cast<V8InspectorSessionImpl*>(session)->inspector(), query, caseSensitive, isRegex);
 | 
| -    std::vector<std::pair<int, String16>> matches = scriptRegexpMatchesByLines(*regex.get(), text);
 | 
| -
 | 
| -    std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> result;
 | 
| -    for (const auto& match : matches)
 | 
| -        result.push_back(buildObjectForSearchMatch(match.first, match.second));
 | 
| -    return result;
 | 
| -}
 | 
| -
 | 
| -String16 findSourceURL(const String16& content, bool multiline)
 | 
| -{
 | 
| -    return findMagicComment(content, "sourceURL", multiline);
 | 
| -}
 | 
| -
 | 
| -String16 findSourceMapURL(const String16& content, bool multiline)
 | 
| -{
 | 
| -    return findMagicComment(content, "sourceMappingURL", multiline);
 | 
| -}
 | 
| -
 | 
| -} // namespace v8_inspector
 | 
| 
 |