| Index: chrome/browser/ui/browser.cc
 | 
| diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
 | 
| index 5998ad38e012bd8460dabcb1b9353d8c84d124c1..332accd8348287ed66402ae5ede36135b9981fed 100644
 | 
| --- a/chrome/browser/ui/browser.cc
 | 
| +++ b/chrome/browser/ui/browser.cc
 | 
| @@ -37,6 +37,7 @@
 | 
|  #include "chrome/browser/character_encoding.h"
 | 
|  #include "chrome/browser/chrome_page_zoom.h"
 | 
|  #include "chrome/browser/content_settings/host_content_settings_map.h"
 | 
| +#include "chrome/browser/content_settings/tab_specific_content_settings.h"
 | 
|  #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
 | 
|  #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h"
 | 
|  #include "chrome/browser/debugger/devtools_toggle_action.h"
 | 
| @@ -852,7 +853,8 @@ void Browser::RegisterProtocolHandlerHelper(WebContents* web_contents,
 | 
|                                              const std::string& protocol,
 | 
|                                              const GURL& url,
 | 
|                                              const string16& title,
 | 
| -                                            bool user_gesture) {
 | 
| +                                            bool user_gesture,
 | 
| +                                            BrowserWindow* window) {
 | 
|    TabContents* tab_contents = TabContents::FromWebContents(web_contents);
 | 
|    if (!tab_contents || tab_contents->profile()->IsOffTheRecord())
 | 
|      return;
 | 
| @@ -862,11 +864,23 @@ void Browser::RegisterProtocolHandlerHelper(WebContents* web_contents,
 | 
|  
 | 
|    ProtocolHandlerRegistry* registry =
 | 
|        tab_contents->profile()->GetProtocolHandlerRegistry();
 | 
| -
 | 
| -  // TODO(gbillock): Replace this policy with one that shows the content
 | 
| -  // settings icon.
 | 
| -  if (!user_gesture)
 | 
| +  TabSpecificContentSettings* content_settings =
 | 
| +      tab_contents->content_settings();
 | 
| +
 | 
| +  if (!user_gesture && window) {
 | 
| +    content_settings->set_pending_protocol_handler(handler);
 | 
| +    content_settings->set_previous_protocol_handler(
 | 
| +        registry->GetHandlerFor(handler.protocol()));
 | 
| +    window->GetLocationBar()->UpdateContentSettingsIcons();
 | 
|      return;
 | 
| +  }
 | 
| +
 | 
| +  // Make sure content-setting icon is turned off in case the page does
 | 
| +  // ungestured and gestured RPH calls.
 | 
| +  if (window) {
 | 
| +    content_settings->ClearPendingProtocolHandler();
 | 
| +    window->GetLocationBar()->UpdateContentSettingsIcons();
 | 
| +  }
 | 
|  
 | 
|    if (!registry->SilentlyHandleRegisterHandlerRequest(handler)) {
 | 
|      content::RecordAction(
 | 
| @@ -1588,7 +1602,7 @@ void Browser::RegisterProtocolHandler(WebContents* web_contents,
 | 
|                                        const string16& title,
 | 
|                                        bool user_gesture) {
 | 
|    RegisterProtocolHandlerHelper(
 | 
| -      web_contents, protocol, url, title, user_gesture);
 | 
| +      web_contents, protocol, url, title, user_gesture, window());
 | 
|  }
 | 
|  
 | 
|  void Browser::RegisterIntentHandler(
 | 
| 
 |