Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1130)

Unified Diff: chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc

Issue 496873006: Move core web_view code to extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove dependency of web_view_internal_api.h Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698