| Index: third_party/WebKit/Source/core/dom/Node.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp
|
| index caf5618827c3424f3f6e8939958d3761287ee1f4..600af2f195aadbeb1136ad3b602b9d93b4d01122 100644
|
| --- a/third_party/WebKit/Source/core/dom/Node.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/Node.cpp
|
| @@ -109,6 +109,24 @@
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +// TODO(crbug.com/545926): Unsafe hack to avoid triggering the
|
| +// ThreadRestrictionVerifier on StringImpl. This should be fixed completely, and
|
| +// we should always avoid accessing these strings from the impl thread.
|
| +// Currently code that calls into this method from the impl thread tries to make
|
| +// sure that the main thread is not running at this time.
|
| +void appendUnsafe(StringBuilder& builder, const String& offThreadString) {
|
| + StringImpl* impl = offThreadString.impl();
|
| + if (impl) {
|
| + builder.append(impl->is8Bit()
|
| + ? StringView(impl->characters8(), impl->length())
|
| + : StringView(impl->characters16(), impl->length()));
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| using namespace HTMLNames;
|
|
|
| struct SameSizeAsNode : EventTarget {
|
| @@ -1488,12 +1506,12 @@ unsigned short Node::compareDocumentPosition(
|
|
|
| String Node::debugName() const {
|
| StringBuilder name;
|
| - name.append(debugNodeName());
|
| + appendUnsafe(name, debugNodeName());
|
| if (isElementNode()) {
|
| const Element& thisElement = toElement(*this);
|
| if (thisElement.hasID()) {
|
| name.append(" id=\'");
|
| - name.append(thisElement.getIdAttribute());
|
| + appendUnsafe(name, thisElement.getIdAttribute());
|
| name.append('\'');
|
| }
|
|
|
| @@ -1502,7 +1520,7 @@ String Node::debugName() const {
|
| for (size_t i = 0; i < thisElement.classNames().size(); ++i) {
|
| if (i > 0)
|
| name.append(' ');
|
| - name.append(thisElement.classNames()[i]);
|
| + appendUnsafe(name, thisElement.classNames()[i]);
|
| }
|
| name.append('\'');
|
| }
|
|
|