Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2686)

Unified Diff: chrome/renderer/render_view.cc

Issue 125280: Send port-closed notification when a frame with ports unloads.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/render_widget.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/render_widget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698