Index: content/renderer/render_frame_impl.cc |
=================================================================== |
--- content/renderer/render_frame_impl.cc (revision 238191) |
+++ content/renderer/render_frame_impl.cc (working copy) |
@@ -26,6 +26,7 @@ |
#include "content/public/renderer/content_renderer_client.h" |
#include "content/public/renderer/document_state.h" |
#include "content/public/renderer/navigation_state.h" |
+#include "content/public/renderer/render_frame_observer.h" |
#include "content/renderer/accessibility/renderer_accessibility.h" |
#include "content/renderer/browser_plugin/browser_plugin.h" |
#include "content/renderer/browser_plugin/browser_plugin_manager.h" |
@@ -129,6 +130,8 @@ |
} |
RenderFrameImpl::~RenderFrameImpl() { |
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); |
+ FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); |
} |
RenderWidget* RenderFrameImpl::GetRenderWidget() { |
@@ -423,10 +426,6 @@ |
#endif // ENABLE_PLUGINS |
-int RenderFrameImpl::GetRoutingID() const { |
- return routing_id_; |
-} |
- |
bool RenderFrameImpl::Send(IPC::Message* message) { |
if (is_detaching_ || |
((is_swapped_out_ || render_view_->is_swapped_out()) && |
@@ -439,6 +438,13 @@ |
} |
bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { |
+ ObserverListBase<RenderFrameObserver>::Iterator it(observers_); |
+ RenderFrameObserver* observer; |
+ while ((observer = it.GetNext()) != NULL) { |
+ if (observer->OnMessageReceived(msg)) |
+ return true; |
+ } |
+ |
// TODO(ajwong): Fill in with message handlers as various components |
// are migrated over to understand frames. |
return false; |
@@ -530,7 +536,7 @@ |
// Synchronously notify the browser of a child frame creation to get the |
// routing_id for the RenderFrame. |
int routing_id; |
- Send(new FrameHostMsg_CreateChildFrame(GetRoutingID(), |
+ Send(new FrameHostMsg_CreateChildFrame(routing_id_, |
parent->identifier(), |
child_frame_identifier, |
UTF16ToUTF8(name), |
@@ -563,7 +569,7 @@ |
if (frame->parent()) |
parent_frame_id = frame->parent()->identifier(); |
- Send(new FrameHostMsg_Detach(GetRoutingID(), parent_frame_id, |
+ Send(new FrameHostMsg_Detach(routing_id_, parent_frame_id, |
frame->identifier())); |
// Currently multiple WebCore::Frames can send frameDetached to a single |
@@ -1286,4 +1292,13 @@ |
arb_robustness_status_code)); |
} |
+void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
+ observer->RenderFrameGone(); |
+ observers_.RemoveObserver(observer); |
+} |
+ |
} // namespace content |