Index: Source/bindings/core/v8/V8StringResource.h |
diff --git a/Source/bindings/core/v8/V8StringResource.h b/Source/bindings/core/v8/V8StringResource.h |
index a84c216c4561bd6383a2756b7de65d06e1ffcd63..834af92061cb4cde4c37dd1f7ab77063857a2f84 100644 |
--- a/Source/bindings/core/v8/V8StringResource.h |
+++ b/Source/bindings/core/v8/V8StringResource.h |
@@ -26,6 +26,7 @@ |
#ifndef V8StringResource_h |
#define V8StringResource_h |
+#include "bindings/core/v8/ExceptionState.h" |
#include "wtf/Threading.h" |
#include "wtf/text/AtomicString.h" |
#include "wtf/text/WTFString.h" |
@@ -198,6 +199,37 @@ public: |
bool prepare() |
{ |
+ if (prepareFast()) |
+ return true; |
+ |
+ m_v8Object = m_v8Object->ToString(); |
+ // Handle the case where an exception is thrown as part of invoking toString on the object. |
+ if (m_v8Object.IsEmpty()) |
+ return false; |
+ return true; |
+ } |
+ |
+ bool prepare(ExceptionState& exceptionState) |
+ { |
+ if (prepareFast()) |
+ return true; |
+ |
+ v8::TryCatch block; |
+ m_v8Object = m_v8Object->ToString(); |
+ // Handle the case where an exception is thrown as part of invoking toString on the object. |
+ if (block.HasCaught()) { |
+ exceptionState.rethrowV8Exception(block.Exception()); |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
+ operator String() const { return toString<String>(); } |
+ operator AtomicString() const { return toString<AtomicString>(); } |
+ |
+private: |
+ bool prepareFast() |
+ { |
if (m_v8Object.IsEmpty()) |
return true; |
@@ -215,16 +247,9 @@ public: |
} |
m_mode = DoNotExternalize; |
- m_v8Object = m_v8Object->ToString(); |
- // Handle the case where an exception is thrown as part of invoking toString on the object. |
- if (m_v8Object.IsEmpty()) |
- return false; |
- return true; |
+ return false; |
} |
- operator String() const { return toString<String>(); } |
- operator AtomicString() const { return toString<AtomicString>(); } |
-private: |
bool isValid() const; |
String fallbackString() const; |