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 904e5e8a1dfaa09ddd760ec0e3ce6b6305ad0389..9febd3860bafc7843866d68602e688471941df54 100644 |
--- a/chrome/browser/guestview/webview/webview_guest.cc |
+++ b/chrome/browser/guestview/webview/webview_guest.cc |
@@ -71,15 +71,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); |
} |
void AttachWebViewHelpers(WebContents* contents) { |
@@ -154,6 +152,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, |
@@ -399,20 +415,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() { |
@@ -433,7 +435,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( |