Index: extensions/browser/guest_view/web_view/web_view_guest.cc |
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc |
index 0522514a7b2c71f63acc0cca8db40dd17222aa14..97d8f7bef5d029d42be40bb5c4904fdfeacc1bea 100644 |
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc |
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc |
@@ -30,6 +30,7 @@ |
#include "content/public/common/stop_find_action.h" |
#include "content/public/common/url_constants.h" |
#include "extensions/browser/api/extensions_api_client.h" |
+#include "extensions/browser/api/web_view/web_view_internal_api.h" |
#include "extensions/browser/extension_system.h" |
#include "extensions/browser/guest_view/guest_view_manager.h" |
#include "extensions/browser/guest_view/web_view/web_view_constants.h" |
@@ -389,11 +390,11 @@ void WebViewGuest::FindReply(WebContents* source, |
const gfx::Rect& selection_rect, |
int active_match_ordinal, |
bool final_update) { |
- if (web_view_guest_delegate_) { |
- web_view_guest_delegate_->FindReply( |
- source, request_id, number_of_matches, |
- selection_rect, active_match_ordinal, final_update); |
- } |
+ find_helper_.FindReply(request_id, |
+ number_of_matches, |
+ selection_rect, |
+ active_match_ordinal, |
+ final_update); |
} |
bool WebViewGuest::HandleContextMenu( |
@@ -546,14 +547,13 @@ double WebViewGuest::GetZoom() { |
void WebViewGuest::Find( |
const base::string16& search_text, |
const blink::WebFindOptions& options, |
- WebViewInternalFindFunction* find_function) { |
- if (web_view_guest_delegate_) |
- web_view_guest_delegate_->Find(search_text, options, find_function); |
+ scoped_refptr<WebViewInternalFindFunction> find_function) { |
+ find_helper_.Find(web_contents(), search_text, options, find_function); |
} |
void WebViewGuest::StopFinding(content::StopFindAction action) { |
- if (web_view_guest_delegate_) |
- web_view_guest_delegate_->StopFinding(action); |
+ find_helper_.CancelAllFindSessions(); |
+ web_contents()->StopFinding(action); |
} |
void WebViewGuest::Go(int relative_index) { |
@@ -616,6 +616,7 @@ bool WebViewGuest::ClearData(const base::Time remove_since, |
WebViewGuest::WebViewGuest(content::BrowserContext* browser_context, |
int guest_instance_id) |
: GuestView<WebViewGuest>(browser_context, guest_instance_id), |
+ find_helper_(this), |
is_overriding_user_agent_(false), |
javascript_dialog_helper_(this) { |
web_view_guest_delegate_.reset( |
@@ -640,6 +641,8 @@ void WebViewGuest::DidCommitProvisionalLoadForFrame( |
web_contents()->GetRenderProcessHost()->GetID()); |
DispatchEventToEmbedder( |
new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); |
+ |
+ find_helper_.CancelAllFindSessions(); |
if (web_view_guest_delegate_) { |
web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( |
!render_frame_host->GetParent()); |
@@ -684,8 +687,8 @@ bool WebViewGuest::OnMessageReceived(const IPC::Message& message, |
} |
void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { |
- if (web_view_guest_delegate_) |
- web_view_guest_delegate_->OnRenderProcessGone(); |
+ // Cancel all find sessions in progress. |
+ find_helper_.CancelAllFindSessions(); |
scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
args->SetInteger(webview::kProcessId, |