| Index: chrome/renderer/render_view.cc
|
| ===================================================================
|
| --- chrome/renderer/render_view.cc (revision 18701)
|
| +++ chrome/renderer/render_view.cc (working copy)
|
| @@ -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"
|
| @@ -307,6 +308,22 @@
|
| 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(
|
| @@ -1373,17 +1390,18 @@
|
| 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,
|
|
|