diff options
author | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-07 21:31:57 +0000 |
---|---|---|
committer | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-07 21:31:57 +0000 |
commit | 1d62cf79f609fba47ef680bf5acc9b453d4229ea (patch) | |
tree | a2d5aa01f83591bda380a34181dc11e99278ceb8 | |
parent | 1d5541509d24eb016f775703fd7d1ed68b6bbe21 (diff) | |
download | chromium_src-1d62cf79f609fba47ef680bf5acc9b453d4229ea.zip chromium_src-1d62cf79f609fba47ef680bf5acc9b453d4229ea.tar.gz chromium_src-1d62cf79f609fba47ef680bf5acc9b453d4229ea.tar.bz2 |
Move DidFinishDocumentLoad code from RenderView to RenderFrame.
BUG=304341
R=creis@chromium.org
Review URL: https://codereview.chromium.org/156993004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@249789 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/browser/web_contents/web_contents_impl.cc | 25 | ||||
-rw-r--r-- | content/browser/web_contents/web_contents_impl.h | 5 | ||||
-rw-r--r-- | content/common/frame_messages.h | 4 | ||||
-rw-r--r-- | content/common/view_messages.h | 4 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 14 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 9 |
6 files changed, 37 insertions, 24 deletions
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index ac301e5..1661fbb 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -428,9 +428,14 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, if (observer->OnMessageReceived(message)) return true; - // Message handlers should be aware of which RenderViewHost sent the - // message, which is temporarily stored in render_view_message_source_. - render_view_message_source_ = render_view_host; + // Message handlers should be aware of which + // RenderViewHost/RenderFrameHost sent the message, which is temporarily + // stored in render_(view|frame)_message_source_. + if (render_frame_host) + render_frame_message_source_ = render_frame_host; + else + render_view_message_source_ = render_view_host; + bool handled = true; bool message_is_ok = true; IPC_BEGIN_MESSAGE_MAP_EX(WebContentsImpl, message, message_is_ok) @@ -442,7 +447,7 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, OnDidDisplayInsecureContent) IPC_MESSAGE_HANDLER(ViewHostMsg_DidRunInsecureContent, OnDidRunInsecureContent) - IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentLoadedInFrame, + IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishDocumentLoad, OnDocumentLoadedInFrame) IPC_MESSAGE_HANDLER(ViewHostMsg_DidFinishLoad, OnDidFinishLoad) IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailLoadWithError, @@ -491,6 +496,7 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP_EX() render_view_message_source_ = NULL; + render_frame_message_source_ = NULL; if (!message_is_ok) { RecordAction(base::UserMetricsAction("BadMessageTerminate_RVD")); @@ -2139,9 +2145,14 @@ void WebContentsImpl::OnDidRunInsecureContent( } void WebContentsImpl::OnDocumentLoadedInFrame(int64 frame_id) { - FOR_EACH_OBSERVER( - WebContentsObserver, observers_, - DocumentLoadedInFrame(frame_id, render_view_message_source_)); + CHECK(render_frame_message_source_); + CHECK(!render_view_message_source_); + RenderFrameHostImpl* rfh = + static_cast<RenderFrameHostImpl*>(render_frame_message_source_); + + FOR_EACH_OBSERVER(WebContentsObserver, + observers_, + DocumentLoadedInFrame(frame_id, rfh->render_view_host())); } void WebContentsImpl::OnDidFinishLoad( diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index cbf3fa9..a25400b 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -1034,10 +1034,11 @@ class CONTENT_EXPORT WebContentsImpl // member variables that are gone. NotificationRegistrar registrar_; - // Used during IPC message dispatching from the RenderView so that the - // handlers can get a pointer to the RVH through which the message was + // Used during IPC message dispatching from the RenderView/RenderFrame so that + // the handlers can get a pointer to the RVH through which the message was // received. RenderViewHost* render_view_message_source_; + RenderFrameHost* render_frame_message_source_; // All live RenderWidgetHostImpls that are created by this object and may // outlive it. diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 1016c10..9084385 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h @@ -164,6 +164,10 @@ IPC_MESSAGE_ROUTED3(FrameHostMsg_DidRedirectProvisionalLoad, GURL /* source_url*/, GURL /* target_url */) +// Notifies the browser that a document has been loaded. +IPC_MESSAGE_ROUTED1(FrameHostMsg_DidFinishDocumentLoad, + int64 /* frame_id */) + // Sent to the browser when the renderer detects it is blocked on a pepper // plugin message for too long. This is also sent when it becomes unhung // (according to the value of is_hung). The browser can give the user the diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 20bec60..b41a0c2 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -1476,10 +1476,6 @@ IPC_MESSAGE_ROUTED2(ViewHostMsg_UpdateState, int32 /* page_id */, content::PageState /* state */) -// Notifies the browser that a document has been loaded in a frame. -IPC_MESSAGE_ROUTED1(ViewHostMsg_DocumentLoadedInFrame, - int64 /* frame_id */) - // Notifies the browser that a frame finished loading. IPC_MESSAGE_ROUTED3(ViewHostMsg_DidFinishLoad, int64 /* frame_id */, diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index a205148..40ea57f 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -1113,9 +1113,19 @@ void RenderFrameImpl::didChangeIcon(blink::WebFrame* frame, } void RenderFrameImpl::didFinishDocumentLoad(blink::WebFrame* frame) { - // TODO(nasko): Move implementation here. No state needed, just observers - // notification in before updating encoding. + WebDataSource* ds = frame->dataSource(); + DocumentState* document_state = DocumentState::FromDataSource(ds); + document_state->set_finish_document_load_time(Time::Now()); + + Send( + new FrameHostMsg_DidFinishDocumentLoad(routing_id_, frame->identifier())); + + // Call back to RenderViewImpl for observers to be notified. + // TODO(nasko): Remove once we have RenderFrameObserver for this method. render_view_->didFinishDocumentLoad(frame); + + // Check whether we have new encoding name. + render_view_->UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); } void RenderFrameImpl::didHandleOnloadEvents(blink::WebFrame* frame) { diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 4d27120..b5073ed 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -3621,17 +3621,8 @@ void RenderViewImpl::didChangeIcon(WebFrame* frame, } void RenderViewImpl::didFinishDocumentLoad(WebFrame* frame) { - WebDataSource* ds = frame->dataSource(); - DocumentState* document_state = DocumentState::FromDataSource(ds); - document_state->set_finish_document_load_time(Time::Now()); - - Send(new ViewHostMsg_DocumentLoadedInFrame(routing_id_, frame->identifier())); - FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidFinishDocumentLoad(frame)); - - // Check whether we have new encoding name. - UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); } void RenderViewImpl::didHandleOnloadEvents(WebFrame* frame) { |