v8::Local<v8::Value> ScriptController::callFunction(v8::Handle<v8::Function> function, v8::Handle<v8::Value> receiver, int argc, v8::Handle<v8::Value> info[])
{
// Keep LocalFrame (and therefore ScriptController) alive.
- RefPtr<LocalFrame> protect(m_frame);
+ RefPtrWillBeRawPtr<LocalFrame> protect(m_frame);
return ScriptController::callFunction(m_frame->document(), function, receiver, argc, info, m_isolate);
}
return result;
}
-v8::Local<v8::Value> ScriptController::executeScriptAndReturnValue(v8::Handle<v8::Context> context, const ScriptSourceCode& source, AccessControlStatus corsStatus)
+v8::Local<v8::Value> ScriptController::executeScriptAndReturnValue(v8::Handle<v8::Context> context, const ScriptSourceCode& source, AccessControlStatus corsStatus, double* compilationFinishTime)
{
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "EvaluateScript", "data", InspectorEvaluateScriptEvent::data(m_frame, source.url().string(), source.startLine()));
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"), "CallStack", "stack", InspectorCallStackEvent::currentCallStack());
v8::Handle<v8::Script> script = V8ScriptRunner::compileScript(source, m_isolate, corsStatus, v8CacheOptions);
+ if (compilationFinishTime) {
+ *compilationFinishTime = WTF::monotonicallyIncreasingTime();
+ }
// Keep LocalFrame (and therefore ScriptController) alive.
- RefPtr<LocalFrame> protect(m_frame);
+ RefPtrWillBeRawPtr<LocalFrame> protect(m_frame);
result = V8ScriptRunner::runCompiledScript(script, m_frame->document(), m_isolate);
ASSERT(!tryCatch.HasCaught() || result.IsEmpty());
}
bool ScriptController::shouldBypassMainWorldCSP()
{
+ v8::HandleScope handleScope(m_isolate);
v8::Handle<v8::Context> context = m_isolate->GetCurrentContext();
if (context.IsEmpty() || !toDOMWindow(context))
return false;
void ScriptController::bindToWindowObject(LocalFrame* frame, const String& key, NPObject* object)
{
ScriptState* scriptState = ScriptState::forMainWorld(frame);
- if (scriptState->contextIsEmpty())
+ if (scriptState->contextIsValid())
return;
ScriptState::Scope scope(scriptState);
static NPObject* createScriptObject(LocalFrame* frame, v8::Isolate* isolate)
{
ScriptState* scriptState = ScriptState::forMainWorld(frame);
- if (scriptState->contextIsEmpty())
+ if (scriptState->contextIsValid())
return createNoScriptObject();
ScriptState::Scope scope(scriptState);
return createNoScriptObject();
ScriptState* scriptState = ScriptState::forMainWorld(m_frame);
- if (scriptState->contextIsEmpty())
+ if (scriptState->contextIsValid())
return createNoScriptObject();
ScriptState::Scope scope(scriptState);
// We need to hold onto the LocalFrame here because executing script can
// destroy the frame.
- RefPtr<LocalFrame> protector(m_frame);
+ RefPtrWillBeRawPtr<LocalFrame> protect(m_frame);
RefPtrWillBeRawPtr<Document> ownerDocument(m_frame->document());
const int javascriptSchemeLength = sizeof("javascript:") - 1;
if (!locationChangeBefore && m_frame->navigationScheduler().locationChangePending())
return true;
- // DocumentWriter::replaceDocument can cause the DocumentLoader to get deref'ed and possible destroyed,
- // so protect it with a RefPtr.
- if (RefPtr<DocumentLoader> loader = m_frame->document()->loader()) {
- UseCounter::count(*m_frame->document(), UseCounter::ReplaceDocumentViaJavaScriptURL);
- loader->replaceDocument(scriptResult, ownerDocument.get());
- }
+ m_frame->loader().replaceDocumentWhileExecutingJavaScriptURL(scriptResult, ownerDocument.get());
return true;
}
evaluateScriptInMainWorld(ScriptSourceCode(script), NotSharableCrossOrigin, policy);
}
-void ScriptController::executeScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus)
+void ScriptController::executeScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, double* compilationFinishTime)
{
v8::HandleScope handleScope(m_isolate);
- evaluateScriptInMainWorld(sourceCode, corsStatus, DoNotExecuteScriptWhenScriptsDisabled);
+ evaluateScriptInMainWorld(sourceCode, corsStatus, DoNotExecuteScriptWhenScriptsDisabled, compilationFinishTime);
}
v8::Local<v8::Value> ScriptController::executeScriptInMainWorldAndReturnValue(const ScriptSourceCode& sourceCode)
return evaluateScriptInMainWorld(sourceCode, NotSharableCrossOrigin, DoNotExecuteScriptWhenScriptsDisabled);
}
-v8::Local<v8::Value> ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy)
+v8::Local<v8::Value> ScriptController::evaluateScriptInMainWorld(const ScriptSourceCode& sourceCode, AccessControlStatus corsStatus, ExecuteScriptPolicy policy, double* compilationFinishTime)
{
if (policy == DoNotExecuteScriptWhenScriptsDisabled && !canExecuteScripts(AboutToExecuteScript))
return v8::Local<v8::Value>();
ScriptState* scriptState = ScriptState::from(context);
ScriptState::Scope scope(scriptState);
- RefPtr<LocalFrame> protect(m_frame);
+ RefPtrWillBeRawPtr<LocalFrame> protect(m_frame);
if (m_frame->loader().stateMachine()->isDisplayingInitialEmptyDocument())
m_frame->loader().didAccessInitialDocument();
OwnPtr<ScriptSourceCode> maybeProcessedSourceCode = InspectorInstrumentation::preprocess(m_frame, sourceCode);
const ScriptSourceCode& sourceCodeToCompile = maybeProcessedSourceCode ? *maybeProcessedSourceCode : sourceCode;
- v8::Local<v8::Value> object = executeScriptAndReturnValue(scriptState->context(), sourceCodeToCompile, corsStatus);
+ v8::Local<v8::Value> object = executeScriptAndReturnValue(scriptState->context(), sourceCodeToCompile, corsStatus, compilationFinishTime);
m_sourceURL = savedSourceURL;
if (object.IsEmpty())