OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/guest_view/web_view/web_view_guest.h" | 5 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/public/browser/browser_context.h" | 10 #include "content/public/browser/browser_context.h" |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 DispatchEventToEmbedder( | 382 DispatchEventToEmbedder( |
383 new GuestViewBase::Event(webview::kEventClose, args.Pass())); | 383 new GuestViewBase::Event(webview::kEventClose, args.Pass())); |
384 } | 384 } |
385 | 385 |
386 void WebViewGuest::FindReply(WebContents* source, | 386 void WebViewGuest::FindReply(WebContents* source, |
387 int request_id, | 387 int request_id, |
388 int number_of_matches, | 388 int number_of_matches, |
389 const gfx::Rect& selection_rect, | 389 const gfx::Rect& selection_rect, |
390 int active_match_ordinal, | 390 int active_match_ordinal, |
391 bool final_update) { | 391 bool final_update) { |
392 if (web_view_guest_delegate_) { | 392 find_helper_.FindReply(request_id, |
393 web_view_guest_delegate_->FindReply( | 393 number_of_matches, |
394 source, request_id, number_of_matches, | 394 selection_rect, |
395 selection_rect, active_match_ordinal, final_update); | 395 active_match_ordinal, |
396 } | 396 final_update); |
397 } | 397 } |
398 | 398 |
399 bool WebViewGuest::HandleContextMenu( | 399 bool WebViewGuest::HandleContextMenu( |
400 const content::ContextMenuParams& params) { | 400 const content::ContextMenuParams& params) { |
401 if (!web_view_guest_delegate_) | 401 if (!web_view_guest_delegate_) |
402 return false; | 402 return false; |
403 return web_view_guest_delegate_->HandleContextMenu(params); | 403 return web_view_guest_delegate_->HandleContextMenu(params); |
404 } | 404 } |
405 | 405 |
406 void WebViewGuest::HandleKeyboardEvent( | 406 void WebViewGuest::HandleKeyboardEvent( |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 break; | 536 break; |
537 } | 537 } |
538 } | 538 } |
539 | 539 |
540 double WebViewGuest::GetZoom() { | 540 double WebViewGuest::GetZoom() { |
541 if (!web_view_guest_delegate_) | 541 if (!web_view_guest_delegate_) |
542 return 1.0; | 542 return 1.0; |
543 return web_view_guest_delegate_->GetZoom(); | 543 return web_view_guest_delegate_->GetZoom(); |
544 } | 544 } |
545 | 545 |
546 void WebViewGuest::Find( | 546 void WebViewGuest::Find(const base::string16& search_text, |
547 const base::string16& search_text, | 547 const blink::WebFindOptions& options, |
548 const blink::WebFindOptions& options, | 548 WebViewInternalFindFunction* find_function) { |
549 WebViewInternalFindFunction* find_function) { | 549 find_helper_.Find(web_contents(), search_text, options, find_function); |
550 if (web_view_guest_delegate_) | |
551 web_view_guest_delegate_->Find(search_text, options, find_function); | |
552 } | 550 } |
553 | 551 |
554 void WebViewGuest::StopFinding(content::StopFindAction action) { | 552 void WebViewGuest::StopFinding(content::StopFindAction action) { |
555 if (web_view_guest_delegate_) | 553 find_helper_.CancelAllFindSessions(); |
556 web_view_guest_delegate_->StopFinding(action); | 554 web_contents()->StopFinding(action); |
557 } | 555 } |
558 | 556 |
559 void WebViewGuest::Go(int relative_index) { | 557 void WebViewGuest::Go(int relative_index) { |
560 web_contents()->GetController().GoToOffset(relative_index); | 558 web_contents()->GetController().GoToOffset(relative_index); |
561 } | 559 } |
562 | 560 |
563 void WebViewGuest::Reload() { | 561 void WebViewGuest::Reload() { |
564 // TODO(fsamuel): Don't check for repost because we don't want to show | 562 // TODO(fsamuel): Don't check for repost because we don't want to show |
565 // Chromium's repost warning. We might want to implement a separate API | 563 // Chromium's repost warning. We might want to implement a separate API |
566 // for registering a callback if a repost is about to happen. | 564 // for registering a callback if a repost is about to happen. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 content::StoragePartition::OriginMatcherFunction(), | 607 content::StoragePartition::OriginMatcherFunction(), |
610 remove_since, | 608 remove_since, |
611 base::Time::Now(), | 609 base::Time::Now(), |
612 callback); | 610 callback); |
613 return true; | 611 return true; |
614 } | 612 } |
615 | 613 |
616 WebViewGuest::WebViewGuest(content::BrowserContext* browser_context, | 614 WebViewGuest::WebViewGuest(content::BrowserContext* browser_context, |
617 int guest_instance_id) | 615 int guest_instance_id) |
618 : GuestView<WebViewGuest>(browser_context, guest_instance_id), | 616 : GuestView<WebViewGuest>(browser_context, guest_instance_id), |
| 617 find_helper_(this), |
619 is_overriding_user_agent_(false), | 618 is_overriding_user_agent_(false), |
620 javascript_dialog_helper_(this) { | 619 javascript_dialog_helper_(this) { |
621 web_view_guest_delegate_.reset( | 620 web_view_guest_delegate_.reset( |
622 ExtensionsAPIClient::Get()->CreateWebViewGuestDelegate(this)); | 621 ExtensionsAPIClient::Get()->CreateWebViewGuestDelegate(this)); |
623 } | 622 } |
624 | 623 |
625 WebViewGuest::~WebViewGuest() { | 624 WebViewGuest::~WebViewGuest() { |
626 } | 625 } |
627 | 626 |
628 void WebViewGuest::DidCommitProvisionalLoadForFrame( | 627 void WebViewGuest::DidCommitProvisionalLoadForFrame( |
629 content::RenderFrameHost* render_frame_host, | 628 content::RenderFrameHost* render_frame_host, |
630 const GURL& url, | 629 const GURL& url, |
631 content::PageTransition transition_type) { | 630 content::PageTransition transition_type) { |
632 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 631 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
633 args->SetString(guestview::kUrl, url.spec()); | 632 args->SetString(guestview::kUrl, url.spec()); |
634 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent()); | 633 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent()); |
635 args->SetInteger(webview::kInternalCurrentEntryIndex, | 634 args->SetInteger(webview::kInternalCurrentEntryIndex, |
636 web_contents()->GetController().GetCurrentEntryIndex()); | 635 web_contents()->GetController().GetCurrentEntryIndex()); |
637 args->SetInteger(webview::kInternalEntryCount, | 636 args->SetInteger(webview::kInternalEntryCount, |
638 web_contents()->GetController().GetEntryCount()); | 637 web_contents()->GetController().GetEntryCount()); |
639 args->SetInteger(webview::kInternalProcessId, | 638 args->SetInteger(webview::kInternalProcessId, |
640 web_contents()->GetRenderProcessHost()->GetID()); | 639 web_contents()->GetRenderProcessHost()->GetID()); |
641 DispatchEventToEmbedder( | 640 DispatchEventToEmbedder( |
642 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); | 641 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); |
| 642 |
| 643 find_helper_.CancelAllFindSessions(); |
643 if (web_view_guest_delegate_) { | 644 if (web_view_guest_delegate_) { |
644 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( | 645 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( |
645 !render_frame_host->GetParent()); | 646 !render_frame_host->GetParent()); |
646 } | 647 } |
647 } | 648 } |
648 | 649 |
649 void WebViewGuest::DidFailProvisionalLoad( | 650 void WebViewGuest::DidFailProvisionalLoad( |
650 content::RenderFrameHost* render_frame_host, | 651 content::RenderFrameHost* render_frame_host, |
651 const GURL& validated_url, | 652 const GURL& validated_url, |
652 int error_code, | 653 int error_code, |
(...skipping 24 matching lines...) Expand all Loading... |
677 RenderFrameHost* render_frame_host) { | 678 RenderFrameHost* render_frame_host) { |
678 bool handled = true; | 679 bool handled = true; |
679 IPC_BEGIN_MESSAGE_MAP(WebViewGuest, message) | 680 IPC_BEGIN_MESSAGE_MAP(WebViewGuest, message) |
680 IPC_MESSAGE_HANDLER(ExtensionHostMsg_FrameNameChanged, OnFrameNameChanged) | 681 IPC_MESSAGE_HANDLER(ExtensionHostMsg_FrameNameChanged, OnFrameNameChanged) |
681 IPC_MESSAGE_UNHANDLED(handled = false) | 682 IPC_MESSAGE_UNHANDLED(handled = false) |
682 IPC_END_MESSAGE_MAP() | 683 IPC_END_MESSAGE_MAP() |
683 return handled; | 684 return handled; |
684 } | 685 } |
685 | 686 |
686 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { | 687 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { |
687 if (web_view_guest_delegate_) | 688 // Cancel all find sessions in progress. |
688 web_view_guest_delegate_->OnRenderProcessGone(); | 689 find_helper_.CancelAllFindSessions(); |
689 | 690 |
690 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); | 691 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); |
691 args->SetInteger(webview::kProcessId, | 692 args->SetInteger(webview::kProcessId, |
692 web_contents()->GetRenderProcessHost()->GetID()); | 693 web_contents()->GetRenderProcessHost()->GetID()); |
693 args->SetString(webview::kReason, TerminationStatusToString(status)); | 694 args->SetString(webview::kReason, TerminationStatusToString(status)); |
694 DispatchEventToEmbedder( | 695 DispatchEventToEmbedder( |
695 new GuestViewBase::Event(webview::kEventExit, args.Pass())); | 696 new GuestViewBase::Event(webview::kEventExit, args.Pass())); |
696 } | 697 } |
697 | 698 |
698 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { | 699 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1093 WebViewGuest* guest = | 1094 WebViewGuest* guest = |
1094 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id); | 1095 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id); |
1095 if (!guest) | 1096 if (!guest) |
1096 return; | 1097 return; |
1097 | 1098 |
1098 if (!allow) | 1099 if (!allow) |
1099 guest->Destroy(); | 1100 guest->Destroy(); |
1100 } | 1101 } |
1101 | 1102 |
1102 } // namespace extensions | 1103 } // namespace extensions |
OLD | NEW |