handler_options_handler.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/handler_options_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HandlerOptionsHandler::HandlerOptionsHandler() { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HandlerOptionsHandler::~HandlerOptionsHandler() { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::GetLocalizedValues( 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* localized_strings) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(localized_strings); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static OptionsStringResource resources[] = { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_tab_label", IDS_HANDLERS_TAB_LABEL }, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_allow", IDS_HANDLERS_ALLOW_RADIO }, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_block", IDS_HANDLERS_DONOTALLOW_RADIO }, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_type_column_header", IDS_HANDLERS_TYPE_COLUMN_HEADER }, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_site_column_header", IDS_HANDLERS_SITE_COLUMN_HEADER }, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_remove_link", IDS_HANDLERS_REMOVE_HANDLER_LINK }, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_none_handler", IDS_HANDLERS_NONE_HANDLER }, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_active_heading", IDS_HANDLERS_ACTIVE_HEADING }, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "handlers_ignored_heading", IDS_HANDLERS_IGNORED_HEADING }, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterTitle(localized_strings, "handlersPage", 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_HANDLER_OPTIONS_WINDOW_TITLE); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterStrings(localized_strings, resources, arraysize(resources)); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::InitializeHandler() { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.Add( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Profile>(Profile::FromWebUI(web_ui()))); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::InitializePage() { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateHandlerList(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::RegisterMessages() { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("clearDefault", 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&HandlerOptionsHandler::ClearDefault, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("removeHandler", 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&HandlerOptionsHandler::RemoveHandler, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("setHandlersEnabled", 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&HandlerOptionsHandler::SetHandlersEnabled, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("setDefault", 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&HandlerOptionsHandler::SetDefault, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback("removeIgnoredHandler", 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&HandlerOptionsHandler::RemoveIgnoredHandler, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProtocolHandlerRegistry* HandlerOptionsHandler::GetProtocolHandlerRegistry() { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ProtocolHandlerRegistryFactory::GetForProfile( 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile::FromWebUI(web_ui())); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void GetHandlersAsListValue( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandlerRegistry::ProtocolHandlerList& handlers, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue* handler_list) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList::const_iterator handler; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (handler = handlers.begin(); handler != handlers.end(); ++handler) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue* handlerValue = new ListValue(); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handlerValue->Append(new base::StringValue(handler->protocol())); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handlerValue->Append(new base::StringValue(handler->url().spec())); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handlerValue->Append(new base::StringValue(handler->title())); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handler_list->Append(handlerValue); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::GetHandlersForProtocol( 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& protocol, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* handlers_value) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlers_value->SetString("protocol", protocol); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlers_value->SetInteger("default_handler", 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry->GetHandlerIndex(protocol)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue* handlers_list = new ListValue(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHandlersAsListValue(registry->GetHandlersFor(protocol), handlers_list); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlers_value->Set("handlers", handlers_list); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::GetIgnoredHandlers(ListValue* handlers) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry::ProtocolHandlerList ignored_handlers = 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry->GetIgnoredHandlers(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetHandlersAsListValue(ignored_handlers, handlers); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::UpdateHandlerList() { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry = GetProtocolHandlerRegistry(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> protocols; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry->GetRegisteredProtocols(&protocols); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue handlers; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<std::string>::iterator protocol = protocols.begin(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol != protocols.end(); protocol++) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* handler_value = new DictionaryValue(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHandlersForProtocol(*protocol, handler_value); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlers.Append(handler_value); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ListValue> ignored_handlers(new ListValue()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIgnoredHandlers(ignored_handlers.get()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("HandlerOptions.setHandlers", handlers); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("HandlerOptions.setIgnoredHandlers", 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ignored_handlers); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::RemoveHandler(const ListValue* args) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* list; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!args->GetList(0, &list)) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler(ParseHandlerFromArgs(list)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->RemoveHandler(handler); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No need to call UpdateHandlerList() - we should receive a notification 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that the ProtocolHandlerRegistry has changed and we will update the view 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::RemoveIgnoredHandler(const ListValue* args) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* list; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!args->GetList(0, &list)) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler(ParseHandlerFromArgs(list)); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->RemoveIgnoredHandler(handler); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::SetHandlersEnabled(const ListValue* args) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled = true; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(args->GetBoolean(0, &enabled)); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (enabled) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->Enable(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->Disable(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::ClearDefault(const ListValue* args) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Value* value; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(args->Get(0, &value)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string protocol_to_clear; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(value->GetAsString(&protocol_to_clear)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->ClearDefault(protocol_to_clear); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::SetDefault(const ListValue* args) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* list; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(args->GetList(0, &list)); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProtocolHandler& handler(ParseHandlerFromArgs(list)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(!handler.IsEmpty()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProtocolHandlerRegistry()->OnAcceptRegisterProtocolHandler(handler); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProtocolHandler HandlerOptionsHandler::ParseHandlerFromArgs( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ListValue* args) const { 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 protocol; 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 url; 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 title; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ok = args->GetString(0, &protocol) && args->GetString(1, &url) && 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args->GetString(2, &title); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ok) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProtocolHandler::EmptyProtocolHandler(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ProtocolHandler::CreateProtocolHandler(UTF16ToUTF8(protocol), 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(UTF16ToUTF8(url)), 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void HandlerOptionsHandler::Observe( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == chrome::NOTIFICATION_PROTOCOL_HANDLER_REGISTRY_CHANGED) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateHandlerList(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace options 211