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_CONTENT_SETTINGS_HANDLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_OPTIONS_CONTENT_SETTINGS_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_change_registrar.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/pepper_flash_settings_manager.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/options_ui.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/options/pepper_flash_content_settings_utils.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostContentSettingsMap; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProtocolHandlerRegistry; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingsHandler : public OptionsPageUIHandler, 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public PepperFlashSettingsManager::Client { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsHandler(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingsHandler(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OptionsPageUIHandler implementation. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetLocalizedValues( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* localized_strings) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitializeHandler() OVERRIDE; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitializePage() OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterMessages() OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content::NotificationObserver implementation. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PepperFlashSettingsManager::Client implementation. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnGetPermissionSettingsCompleted( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets a string identifier for the group name, for use in HTML. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::string ContentSettingsTypeToGroupName(ContentSettingsType type); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to determine whether we should show links to Flash camera and 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // microphone settings. 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct MediaSettingsInfo { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaSettingsInfo(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~MediaSettingsInfo(); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cached Pepper Flash settings. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting flash_default_setting; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaExceptions flash_exceptions; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool flash_settings_initialized; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32_t last_flash_refresh_request_id; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the links to Flash settings pages are showed. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_flash_default_link; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_flash_exceptions_link; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cached Chrome media settings. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting default_setting; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool policy_disable_audio; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool policy_disable_video; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool default_setting_initialized; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaExceptions exceptions; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool exceptions_initialized; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by ShowFlashMediaLink() to specify which link to show/hide. 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum LinkType { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DEFAULT_SETTING = 0, 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXCEPTIONS, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Functions that call into the page ----------------------------------------- 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the page with the default settings (allow, ask, block, etc.) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateSettingDefaultFromModel(ContentSettingsType type); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the media radio buttons according to the enabled split prefs. 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateMediaSettingsView(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds the specific content setting type exceptions table. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateExceptionsViewFromModel(ContentSettingsType type); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds the specific content setting type exceptions 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OTR table. 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateOTRExceptionsViewFromModel(ContentSettingsType type); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds all the exceptions tables in the page (both normal 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and OTR tables). 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateAllExceptionsViewsFromModel(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but only OTR tables. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateAllOTRExceptionsViewsFromModel(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds just the geolocation exception table. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateGeolocationExceptionsView(); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds just the desktop notification exception table. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateNotificationExceptionsView(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clobbers and rebuilds just the Media device exception table. 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateMediaExceptionsView(); 109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Clobbers and rebuilds just the MIDI SysEx exception table. 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void UpdateMIDISysExExceptionsView(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clobbers and rebuilds an exception table that's managed by the host content 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // settings map. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateExceptionsViewFromHostContentSettingsMap(ContentSettingsType type); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but acts on the OTR table for the content setting type. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateExceptionsViewFromOTRHostContentSettingsMap( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the radio buttons for enabling / disabling handlers. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateHandlersEnabledRadios(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes one geolocation exception. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveGeolocationException(const base::ListValue* args, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t arg_index); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes one notification exception. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveNotificationException(const base::ListValue* args, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t arg_index); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removes one media camera and microphone exception. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveMediaException(const base::ListValue* args, size_t arg_index); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes one exception of |type| from the host content settings map. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveExceptionFromHostContentSettingsMap( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue* args, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t arg_index, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsType type); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callbacks used by the page ------------------------------------------------ 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the default value for a specific content type. |args| includes the 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content type and a string describing the new default the user has 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // chosen. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetContentFilter(const base::ListValue* args); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes the given row from the table. The first entry in |args| is the 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // content type, and the rest of the arguments depend on the content type 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be removed. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveException(const base::ListValue* args); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Changes the value of an exception. Called after the user is done editing an 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exception. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetException(const base::ListValue* args); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to decide whether a given pattern is valid, or if it should be 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rejected. Called while the user is editing an exception pattern. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckExceptionPatternValidity(const base::ListValue* args); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Utility functions --------------------------------------------------------- 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Applies content settings whitelists to reduce breakage / user confusion. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ApplyWhitelist(ContentSettingsType content_type, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting default_setting); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the HostContentSettingsMap for the normal profile. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* GetContentSettingsMap(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the HostContentSettingsMap for the incognito profile, or NULL if there 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is no active incognito session. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* GetOTRContentSettingsMap(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the default setting in string form. If |provider_id| is not NULL, the 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // id of the provider which provided the default setting is assigned to it. 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string GetSettingDefaultFromModel(ContentSettingsType type, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* provider_id); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the ProtocolHandlerRegistry for the normal profile. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* GetProtocolHandlerRegistry(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RefreshFlashMediaSettings(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fills in |exceptions| with Values for the given |type| from |map|. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetExceptionsFromHostContentSettingsMap( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostContentSettingsMap* map, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* exceptions); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnPepperFlashPrefChanged(); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ShowFlashMediaLink(LinkType link_type, bool show); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateFlashMediaLinksVisibility(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Member variables --------------------------------------------------------- 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefChangeRegistrar pref_change_registrar_; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PepperFlashSettingsManager> flash_settings_manager_; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaSettingsInfo media_settings_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContentSettingsHandler); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace options 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_CONTENT_SETTINGS_HANDLER_H_ 201