Index: chrome/renderer/render_thread.cc |
=================================================================== |
--- chrome/renderer/render_thread.cc (revision 79468) |
+++ chrome/renderer/render_thread.cc (working copy) |
@@ -67,6 +67,7 @@ |
#include "content/renderer/gpu_video_service_host.h" |
#include "content/renderer/indexed_db_dispatcher.h" |
#include "content/renderer/plugin_channel_host.h" |
+#include "content/renderer/render_process_observer.h" |
#include "content/renderer/render_view.h" |
#include "content/renderer/render_view_visitor.h" |
#include "content/renderer/renderer_webidbfactory_impl.h" |
@@ -331,6 +332,9 @@ |
} |
RenderThread::~RenderThread() { |
+ FOR_EACH_OBSERVER( |
+ RenderProcessObserver, observers_, OnRenderProcessShutdown()); |
+ |
// Wait for all databases to be closed. |
if (web_database_observer_impl_.get()) |
web_database_observer_impl_->WaitForAllDatabasesToClose(); |
@@ -523,6 +527,14 @@ |
return is_incognito_process_; |
} |
+void RenderThread::AddObserver(RenderProcessObserver* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void RenderThread::RemoveObserver(RenderProcessObserver* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
void RenderThread::DoNotSuspendWebKitSharedTimer() { |
suspend_webkit_shared_timer_ = false; |
} |
@@ -634,6 +646,12 @@ |
} |
bool RenderThread::OnControlMessageReceived(const IPC::Message& msg) { |
+ ObserverListBase<RenderProcessObserver>::Iterator it(observers_); |
+ RenderProcessObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) |
brettw
2011/03/28 16:17:54
Need {} for this while.
|
+ if (observer->OnControlMessageReceived(msg)) |
+ return true; |
+ |
// Some messages are handled by delegates. |
if (appcache_dispatcher_->OnMessageReceived(msg)) |
return true; |