Index: Source/bindings/v8/ScriptController.cpp |
diff --git a/Source/bindings/v8/ScriptController.cpp b/Source/bindings/v8/ScriptController.cpp |
index bbf7e113c4bdc79eb05a96543b996e0f99cdfc66..4952612ebce8f3e50c6031d8912b779550a9582b 100644 |
--- a/Source/bindings/v8/ScriptController.cpp |
+++ b/Source/bindings/v8/ScriptController.cpp |
@@ -513,20 +513,20 @@ |
bool locationChangeBefore = m_frame->navigationScheduler().locationChangePending(); |
String decodedURL = decodeURLEscapeSequences(url.string()); |
- v8::HandleScope handleScope(m_isolate); |
- v8::Local<v8::Value> result = evaluateScriptInMainWorld(ScriptSourceCode(decodedURL.substring(javascriptSchemeLength)), NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled); |
+ ScriptValue result = evaluateScriptInMainWorld(ScriptSourceCode(decodedURL.substring(javascriptSchemeLength)), NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled); |
// If executing script caused this frame to be removed from the page, we |
// don't want to try to replace its document! |
if (!m_frame->page()) |
return true; |
- if (result.IsEmpty() || !result->IsString()) |
+ String scriptResult; |
+ if (!result.toString(scriptResult)) |
return true; |
- String scriptResult = toCoreString(v8::Handle<v8::String>::Cast(result)); |
// We're still in a frame, so there should be a DocumentLoader. |
ASSERT(m_frame->document()->loader()); |
+ |
if (!locationChangeBefore && m_frame->navigationScheduler().locationChangePending()) |
return true; |
@@ -541,25 +541,23 @@ |
void ScriptController::executeScriptInMainWorld(const String& script, ExecuteScriptPolicy policy) |
{ |
- v8::HandleScope handleScope(m_isolate); |
evaluateScriptInMainWorld(ScriptSourceCode(script), NotSharableCrossOrigin, policy); |
} |
void ScriptController::executeScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus) |
{ |
- v8::HandleScope handleScope(m_isolate); |
evaluateScriptInMainWorld(sourceCode, corsStatus, DoNotExecuteScriptWhenScriptsDisabled); |
} |
-v8::Local<v8::Value> ScriptController::executeScriptInMainWorldAndReturnValue(const ScriptSourceCode& sourceCode) |
+ScriptValue ScriptController::executeScriptInMainWorldAndReturnValue(const ScriptSourceCode& sourceCode) |
{ |
return evaluateScriptInMainWorld(sourceCode, NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled); |
} |
-v8::Local<v8::Value> ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy) |
+ScriptValue ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy) |
{ |
if (policy == DoNotExecuteScriptWhenScriptsDisabled && !canExecuteScripts(AboutToExecuteScript)) |
- return v8::Local<v8::Value>(); |
+ return ScriptValue(); |
String sourceURL = sourceCode.url(); |
const String* savedSourceURL = m_sourceURL; |
@@ -567,9 +565,8 @@ |
ScriptState* scriptState = ScriptState::forMainWorld(m_frame); |
if (scriptState->contextIsEmpty()) |
- return v8::Local<v8::Value>(); |
- |
- v8::EscapableHandleScope handleScope(scriptState->isolate()); |
+ return ScriptValue(); |
+ |
ScriptState::Scope scope(scriptState); |
RefPtr<LocalFrame> protect(m_frame); |
@@ -583,12 +580,12 @@ |
m_sourceURL = savedSourceURL; |
if (object.IsEmpty()) |
- return v8::Local<v8::Value>(); |
- |
- return handleScope.Escape(object); |
-} |
- |
-void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<ScriptSourceCode>& sources, int extensionGroup, Vector<v8::Local<v8::Value> >* results) |
+ return ScriptValue(); |
+ |
+ return ScriptValue(scriptState, object); |
+} |
+ |
+void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<ScriptSourceCode>& sources, int extensionGroup, Vector<ScriptValue>* results) |
{ |
ASSERT(worldID > 0); |
@@ -598,7 +595,6 @@ |
return; |
ScriptState* scriptState = isolatedWorldShell->scriptState(); |
- v8::EscapableHandleScope handleScope(scriptState->isolate()); |
ScriptState::Scope scope(scriptState); |
v8::Local<v8::Array> resultArray = v8::Array::New(m_isolate, sources.size()); |
@@ -611,7 +607,7 @@ |
if (results) { |
for (size_t i = 0; i < resultArray->Length(); ++i) |
- results->append(handleScope.Escape(resultArray->Get(i))); |
+ results->append(ScriptValue(scriptState, resultArray->Get(i))); |
} |
} |