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

Unified Diff: chrome/browser/guestview/webview/webview_guest.cc

Issue 23514016: <webview>: Cleanup WebRequest event listeners when embedder destroyed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More fixes Created 7 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/guestview/webview/webview_guest.cc
diff --git a/chrome/browser/guestview/webview/webview_guest.cc b/chrome/browser/guestview/webview/webview_guest.cc
index 4fdb81b6c86a557b5ec1ecb7466b15177ea9cb1e..2e4a6d48a3c2f4e41fcd47fc69ca01f4b478629c 100644
--- a/chrome/browser/guestview/webview/webview_guest.cc
+++ b/chrome/browser/guestview/webview/webview_guest.cc
@@ -70,15 +70,13 @@ void RemoveWebViewEventListenersOnIOThread(
void* profile,
const std::string& extension_id,
int embedder_process_id,
- int embedder_routing_id,
- int guest_instance_id) {
+ int view_instance_id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners(
profile,
extension_id,
embedder_process_id,
- embedder_routing_id,
- guest_instance_id);
+ view_instance_id);
}
} // namespace
@@ -147,6 +145,24 @@ void WebViewGuest::Close() {
DispatchEvent(new GuestView::Event(webview::kEventClose, args.Pass()));
}
+void WebViewGuest::EmbedderDestroyed() {
+ // 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,
+ browser_context(), extension_id(),
+ embedder_render_process_id(),
+ view_instance_id()));
+}
+
void WebViewGuest::GuestProcessGone(base::TerminationStatus status) {
scoped_ptr<DictionaryValue> args(new DictionaryValue());
args->SetInteger(webview::kProcessId,
@@ -385,20 +401,6 @@ void WebViewGuest::DidStopLoading(content::RenderViewHost* render_view_host) {
void WebViewGuest::WebContentsDestroyed(WebContents* web_contents) {
RemoveWebViewFromExtensionRendererState(web_contents);
- // TODO(fsamuel): WebRequest event listeners for <webview> should survive
- // reparenting of a <webview> within a single embedder. The lifetime of
- // WebRequest event listeners should be equal to the lifetime of the embedder
- // WebContents rather than the guest until http://crbug.com/156219 is
- // resolved.
- content::BrowserThread::PostTask(
- content::BrowserThread::IO,
- FROM_HERE,
- base::Bind(
- &RemoveWebViewEventListenersOnIOThread,
- browser_context(), extension_id(),
- embedder_render_process_id(),
- embedder_routing_id(),
- view_instance_id()));
}
void WebViewGuest::LoadHandlerCalled() {
@@ -419,7 +421,6 @@ void WebViewGuest::LoadRedirect(const GURL& old_url,
void WebViewGuest::AddWebViewToExtensionRendererState() {
ExtensionRendererState::WebViewInfo webview_info;
webview_info.embedder_process_id = embedder_render_process_id();
- webview_info.embedder_routing_id = embedder_web_contents()->GetRoutingID();
webview_info.instance_id = view_instance_id();
content::BrowserThread::PostTask(

Powered by Google App Engine
This is Rietveld 408576698