Add CrossThreadCopier and isolatedCopy() to SourceLocation.

We have to make isolatedCopy of every WTF::String when passing
SourceLocation between threads.

This fixes data race introduced by https://codereview.chromium.org/2010603002.

BUG=615712

Review-Url: https://codereview.chromium.org/2024993003
Cr-Original-Commit-Position: refs/heads/master@{#397137}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 48e31ee8f0d774b8674b90a7167e648ada24292c
diff --git a/String16STL.h b/String16STL.h
index 3488dc1..73b541a 100644
--- a/String16STL.h
+++ b/String16STL.h
@@ -34,6 +34,7 @@
             m_impl[i] = characters[i];
     }
     String16(const UChar* characters, size_t size) : m_impl(characters, size) { }
+    String16 isolatedCopy() const { return String16(m_impl); }
     ~String16() { }
 
     unsigned sizeInBytes() const { return m_impl.size() * sizeof(UChar); }
diff --git a/String16WTF.h b/String16WTF.h
index 533dd2d..b60045b 100644
--- a/String16WTF.h
+++ b/String16WTF.h
@@ -35,6 +35,7 @@
     operator WTF::String() const { return m_impl; }
     operator WebString() { return m_impl; }
     const WTF::String& impl() const { return m_impl; }
+    String16 isolatedCopy() const { return String16(m_impl.isolatedCopy()); }
 
     ~String16() { }