mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Support implicit detachment of CEF V8 references when the associated context is released (issue #484).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@882 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
@@ -211,23 +211,16 @@ void CefContentRendererClient::WillReleaseScriptContext(
|
|||||||
WebKit::WebFrame* frame, v8::Handle<v8::Context> context, int world_id) {
|
WebKit::WebFrame* frame, v8::Handle<v8::Context> context, int world_id) {
|
||||||
// Notify the render process handler.
|
// Notify the render process handler.
|
||||||
CefRefPtr<CefApp> application = CefContentClient::Get()->application();
|
CefRefPtr<CefApp> application = CefContentClient::Get()->application();
|
||||||
if (!application.get())
|
if (application.get()) {
|
||||||
return;
|
|
||||||
|
|
||||||
CefRefPtr<CefRenderProcessHandler> handler =
|
CefRefPtr<CefRenderProcessHandler> handler =
|
||||||
application->GetRenderProcessHandler();
|
application->GetRenderProcessHandler();
|
||||||
if (!handler.get())
|
if (handler.get()) {
|
||||||
return;
|
|
||||||
|
|
||||||
CefRefPtr<CefBrowserImpl> browserPtr =
|
CefRefPtr<CefBrowserImpl> browserPtr =
|
||||||
CefBrowserImpl::GetBrowserForMainFrame(frame->top());
|
CefBrowserImpl::GetBrowserForMainFrame(frame->top());
|
||||||
DCHECK(browserPtr.get());
|
DCHECK(browserPtr.get());
|
||||||
if (!browserPtr.get())
|
if (browserPtr.get()) {
|
||||||
return;
|
|
||||||
|
|
||||||
CefRefPtr<CefFrameImpl> framePtr = browserPtr->GetWebFrameImpl(frame);
|
CefRefPtr<CefFrameImpl> framePtr = browserPtr->GetWebFrameImpl(frame);
|
||||||
|
|
||||||
{
|
|
||||||
v8::HandleScope handle_scope;
|
v8::HandleScope handle_scope;
|
||||||
v8::Context::Scope scope(context);
|
v8::Context::Scope scope(context);
|
||||||
WebCore::V8RecursionScope recursion_scope(
|
WebCore::V8RecursionScope recursion_scope(
|
||||||
@@ -235,7 +228,10 @@ void CefContentRendererClient::WillReleaseScriptContext(
|
|||||||
|
|
||||||
CefRefPtr<CefV8Context> contextPtr(new CefV8ContextImpl(context));
|
CefRefPtr<CefV8Context> contextPtr(new CefV8ContextImpl(context));
|
||||||
|
|
||||||
handler->OnContextReleased(browserPtr.get(), framePtr.get(), contextPtr);
|
handler->OnContextReleased(browserPtr.get(), framePtr.get(),
|
||||||
|
contextPtr);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CefV8ReleaseContext(context);
|
CefV8ReleaseContext(context);
|
||||||
|
Reference in New Issue
Block a user