summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/render_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/render_view.cc')
-rw-r--r--chrome/renderer/render_view.cc28
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,