Index: Source/bindings/v8/ScriptController.cpp |
diff --git a/Source/bindings/v8/ScriptController.cpp b/Source/bindings/v8/ScriptController.cpp |
index 4952612ebce8f3e50c6031d8912b779550a9582b..bbf7e113c4bdc79eb05a96543b996e0f99cdfc66 100644 |
--- a/Source/bindings/v8/ScriptController.cpp |
+++ b/Source/bindings/v8/ScriptController.cpp |
@@ -513,20 +513,20 @@ bool ScriptController::executeScriptIfJavaScriptURL(const KURL& url) |
bool locationChangeBefore = m_frame->navigationScheduler().locationChangePending(); |
String decodedURL = decodeURLEscapeSequences(url.string()); |
- ScriptValue result = evaluateScriptInMainWorld(ScriptSourceCode(decodedURL.substring(javascriptSchemeLength)), NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled); |
+ v8::HandleScope handleScope(m_isolate); |
+ v8::Local<v8::Value> 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; |
- String scriptResult; |
- if (!result.toString(scriptResult)) |
+ if (result.IsEmpty() || !result->IsString()) |
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,23 +541,25 @@ bool ScriptController::executeScriptIfJavaScriptURL(const KURL& url) |
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); |
} |
-ScriptValue ScriptController::executeScriptInMainWorldAndReturnValue(const ScriptSourceCode& sourceCode) |
+v8::Local<v8::Value> ScriptController::executeScriptInMainWorldAndReturnValue(const ScriptSourceCode& sourceCode) |
{ |
return evaluateScriptInMainWorld(sourceCode, NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled); |
} |
-ScriptValue ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy) |
+v8::Local<v8::Value> ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy) |
{ |
if (policy == DoNotExecuteScriptWhenScriptsDisabled && !canExecuteScripts(AboutToExecuteScript)) |
- return ScriptValue(); |
+ return v8::Local<v8::Value>(); |
String sourceURL = sourceCode.url(); |
const String* savedSourceURL = m_sourceURL; |
@@ -565,8 +567,9 @@ ScriptValue ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& |
ScriptState* scriptState = ScriptState::forMainWorld(m_frame); |
if (scriptState->contextIsEmpty()) |
- return ScriptValue(); |
+ return v8::Local<v8::Value>(); |
+ v8::EscapableHandleScope handleScope(scriptState->isolate()); |
ScriptState::Scope scope(scriptState); |
RefPtr<LocalFrame> protect(m_frame); |
@@ -580,12 +583,12 @@ ScriptValue ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& |
m_sourceURL = savedSourceURL; |
if (object.IsEmpty()) |
- return ScriptValue(); |
+ return v8::Local<v8::Value>(); |
- return ScriptValue(scriptState, object); |
+ return handleScope.Escape(object); |
} |
-void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<ScriptSourceCode>& sources, int extensionGroup, Vector<ScriptValue>* results) |
+void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<ScriptSourceCode>& sources, int extensionGroup, Vector<v8::Local<v8::Value> >* results) |
{ |
ASSERT(worldID > 0); |
@@ -595,6 +598,7 @@ void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc |
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()); |
@@ -607,7 +611,7 @@ void ScriptController::executeScriptInIsolatedWorld(int worldID, const Vector<Sc |
if (results) { |
for (size_t i = 0; i < resultArray->Length(); ++i) |
- results->append(ScriptValue(scriptState, resultArray->Get(i))); |
+ results->append(handleScope.Escape(resultArray->Get(i))); |
pguyot
2014/11/08 19:28:39
EscapableHandleScope::Escape is supposed to be cal
|
} |
} |