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( |