| Index: chrome/browser/ui/webui/settings/protocol_handlers_handler.cc | 
| diff --git a/chrome/browser/ui/webui/options/handler_options_handler.cc b/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc | 
| similarity index 65% | 
| copy from chrome/browser/ui/webui/options/handler_options_handler.cc | 
| copy to chrome/browser/ui/webui/settings/protocol_handlers_handler.cc | 
| index 0e5ea47773ccf5c383087ac1f52bba846da501d2..1d101970a90e471b141ec4e4a6b7fdf6affec6cd 100644 | 
| --- a/chrome/browser/ui/webui/options/handler_options_handler.cc | 
| +++ b/chrome/browser/ui/webui/settings/protocol_handlers_handler.cc | 
| @@ -1,8 +1,8 @@ | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Copyright 2016 The Chromium Authors. All rights reserved. | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -#include "chrome/browser/ui/webui/options/handler_options_handler.h" | 
| +#include "chrome/browser/ui/webui/settings/protocol_handlers_handler.h" | 
|  | 
| #include <memory> | 
| #include <utility> | 
| @@ -22,66 +22,46 @@ | 
| #include "components/prefs/pref_service.h" | 
| #include "content/public/browser/web_ui.h" | 
|  | 
| -namespace options { | 
| +namespace settings { | 
|  | 
| -HandlerOptionsHandler::HandlerOptionsHandler() { | 
| +ProtocolHandlersHandler::ProtocolHandlersHandler() { | 
| } | 
|  | 
| -HandlerOptionsHandler::~HandlerOptionsHandler() { | 
| +ProtocolHandlersHandler::~ProtocolHandlersHandler() { | 
| } | 
|  | 
| -void HandlerOptionsHandler::GetLocalizedValues( | 
| -    base::DictionaryValue* localized_strings) { | 
| -  DCHECK(localized_strings); | 
| - | 
| -  static OptionsStringResource resources[] = { | 
| -      { "handlersTabLabel", IDS_HANDLERS_TAB_LABEL }, | 
| -      { "handlersAllow", IDS_HANDLERS_ALLOW_RADIO }, | 
| -      { "handlersBlock", IDS_HANDLERS_DONOTALLOW_RADIO }, | 
| -      { "handlersTypeColumnHeader", IDS_HANDLERS_TYPE_COLUMN_HEADER }, | 
| -      { "handlersSiteColumnHeader", IDS_HANDLERS_SITE_COLUMN_HEADER }, | 
| -      { "handlersRemoveLink", IDS_HANDLERS_REMOVE_HANDLER_LINK }, | 
| -      { "handlersNoneHandler", IDS_HANDLERS_NONE_HANDLER }, | 
| -      { "handlersActiveHeading", IDS_HANDLERS_ACTIVE_HEADING }, | 
| -      { "handlersIgnoredHeading", IDS_HANDLERS_IGNORED_HEADING }, | 
| -  }; | 
| -  RegisterTitle(localized_strings, "handlersPage", | 
| -                IDS_HANDLER_OPTIONS_WINDOW_TITLE); | 
| -  RegisterStrings(localized_strings, resources, arraysize(resources)); | 
| - | 
| -  localized_strings->SetString("handlersLearnMoreUrl", | 
| -                               chrome::kLearnMoreRegisterProtocolHandlerURL); | 
| -} | 
| - | 
| -void HandlerOptionsHandler::InitializeHandler() { | 
| +void ProtocolHandlersHandler::OnJavascriptAllowed() { | 
| notification_registrar_.Add( | 
| this, chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, | 
| content::Source<Profile>(Profile::FromWebUI(web_ui()))); | 
| } | 
|  | 
| -void HandlerOptionsHandler::InitializePage() { | 
| -  UpdateHandlerList(); | 
| +void ProtocolHandlersHandler::OnJavascriptDisallowed() { | 
| +  notification_registrar_.RemoveAll(); | 
| } | 
|  | 
| -void HandlerOptionsHandler::RegisterMessages() { | 
| +void ProtocolHandlersHandler::RegisterMessages() { | 
| +  web_ui()->RegisterMessageCallback("initializeProtocolHandlerList", | 
| +      base::Bind(&ProtocolHandlersHandler::InitializeProtocolHandlerList, | 
| +                 base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback("clearDefault", | 
| -      base::Bind(&HandlerOptionsHandler::ClearDefault, | 
| +      base::Bind(&ProtocolHandlersHandler::ClearDefault, | 
| base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback("removeHandler", | 
| -      base::Bind(&HandlerOptionsHandler::RemoveHandler, | 
| +      base::Bind(&ProtocolHandlersHandler::RemoveHandler, | 
| base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback("setHandlersEnabled", | 
| -      base::Bind(&HandlerOptionsHandler::SetHandlersEnabled, | 
| +      base::Bind(&ProtocolHandlersHandler::SetHandlersEnabled, | 
| base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback("setDefault", | 
| -      base::Bind(&HandlerOptionsHandler::SetDefault, | 
| +      base::Bind(&ProtocolHandlersHandler::SetDefault, | 
| base::Unretained(this))); | 
| web_ui()->RegisterMessageCallback("removeIgnoredHandler", | 
| -      base::Bind(&HandlerOptionsHandler::RemoveIgnoredHandler, | 
| +      base::Bind(&ProtocolHandlersHandler::RemoveIgnoredHandler, | 
| base::Unretained(this))); | 
| } | 
|  | 
| -ProtocolHandlerRegistry* HandlerOptionsHandler::GetProtocolHandlerRegistry() { | 
| +ProtocolHandlerRegistry* ProtocolHandlersHandler::GetProtocolHandlerRegistry() { | 
| return ProtocolHandlerRegistryFactory::GetForBrowserContext( | 
| Profile::FromWebUI(web_ui())); | 
| } | 
| @@ -91,15 +71,16 @@ static void GetHandlersAsListValue( | 
| base::ListValue* handler_list) { | 
| ProtocolHandlerRegistry::ProtocolHandlerList::const_iterator handler; | 
| for (handler = handlers.begin(); handler != handlers.end(); ++handler) { | 
| -    std::unique_ptr<base::ListValue> handler_value(new base::ListValue()); | 
| -    handler_value->AppendString(handler->protocol()); | 
| -    handler_value->AppendString(handler->url().spec()); | 
| -    handler_value->AppendString(handler->url().host()); | 
| +    std::unique_ptr<base::DictionaryValue> handler_value( | 
| +        new base::DictionaryValue()); | 
| +    handler_value->SetString("protocol", handler->protocol()); | 
| +    handler_value->SetString("spec", handler->url().spec()); | 
| +    handler_value->SetString("host", handler->url().host()); | 
| handler_list->Append(std::move(handler_value)); | 
| } | 
| } | 
|  | 
| -void HandlerOptionsHandler::GetHandlersForProtocol( | 
| +void ProtocolHandlersHandler::GetHandlersForProtocol( | 
| const std::string& protocol, | 
| base::DictionaryValue* handlers_value) { | 
| ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); | 
| @@ -120,14 +101,14 @@ void HandlerOptionsHandler::GetHandlersForProtocol( | 
| handlers_value->Set("handlers", handlers_list); | 
| } | 
|  | 
| -void HandlerOptionsHandler::GetIgnoredHandlers(base::ListValue* handlers) { | 
| +void ProtocolHandlersHandler::GetIgnoredHandlers(base::ListValue* handlers) { | 
| ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); | 
| ProtocolHandlerRegistry::ProtocolHandlerList ignored_handlers = | 
| registry->GetIgnoredHandlers(); | 
| return GetHandlersAsListValue(ignored_handlers, handlers); | 
| } | 
|  | 
| -void HandlerOptionsHandler::UpdateHandlerList() { | 
| +void ProtocolHandlersHandler::UpdateHandlerList() { | 
| ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); | 
| std::vector<std::string> protocols; | 
| registry->GetRegisteredProtocols(&protocols); | 
| @@ -143,13 +124,29 @@ void HandlerOptionsHandler::UpdateHandlerList() { | 
|  | 
| std::unique_ptr<base::ListValue> ignored_handlers(new base::ListValue()); | 
| GetIgnoredHandlers(ignored_handlers.get()); | 
| -  web_ui()->CallJavascriptFunctionUnsafe("HandlerOptions.setHandlers", | 
| -                                         handlers); | 
| -  web_ui()->CallJavascriptFunctionUnsafe("HandlerOptions.setIgnoredHandlers", | 
| -                                         *ignored_handlers); | 
| +  CallJavascriptFunction("cr.webUIListenerCallback", | 
| +                         base::StringValue("setProtocolHandlers"), | 
| +                         handlers); | 
| +  CallJavascriptFunction("cr.webUIListenerCallback", | 
| +                         base::StringValue("setIgnoredProtocolHandlers"), | 
| +                         *ignored_handlers); | 
| +} | 
| + | 
| +void ProtocolHandlersHandler::InitializeProtocolHandlerList( | 
| +    const base::ListValue* args) { | 
| +  AllowJavascript(); | 
| +  SendHandlersEnabledValue(); | 
| +  UpdateHandlerList(); | 
| +} | 
| + | 
| +void ProtocolHandlersHandler::SendHandlersEnabledValue() { | 
| +  CallJavascriptFunction("cr.webUIListenerCallback", | 
| +                         base::StringValue("setHandlersEnabled"), | 
| +                         base::FundamentalValue( | 
| +                             GetProtocolHandlerRegistry()->enabled())); | 
| } | 
|  | 
| -void HandlerOptionsHandler::RemoveHandler(const base::ListValue* args) { | 
| +void ProtocolHandlersHandler::RemoveHandler(const base::ListValue* args) { | 
| const base::ListValue* list; | 
| if (!args->GetList(0, &list)) { | 
| NOTREACHED(); | 
| @@ -164,7 +161,8 @@ void HandlerOptionsHandler::RemoveHandler(const base::ListValue* args) { | 
| // then. | 
| } | 
|  | 
| -void HandlerOptionsHandler::RemoveIgnoredHandler(const base::ListValue* args) { | 
| +void ProtocolHandlersHandler::RemoveIgnoredHandler( | 
| +    const base::ListValue* args) { | 
| const base::ListValue* list; | 
| if (!args->GetList(0, &list)) { | 
| NOTREACHED(); | 
| @@ -175,7 +173,7 @@ void HandlerOptionsHandler::RemoveIgnoredHandler(const base::ListValue* args) { | 
| GetProtocolHandlerRegistry()->RemoveIgnoredHandler(handler); | 
| } | 
|  | 
| -void HandlerOptionsHandler::SetHandlersEnabled(const base::ListValue* args) { | 
| +void ProtocolHandlersHandler::SetHandlersEnabled(const base::ListValue* args) { | 
| bool enabled = true; | 
| CHECK(args->GetBoolean(0, &enabled)); | 
| if (enabled) | 
| @@ -184,7 +182,7 @@ void HandlerOptionsHandler::SetHandlersEnabled(const base::ListValue* args) { | 
| GetProtocolHandlerRegistry()->Disable(); | 
| } | 
|  | 
| -void HandlerOptionsHandler::ClearDefault(const base::ListValue* args) { | 
| +void ProtocolHandlersHandler::ClearDefault(const base::ListValue* args) { | 
| const base::Value* value; | 
| CHECK(args->Get(0, &value)); | 
| std::string protocol_to_clear; | 
| @@ -192,7 +190,7 @@ void HandlerOptionsHandler::ClearDefault(const base::ListValue* args) { | 
| GetProtocolHandlerRegistry()->ClearDefault(protocol_to_clear); | 
| } | 
|  | 
| -void HandlerOptionsHandler::SetDefault(const base::ListValue* args) { | 
| +void ProtocolHandlersHandler::SetDefault(const base::ListValue* args) { | 
| const base::ListValue* list; | 
| CHECK(args->GetList(0, &list)); | 
| const ProtocolHandler& handler(ParseHandlerFromArgs(list)); | 
| @@ -200,7 +198,7 @@ void HandlerOptionsHandler::SetDefault(const base::ListValue* args) { | 
| GetProtocolHandlerRegistry()->OnAcceptRegisterProtocolHandler(handler); | 
| } | 
|  | 
| -ProtocolHandler HandlerOptionsHandler::ParseHandlerFromArgs( | 
| +ProtocolHandler ProtocolHandlersHandler::ParseHandlerFromArgs( | 
| const base::ListValue* args) const { | 
| base::string16 protocol; | 
| base::string16 url; | 
| @@ -211,12 +209,13 @@ ProtocolHandler HandlerOptionsHandler::ParseHandlerFromArgs( | 
| GURL(base::UTF16ToUTF8(url))); | 
| } | 
|  | 
| -void HandlerOptionsHandler::Observe( | 
| +void ProtocolHandlersHandler::Observe( | 
| int type, | 
| const content::NotificationSource& source, | 
| const content::NotificationDetails& details) { | 
| DCHECK_EQ(chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, type); | 
| +  SendHandlersEnabledValue(); | 
| UpdateHandlerList(); | 
| } | 
|  | 
| -}  // namespace options | 
| +}  // namespace settings | 
|  |