Index: content/browser/web_contents/web_contents_impl.cc |
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
index 918e90defe8aa4ff2b2f62678c4ba7a76bc7055b..694f3b68eebf085e9b90ab6ed0e54eee8437f40b 100644 |
--- a/content/browser/web_contents/web_contents_impl.cc |
+++ b/content/browser/web_contents/web_contents_impl.cc |
@@ -534,6 +534,8 @@ bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
IPC_MESSAGE_HANDLER(ViewHostMsg_EnumerateDirectory, OnEnumerateDirectory) |
IPC_MESSAGE_HANDLER(ViewHostMsg_RegisterProtocolHandler, |
OnRegisterProtocolHandler) |
+ IPC_MESSAGE_HANDLER(ViewHostMsg_UnregisterProtocolHandler, |
+ OnUnregisterProtocolHandler) |
IPC_MESSAGE_HANDLER(ViewHostMsg_Find_Reply, OnFindReply) |
IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed) |
IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnWebUISend) |
@@ -2726,6 +2728,20 @@ void WebContentsImpl::OnRegisterProtocolHandler(const std::string& protocol, |
delegate_->RegisterProtocolHandler(this, protocol, url, user_gesture); |
} |
+void WebContentsImpl::OnUnregisterProtocolHandler(const std::string& protocol, |
+ const GURL& url, |
+ bool user_gesture) { |
+ if (!delegate_) |
+ return; |
+ |
+ ChildProcessSecurityPolicyImpl* policy = |
+ ChildProcessSecurityPolicyImpl::GetInstance(); |
+ if (policy->IsPseudoScheme(protocol)) |
+ return; |
+ |
+ delegate_->UnregisterProtocolHandler(this, protocol, url, user_gesture); |
+} |
+ |
void WebContentsImpl::OnFindReply(int request_id, |
int number_of_matches, |
const gfx::Rect& selection_rect, |