| Index: chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc
|
| diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc
|
| index 8175022edca475e6ede42075a725f5070540ffb0..e9c30248eeb4dc02f42f42a39236a62baef1ceaf 100644
|
| --- a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc
|
| +++ b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc
|
| @@ -5,15 +5,16 @@
|
|
|
| #include "chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.h"
|
|
|
| +#include "chrome/browser/extensions/api/web_request/web_request_api.h"
|
| #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
|
| #include "chrome/browser/favicon/favicon_tab_helper.h"
|
| -#include "chrome/browser/guest_view/web_view/web_view_constants.h"
|
| #include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
|
| #include "chrome/browser/ui/pdf/pdf_tab_helper.h"
|
| #include "chrome/browser/ui/zoom/zoom_controller.h"
|
| #include "chrome/common/chrome_version_info.h"
|
| #include "components/renderer_context_menu/context_menu_delegate.h"
|
| #include "content/public/common/page_zoom.h"
|
| +#include "extensions/browser/guest_view/web_view/web_view_constants.h"
|
|
|
| #if defined(ENABLE_PRINTING)
|
| #if defined(ENABLE_FULL_PRINTING)
|
| @@ -24,18 +25,53 @@
|
| #endif // defined(ENABLE_FULL_PRINTING)
|
| #endif // defined(ENABLE_PRINTING)
|
|
|
| +void RemoveWebViewEventListenersOnIOThread(
|
| + void* profile,
|
| + const std::string& extension_id,
|
| + int embedder_process_id,
|
| + int view_instance_id) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
| + ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners(
|
| + profile,
|
| + extension_id,
|
| + embedder_process_id,
|
| + view_instance_id);
|
| +}
|
| +
|
| ChromeWebViewGuestDelegate::ChromeWebViewGuestDelegate(
|
| extensions::WebViewGuest* web_view_guest)
|
| - : WebViewGuestDelegate(),
|
| + : WebViewGuestDelegate(web_view_guest),
|
| + find_helper_(web_view_guest),
|
| pending_context_menu_request_id_(0),
|
| chromevox_injected_(false),
|
| - current_zoom_factor_(1.0),
|
| - web_view_guest_(web_view_guest) {
|
| + current_zoom_factor_(1.0) {
|
| }
|
|
|
| ChromeWebViewGuestDelegate::~ChromeWebViewGuestDelegate() {
|
| }
|
|
|
| +void ChromeWebViewGuestDelegate::Find(
|
| + const base::string16& search_text,
|
| + const blink::WebFindOptions& options,
|
| + extensions::WebViewInternalFindFunction* find_function) {
|
| + find_helper_.Find(guest_web_contents(), search_text, options, find_function);
|
| +}
|
| +
|
| +void ChromeWebViewGuestDelegate::FindReply(content::WebContents* source,
|
| + int request_id,
|
| + int number_of_matches,
|
| + const gfx::Rect& selection_rect,
|
| + int active_match_ordinal,
|
| + bool final_update) {
|
| + find_helper_.FindReply(request_id, number_of_matches, selection_rect,
|
| + active_match_ordinal, final_update);
|
| +}
|
| +
|
| +void ChromeWebViewGuestDelegate::StopFinding(content::StopFindAction action) {
|
| + find_helper_.CancelAllFindSessions();
|
| + guest_web_contents()->StopFinding(action);
|
| +}
|
| +
|
| double ChromeWebViewGuestDelegate::GetZoom() {
|
| return current_zoom_factor_;
|
| }
|
| @@ -55,7 +91,7 @@ bool ChromeWebViewGuestDelegate::HandleContextMenu(
|
| MenuModelToValue(pending_menu_->menu_model());
|
| args->Set(webview::kContextMenuItems, items.release());
|
| args->SetInteger(webview::kRequestId, request_id);
|
| - web_view_guest_->DispatchEventToEmbedder(
|
| + web_view_guest()->DispatchEventToEmbedder(
|
| new extensions::GuestViewBase::Event(
|
| webview::kEventContextMenu, args.Pass()));
|
| return true;
|
| @@ -87,8 +123,29 @@ void ChromeWebViewGuestDelegate::OnAttachWebViewHelpers(
|
| PDFTabHelper::CreateForWebContents(contents);
|
| }
|
|
|
| +void ChromeWebViewGuestDelegate::OnEmbedderDestroyed() {
|
| + // TODO(fsamuel): WebRequest event listeners for <webview> should survive
|
| + // reparenting of a <webview> within a single embedder. Right now, we keep
|
| + // around the browser state for the listener for the lifetime of the embedder.
|
| + // Ideally, the lifetime of the listeners should match the lifetime of the
|
| + // <webview> DOM node. Once http://crbug.com/156219 is resolved we can move
|
| + // the call to RemoveWebViewEventListenersOnIOThread back to
|
| + // WebViewGuest::WebContentsDestroyed.
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &RemoveWebViewEventListenersOnIOThread,
|
| + web_view_guest()->browser_context(),
|
| + web_view_guest()->embedder_extension_id(),
|
| + web_view_guest()->embedder_render_process_id(),
|
| + web_view_guest()->view_instance_id()));
|
| +}
|
| +
|
| void ChromeWebViewGuestDelegate::OnDidCommitProvisionalLoadForFrame(
|
| bool is_main_frame) {
|
| + find_helper_.CancelAllFindSessions();
|
| +
|
| // Update the current zoom factor for the new page.
|
| ZoomController* zoom_controller =
|
| ZoomController::FromWebContents(guest_web_contents());
|
| @@ -118,10 +175,10 @@ void ChromeWebViewGuestDelegate::OnDocumentLoadedInFrame(
|
| void ChromeWebViewGuestDelegate::OnGuestDestroyed() {
|
| // Clean up custom context menu items for this guest.
|
| extensions::MenuManager* menu_manager = extensions::MenuManager::Get(
|
| - Profile::FromBrowserContext(web_view_guest_->browser_context()));
|
| + Profile::FromBrowserContext(web_view_guest()->browser_context()));
|
| menu_manager->RemoveAllContextItems(extensions::MenuItem::ExtensionKey(
|
| - web_view_guest_->embedder_extension_id(),
|
| - web_view_guest_->view_instance_id()));
|
| + web_view_guest()->embedder_extension_id(),
|
| + web_view_guest()->view_instance_id()));
|
| }
|
|
|
| // static
|
| @@ -140,6 +197,11 @@ scoped_ptr<base::ListValue> ChromeWebViewGuestDelegate::MenuModelToValue(
|
| return items.Pass();
|
| }
|
|
|
| +void ChromeWebViewGuestDelegate::OnRenderProcessGone() {
|
| + // Cancel all find sessions in progress.
|
| + find_helper_.CancelAllFindSessions();
|
| +}
|
| +
|
| void ChromeWebViewGuestDelegate::OnSetZoom(double zoom_factor) {
|
| ZoomController* zoom_controller =
|
| ZoomController::FromWebContents(guest_web_contents());
|
| @@ -150,7 +212,7 @@ void ChromeWebViewGuestDelegate::OnSetZoom(double zoom_factor) {
|
| scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
|
| args->SetDouble(webview::kOldZoomFactor, current_zoom_factor_);
|
| args->SetDouble(webview::kNewZoomFactor, zoom_factor);
|
| - web_view_guest_->DispatchEventToEmbedder(
|
| + web_view_guest()->DispatchEventToEmbedder(
|
| new extensions::GuestViewBase::Event(
|
| webview::kEventZoomChange, args.Pass()));
|
| current_zoom_factor_ = zoom_factor;
|
|
|