Chromium Code Reviews| Index: content/browser/web_contents/web_contents_impl.cc |
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
| index 2d463287de60180ff5c1c2e3e3f41c96ae7d9f7b..847e07f7e6034be296336e130a5fbd9888c60dc6 100644 |
| --- a/content/browser/web_contents/web_contents_impl.cc |
| +++ b/content/browser/web_contents/web_contents_impl.cc |
| @@ -39,6 +39,7 @@ |
| #include "content/browser/download/download_stats.h" |
| #include "content/browser/download/mhtml_generation_manager.h" |
| #include "content/browser/download/save_package.h" |
| +#include "content/browser/find_request_manager.h" |
| #include "content/browser/frame_host/cross_process_frame_connector.h" |
| #include "content/browser/frame_host/interstitial_page_impl.h" |
| #include "content/browser/frame_host/navigation_entry_impl.h" |
| @@ -600,7 +601,6 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
| IPC_MESSAGE_HANDLER(FrameHostMsg_EndColorChooser, OnEndColorChooser) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_SetSelectedColorInColorChooser, |
| OnSetSelectedColorInColorChooser) |
| - |
| IPC_MESSAGE_HANDLER(ViewHostMsg_DidFirstVisuallyNonEmptyPaint, |
| OnFirstVisuallyNonEmptyPaint) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_DidLoadResourceFromMemoryCache, |
| @@ -2893,22 +2893,24 @@ void WebContentsImpl::Find(int request_id, |
| } |
| // See if a top level browser plugin handles the find request first. |
| + // TODO(paulmeyer): Remove this after find-in-page works across GuestViews. |
| if (browser_plugin_embedder_ && |
| browser_plugin_embedder_->Find(request_id, search_text, options)) { |
| return; |
| } |
| - GetMainFrame()->Send(new FrameMsg_Find(GetMainFrame()->GetRoutingID(), |
| - request_id, search_text, options)); |
| + |
| + GetOrCreateFindRequestManager()->Find(request_id, search_text, options); |
| } |
| void WebContentsImpl::StopFinding(StopFindAction action) { |
| // See if a top level browser plugin handles the stop finding request first. |
| + // TODO(paulmeyer): Remove this after find-in-page works across GuestViews. |
| if (browser_plugin_embedder_ && |
| browser_plugin_embedder_->StopFinding(action)) { |
| return; |
| } |
| - GetMainFrame()->Send( |
| - new FrameMsg_StopFinding(GetMainFrame()->GetRoutingID(), action)); |
| + |
| + GetOrCreateFindRequestManager()->StopFinding(action); |
| } |
| void WebContentsImpl::InsertCSS(const std::string& css) { |
| @@ -3426,10 +3428,14 @@ void WebContentsImpl::OnFindReply(int request_id, |
| const gfx::Rect& selection_rect, |
| int active_match_ordinal, |
| bool final_update) { |
| - if (delegate_) { |
| - delegate_->FindReply(this, request_id, number_of_matches, selection_rect, |
| - active_match_ordinal, final_update); |
| - } |
| + // Forward the find reply to the FindRequestManager, along with the |
| + // RenderFrameHost associated with the frame that the reply came from. |
| + GetOrCreateFindRequestManager()->FindReply(render_frame_message_source_, |
| + request_id, |
| + number_of_matches, |
| + selection_rect, |
| + active_match_ordinal, |
| + final_update); |
| } |
| #if defined(OS_ANDROID) |
| @@ -3437,8 +3443,8 @@ void WebContentsImpl::OnFindMatchRectsReply( |
| int version, |
| const std::vector<gfx::RectF>& rects, |
| const gfx::RectF& active_rect) { |
| - if (delegate_) |
| - delegate_->FindMatchRectsReply(this, version, rects, active_rect); |
| + GetOrCreateFindRequestManager()->FindMatchRectsReply( |
| + render_frame_message_source_, version, rects, active_rect); |
| } |
| void WebContentsImpl::OnOpenDateTimeDialog( |
| @@ -4645,6 +4651,15 @@ WebContentsAndroid* WebContentsImpl::GetWebContentsAndroid() { |
| return web_contents_android; |
| } |
| +void WebContentsImpl::ActivateNearestFindResult(float x, |
| + float y) { |
| + GetOrCreateFindRequestManager()->ActivateNearestFindResult(x, y); |
| +} |
| + |
| +void WebContentsImpl::RequestFindMatchRects(int current_version) { |
| + GetOrCreateFindRequestManager()->RequestFindMatchRects(current_version); |
| +} |
| + |
| bool WebContentsImpl::CreateRenderViewForInitialEmptyDocument() { |
| return CreateRenderViewForRenderManager( |
| GetRenderViewHost(), MSG_ROUTING_NONE, MSG_ROUTING_NONE, |
| @@ -4798,6 +4813,37 @@ WebUI* WebContentsImpl::CreateWebUI(const GURL& url, |
| return NULL; |
| } |
| +FindRequestManager* WebContentsImpl::GetOrCreateFindRequestManager() { |
| + // TODO(paulmeyer): This method will need to access (or potentially create) |
| + // the FindRequestManager in the outermost WebContents once find-in-page |
| + // across GuestViews is implemented. |
| + if (!find_request_manager_.get()) |
|
dcheng
2016/04/04 18:59:52
Nit: no .get()
paulmeyer
2016/04/04 20:07:47
Done.
Thanks for catching this! I didn't realize
|
| + find_request_manager_.reset(new FindRequestManager(this)); |
| + |
| + return find_request_manager_.get(); |
| +} |
| + |
| +void WebContentsImpl::FindReply(int request_id, |
| + int number_of_matches, |
| + const gfx::Rect& selection_rect, |
| + int active_match_ordinal, |
| + bool final_update) { |
| + if (delegate_) { |
| + delegate_->FindReply(this, request_id, number_of_matches, selection_rect, |
| + active_match_ordinal, final_update); |
| + } |
| +} |
| + |
| +#if defined(OS_ANDROID) |
| +void WebContentsImpl::FindMatchRectsReply( |
| + int version, |
| + const std::vector<gfx::RectF>& rects, |
| + const gfx::RectF& active_rect) { |
| + if (delegate_) |
| + delegate_->FindMatchRectsReply(this, version, rects, active_rect); |
| +} |
| +#endif |
| + |
| void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
| force_disable_overscroll_content_ = force_disable; |
| if (view_) |