Merge v8 from https://chromium.googlesource.com/external/v8.git at f284b29e37d97d7ee9128055862179dcbda7e398

This commit was generated by merge_from_chromium.py.

Change-Id: I3d3e90de40e5c871ac96ce46463670495ae0d5cc
diff --git a/src/api.cc b/src/api.cc
index 538071a..abe50f6 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -5545,6 +5545,11 @@
   i::Handle<i::String> obj = Utils::OpenHandle(this);
   i::Isolate* isolate = obj->GetIsolate();
 
+  // TODO(yangguo): Externalizing sliced/cons strings allocates.
+  // This rule can be removed when all code that can
+  // trigger an access check is handlified and therefore GC safe.
+  if (isolate->heap()->old_pointer_space()->Contains(*obj)) return false;
+
   if (isolate->string_tracker()->IsFreshUnusedString(obj)) return false;
   int size = obj->Size();  // Byte size of the original string.
   if (size < i::ExternalString::kShortSize) return false;
diff --git a/src/version.cc b/src/version.cc
index 1334a76..2ff7977 100644
--- a/src/version.cc
+++ b/src/version.cc
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     28
 #define BUILD_NUMBER      71
-#define PATCH_LEVEL       1
+#define PATCH_LEVEL       2
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)
 #define IS_CANDIDATE_VERSION 0