| Index: src/objects.cc | 
| =================================================================== | 
| --- src/objects.cc	(revision 1858) | 
| +++ src/objects.cc	(working copy) | 
| @@ -3305,13 +3305,6 @@ | 
| } | 
| ASSERT(string_tag == kExternalStringTag); | 
| ExternalTwoByteString* ext = ExternalTwoByteString::cast(string); | 
| -  // This is a workaround for Chromium bug 9746: http://crbug.com/9746 | 
| -  // For external strings with a deleted resource we return a special | 
| -  // Vector which will not compare to any string when doing SymbolTable | 
| -  // lookups. | 
| -  if (ext->resource() == NULL) { | 
| -    return Vector<const uc16>(NULL, length); | 
| -  } | 
| const uc16* start = | 
| reinterpret_cast<const uc16*>(ext->resource()->data()); | 
| return Vector<const uc16>(start + offset, length); | 
| @@ -4128,18 +4121,6 @@ | 
| } | 
|  | 
|  | 
| -// This is a workaround for Chromium bug 9746: http://crbug.com/9746 | 
| -// Returns true if this Vector matches the problem exposed in the bug. | 
| -template <typename T> | 
| -static bool CheckVectorForBug9746(Vector<T> vec) { | 
| -  // The problem is that somehow external string entries in the symbol | 
| -  // table can have their resources collected while they are still in the | 
| -  // table. This should not happen according to the test in the function | 
| -  // DisposeExternalString in api.cc, but we have evidence that it does. | 
| -  return (vec.start() == NULL) ? true : false; | 
| -} | 
| - | 
| - | 
| static StringInputBuffer string_compare_buffer_b; | 
|  | 
|  | 
| @@ -4150,9 +4131,7 @@ | 
| VectorIterator<char> ib(b->ToAsciiVector()); | 
| return CompareStringContents(ia, &ib); | 
| } else { | 
| -      Vector<const uc16> vb = b->ToUC16Vector(); | 
| -      if (CheckVectorForBug9746(vb)) return false; | 
| -      VectorIterator<uc16> ib(vb); | 
| +      VectorIterator<uc16> ib(b->ToUC16Vector()); | 
| return CompareStringContents(ia, &ib); | 
| } | 
| } else { | 
| @@ -4194,9 +4173,7 @@ | 
| return CompareRawStringContents(vec1, vec2); | 
| } else { | 
| VectorIterator<char> buf1(vec1); | 
| -          Vector<const uc16> vec2 = other->ToUC16Vector(); | 
| -          if (CheckVectorForBug9746(vec2)) return false; | 
| -          VectorIterator<uc16> ib(vec2); | 
| +          VectorIterator<uc16> ib(other->ToUC16Vector()); | 
| return CompareStringContents(&buf1, &ib); | 
| } | 
| } else { | 
| @@ -4206,15 +4183,13 @@ | 
| } | 
| } else { | 
| Vector<const uc16> vec1 = this->ToUC16Vector(); | 
| -      if (CheckVectorForBug9746(vec1)) return false; | 
| if (other->IsFlat()) { | 
| if (other->IsAsciiRepresentation()) { | 
| VectorIterator<uc16> buf1(vec1); | 
| VectorIterator<char> ib(other->ToAsciiVector()); | 
| return CompareStringContents(&buf1, &ib); | 
| } else { | 
| -          Vector<const uc16> vec2 = other->ToUC16Vector(); | 
| -          if (CheckVectorForBug9746(vec2)) return false; | 
| +          Vector<const uc16> vec2(other->ToUC16Vector()); | 
| return CompareRawStringContents(vec1, vec2); | 
| } | 
| } else { | 
| @@ -4259,18 +4234,6 @@ | 
|  | 
|  | 
| bool String::IsEqualTo(Vector<const char> str) { | 
| -  // This is a workaround for Chromium bug 9746: http://crbug.com/9746 | 
| -  // The problem is that somehow external string entries in the symbol | 
| -  // table can have their resources deleted while they are still in the | 
| -  // table. This should not happen according to the test in the function | 
| -  // DisposeExternalString in api.cc but we have evidence that it does. | 
| -  // Thus we add this bailout here. | 
| -  StringShape shape(this); | 
| -  if (shape.IsExternalTwoByte()) { | 
| -    ExternalTwoByteString* ext = ExternalTwoByteString::cast(this); | 
| -    if (ext->resource() == NULL) return false; | 
| -  } | 
| - | 
| int slen = length(); | 
| Access<Scanner::Utf8Decoder> decoder(Scanner::utf8_decoder()); | 
| decoder->Reset(str.start(), str.length()); | 
|  |