diff options
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r-- | chrome/renderer/render_view.cc | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 6151878..33b50d6 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -35,6 +35,7 @@ #include "chrome/renderer/debug_message_handler.h" #include "chrome/renderer/devtools_agent.h" #include "chrome/renderer/devtools_client.h" +#include "chrome/renderer/extensions/event_bindings.h" #include "chrome/renderer/extensions/extension_process_bindings.h" #include "chrome/renderer/localized_error.h" #include "chrome/renderer/media/audio_renderer_impl.h" @@ -325,6 +326,22 @@ void RenderView::Init(gfx::NativeViewId parent_hwnd, render_thread_->AddFilter(audio_message_filter_); } +// Recursively calls WillCloseFrame on every frame in the hierarchy. +static void WillCloseFrameTree(RenderView* renderview, WebFrame* frame) { + renderview->WillCloseFrame(renderview->webview(), frame); + + for (WebFrame* child = frame->GetFirstChild(); child; + child = child->GetNextSibling()) { + WillCloseFrameTree(renderview, child); + } +} + +void RenderView::Close() { + if (webview() && webview()->GetMainFrame()) + WillCloseFrameTree(this, webview()->GetMainFrame()); + RenderWidget::Close(); +} + void RenderView::OnMessageReceived(const IPC::Message& message) { WebFrame* main_frame = webview() ? webview()->GetMainFrame() : NULL; renderer_logging::ScopedActiveRenderingURLSetter url_setter( @@ -1395,17 +1412,18 @@ void RenderView::DocumentElementAvailable(WebFrame* frame) { if (frame->GetURL().SchemeIs(chrome::kExtensionScheme)) frame->GrantUniversalAccess(); - // Tell extensions to self-register their js contexts. - // TODO(rafaelw): This is kind of gross. We need a way to call through - // the glue layer to retrieve the current v8::Context. - if (frame->GetURL().SchemeIs(chrome::kExtensionScheme)) - ExtensionProcessBindings::RegisterExtensionContext(frame); + // Tell bindings that the DOM is ready. + EventBindings::HandleDocumentReady(frame); if (RenderThread::current()) // Will be NULL during unit tests. RenderThread::current()->user_script_slave()->InjectScripts( frame, UserScript::DOCUMENT_START); } +void RenderView::WillCloseFrame(WebView* webview, WebFrame* frame) { + EventBindings::HandleDocumentClose(frame); +} + WindowOpenDisposition RenderView::DispositionForNavigationAction( WebView* webview, WebFrame* frame, |