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)#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_HANDLER_OPTIONS_HANDLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_OPTIONS_HANDLER_OPTIONS_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/options_ui.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/custom_handlers/protocol_handler.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HandlerOptionsHandler 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Listen for changes to protocol handlers (i.e. registerProtocolHandler()). 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This get triggered whenever a user allows a specific website or application 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to handle clicks on a link with a specified protocol (i.e. mailto: -> Gmail). 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HandlerOptionsHandler : public OptionsPageUIHandler { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandlerOptionsHandler(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~HandlerOptionsHandler(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OptionsPageUIHandler implementation. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetLocalizedValues( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* localized_strings) OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitializeHandler() OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitializePage() OVERRIDE; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessages() OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver implementation. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the user toggles whether custom handlers are enabled. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetHandlersEnabled(const ListValue* args); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the user sets a new default handler for a protocol. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDefault(const ListValue* args); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the user clears the default handler for a protocol. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| is the string name of the protocol to clear. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearDefault(const ListValue* args); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses a ProtocolHandler out of the arguments passed back from the view. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| is a list of [protocol, url, title]. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler ParseHandlerFromArgs(const ListValue* args) const; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a JSON object describing the set of protocol handlers for the 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // given protocol. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetHandlersForProtocol(const std::string& protocol, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* value); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a JSON list of the ignored protocol handlers. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetIgnoredHandlers(ListValue* handlers); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when the JS PasswordManager object is initialized. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateHandlerList(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove a handler. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| is a list of [protocol, url, title]. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveHandler(const ListValue* args); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove an ignored handler. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| is a list of [protocol, url, title]. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveIgnoredHandler(const ListValue* args); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* GetProtocolHandlerRegistry(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HandlerOptionsHandler); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace options 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_HANDLER_OPTIONS_HANDLER_H_ 89