diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-14 19:59:29 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-14 19:59:29 +0000 |
commit | 12e816bde502876c7674a83dc4ff7ef2b898a5e3 (patch) | |
tree | bab72bfdc0bc67bbb124a1fa5f21717b459f424a | |
parent | 28be55152d424691143467dc77cbe49532fbdcd1 (diff) | |
download | chromium_src-12e816bde502876c7674a83dc4ff7ef2b898a5e3.zip chromium_src-12e816bde502876c7674a83dc4ff7ef2b898a5e3.tar.gz chromium_src-12e816bde502876c7674a83dc4ff7ef2b898a5e3.tar.bz2 |
Tabbed options: Support direct navigation to content settings subtabs.
BUG=54903
TEST=block cookies, go to almost any site, click little cookie in omnibox, manage cookies
Review URL: http://codereview.chromium.org/3323021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59422 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/browser.cc | 34 | ||||
-rw-r--r-- | chrome/browser/browser.h | 2 | ||||
-rw-r--r-- | chrome/browser/dom_ui/content_settings_handler.cc | 48 | ||||
-rw-r--r-- | chrome/browser/dom_ui/content_settings_handler.h | 3 | ||||
-rw-r--r-- | chrome/browser/resources/options.html | 5 | ||||
-rw-r--r-- | chrome/browser/resources/options/content_settings.html | 100 | ||||
-rw-r--r-- | chrome/browser/resources/options/content_settings.js | 10 | ||||
-rw-r--r-- | chrome/browser/resources/options/options_page.js | 23 | ||||
-rw-r--r-- | chrome/common/url_constants.cc | 3 | ||||
-rw-r--r-- | chrome/common/url_constants.h | 1 |
10 files changed, 147 insertions, 82 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index deddb0b..a597915 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -36,6 +36,7 @@ #include "chrome/browser/debugger/devtools_toggle_action.h" #include "chrome/browser/debugger/devtools_window.h" #include "chrome/browser/dock_info.h" +#include "chrome/browser/dom_ui/content_settings_handler.h" #include "chrome/browser/dom_ui/filebrowse_ui.h" #include "chrome/browser/download/download_item.h" #include "chrome/browser/download/download_item_model.h" @@ -140,6 +141,8 @@ static const std::string kBrokenPageUrl = "http://www.google.com/support/chrome/bin/request.py?contact_type=" "broken_website&format=inproduct&p.page_title=$1&p.page_url=$2"; +static const std::string kHashMark = "#"; + /////////////////////////////////////////////////////////////////////////////// namespace { @@ -1775,8 +1778,8 @@ void Browser::ShowBrokenPageTab(TabContents* contents) { ShowSingletonTab(GURL(report_page_url)); } -void Browser::ShowOptionsTab(const char* sub_page) { - GURL url(StringPrintf("%s%s", chrome::kChromeUIOptionsURL, sub_page)); +void Browser::ShowOptionsTab(const std::string& sub_page) { + GURL url(chrome::kChromeUIOptionsURL + sub_page); // See if there is already an options tab open that we can use. for (int i = 0; i < tabstrip_model_.count(); i++) { @@ -1805,8 +1808,9 @@ void Browser::OpenClearBrowsingDataDialog() { profile_); if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableTabbedOptions)) { - ShowOptionsTab(StringPrintf("%s#%s", chrome::kAdvancedOptionsSubPage, - chrome::kClearBrowserDataSubPage).c_str()); + ShowOptionsTab( + chrome::kAdvancedOptionsSubPage + kHashMark + + chrome::kClearBrowserDataSubPage); } else { window_->ShowClearBrowsingDataDialog(); } @@ -1826,8 +1830,9 @@ void Browser::OpenKeywordEditor() { UserMetrics::RecordAction(UserMetricsAction("EditSearchEngines"), profile_); if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableTabbedOptions)) { - ShowOptionsTab(StringPrintf("%s#%s", chrome::kBrowserOptionsSubPage, - chrome::kSearchEnginesOptionsSubPage).c_str()); + ShowOptionsTab( + chrome::kBrowserOptionsSubPage + kHashMark + + chrome::kSearchEnginesOptionsSubPage); } else { window_->ShowSearchEnginesDialog(); } @@ -1841,8 +1846,9 @@ void Browser::OpenImportSettingsDialog() { UserMetrics::RecordAction(UserMetricsAction("Import_ShowDlg"), profile_); if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableTabbedOptions)) { - ShowOptionsTab(StringPrintf("%s#%s", chrome::kPersonalOptionsSubPage, - chrome::kImportDataSubPage).c_str()); + ShowOptionsTab( + chrome::kPersonalOptionsSubPage + kHashMark + + chrome::kImportDataSubPage); } else { window_->ShowImportDialog(); } @@ -2978,8 +2984,16 @@ void Browser::ShowRepostFormWarningDialog(TabContents *tab_contents) { } void Browser::ShowContentSettingsWindow(ContentSettingsType content_type) { - window()->ShowContentSettingsWindow(content_type, - profile_->GetOriginalProfile()); + + if (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableTabbedOptions)) { + ShowOptionsTab( + chrome::kContentSettingsSubPage + kHashMark + + ContentSettingsHandler::ContentSettingsTypeToGroupName(content_type)); + } else { + window()->ShowContentSettingsWindow(content_type, + profile_->GetOriginalProfile()); + } } void Browser::ShowCollectedCookiesDialog(TabContents *tab_contents) { diff --git a/chrome/browser/browser.h b/chrome/browser/browser.h index 8b6e779..3ff0647 100644 --- a/chrome/browser/browser.h +++ b/chrome/browser/browser.h @@ -526,7 +526,7 @@ class Browser : public TabStripModelDelegate, void ShowDownloadsTab(); void ShowExtensionsTab(); void ShowBrokenPageTab(TabContents* contents); - void ShowOptionsTab(const char* sub_page); + void ShowOptionsTab(const std::string& sub_page); void OpenClearBrowsingDataDialog(); void OpenOptionsDialog(); void OpenKeywordEditor(); diff --git a/chrome/browser/dom_ui/content_settings_handler.cc b/chrome/browser/dom_ui/content_settings_handler.cc index c6e5149..d15671d 100644 --- a/chrome/browser/dom_ui/content_settings_handler.cc +++ b/chrome/browser/dom_ui/content_settings_handler.cc @@ -25,29 +25,6 @@ typedef HostContentSettingsMap::ContentSettingsDetails ContentSettingsDetails; namespace { -std::string ContentSettingsTypeToGroupName(ContentSettingsType type) { - switch (type) { - case CONTENT_SETTINGS_TYPE_COOKIES: - return "cookies"; - case CONTENT_SETTINGS_TYPE_IMAGES: - return "images"; - case CONTENT_SETTINGS_TYPE_JAVASCRIPT: - return "javascript"; - case CONTENT_SETTINGS_TYPE_PLUGINS: - return "plugins"; - case CONTENT_SETTINGS_TYPE_POPUPS: - return "popups"; - case CONTENT_SETTINGS_TYPE_GEOLOCATION: - return "location"; - case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: - return "notifications"; - - default: - NOTREACHED(); - return ""; - } -} - ContentSettingsType ContentSettingsTypeFromGroupName(const std::string& name) { if (name == "cookies") return CONTENT_SETTINGS_TYPE_COOKIES; @@ -486,3 +463,28 @@ void ContentSettingsHandler::CheckExceptionPatternValidity( *pattern_value.get(), *valid_value.get()); } + +// static +std::string ContentSettingsHandler::ContentSettingsTypeToGroupName( + ContentSettingsType type) { + switch (type) { + case CONTENT_SETTINGS_TYPE_COOKIES: + return "cookies"; + case CONTENT_SETTINGS_TYPE_IMAGES: + return "images"; + case CONTENT_SETTINGS_TYPE_JAVASCRIPT: + return "javascript"; + case CONTENT_SETTINGS_TYPE_PLUGINS: + return "plugins"; + case CONTENT_SETTINGS_TYPE_POPUPS: + return "popups"; + case CONTENT_SETTINGS_TYPE_GEOLOCATION: + return "location"; + case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: + return "notifications"; + + default: + NOTREACHED(); + return ""; + } +} diff --git a/chrome/browser/dom_ui/content_settings_handler.h b/chrome/browser/dom_ui/content_settings_handler.h index c537aa5..bf0f6b3 100644 --- a/chrome/browser/dom_ui/content_settings_handler.h +++ b/chrome/browser/dom_ui/content_settings_handler.h @@ -28,6 +28,9 @@ class ContentSettingsHandler : public OptionsPageUIHandler { const NotificationSource& source, const NotificationDetails& details); + // Gets a string identifier for the group name, for use in HTML. + static std::string ContentSettingsTypeToGroupName(ContentSettingsType type); + private: void UpdateAllExceptionsDefaultsFromModel(); void UpdateExceptionsDefaultFromModel(ContentSettingsType type); diff --git a/chrome/browser/resources/options.html b/chrome/browser/resources/options.html index b118984..820083f 100644 --- a/chrome/browser/resources/options.html +++ b/chrome/browser/resources/options.html @@ -198,9 +198,10 @@ function load() { var hash = document.location.hash; if (path.length > 1) { - OptionsPage.showPageByName(path.slice(1)); + var pageName = path.slice(1); + OptionsPage.showPageByName(pageName); if (hash.length > 1) - OptionsPage.showOverlay(hash.slice(1)); + OptionsPage.handleHashForPage(pageName, hash.slice(1)); } else { // TODO(csilv): Save/restore last selected page. if (cr.isChromeOS) { diff --git a/chrome/browser/resources/options/content_settings.html b/chrome/browser/resources/options/content_settings.html index 4256bf67..77184b8 100644 --- a/chrome/browser/resources/options/content_settings.html +++ b/chrome/browser/resources/options/content_settings.html @@ -55,10 +55,10 @@ <table class="option-control-table"> <tr> - <td class="option-name"><label> - <input id="block-third-party-cookies" type="checkbox"> - <span i18n-content="cookies_block_3rd_party"></span> - </label></td> + <td class="option-name"><label> + <input id="block-third-party-cookies" type="checkbox"> + <span i18n-content="cookies_block_3rd_party"></span> + </label></td> </tr> <tr> <td class="option-name"><label> @@ -90,6 +90,12 @@ <span i18n-content="images_allow"></span> </label></td> </tr> + <tr> + <td class="option-name"><label> + <input type="radio" name="images" value="block"> + <span i18n-content="images_block"></span> + </label></td> + </tr> </table> <div class="exceptionsLink" i18n-content="content_exceptions"></div> @@ -103,10 +109,16 @@ <h4 i18n-content="javascript_setting" class="contentSettingsHeader"></h4> <table class="option-control-table"> <tr> - <td class="option-name"><label> - <input type="radio" name="javascript" value="allow"> - <span i18n-content="javascript_allow"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="javascript" value="allow"> + <span i18n-content="javascript_allow"></span> + </label></td> + </tr> + <tr> + <td class="option-name"><label> + <input type="radio" name="javascript" value="block"> + <span i18n-content="javscript_block"></span> + </label></td> </tr> </table> @@ -121,22 +133,22 @@ <h4 i18n-content="plugins_setting" class="contentSettingsHeader"></h4> <table class="option-control-table"> <tr> - <td class="option-name"><label> - <input type="radio" name="plugins" value="allow"> - <span i18n-content="plugins_allow"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="plugins" value="allow"> + <span i18n-content="plugins_allow"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="plugins" value="ask"> - <span i18n-content="plugins_allow_sandboxed"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="plugins" value="ask"> + <span i18n-content="plugins_allow_sandboxed"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="plugins" value="block"> - <span i18n-content="plugins_block"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="plugins" value="block"> + <span i18n-content="plugins_block"></span> + </label></td> </tr> </table> @@ -177,22 +189,22 @@ <h4 i18n-content="location_setting" class="contentSettingsHeader"></h4> <table class="option-control-table"> <tr> - <td class="option-name"><label> - <input type="radio" name="location" value="allow"> - <span i18n-content="location_allow"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="location" value="allow"> + <span i18n-content="location_allow"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="location" value="ask"> - <span i18n-content="location_ask"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="location" value="ask"> + <span i18n-content="location_ask"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="location" value="block"> - <span i18n-content="location_block"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="location" value="block"> + <span i18n-content="location_block"></span> + </label></td> </tr> </table> @@ -207,22 +219,22 @@ <h4 i18n-content="notifications_setting" class="contentSettingsHeader"></h4> <table class="option-control-table"> <tr> - <td class="option-name"><label> - <input type="radio" name="notifications" value="allow"> - <span i18n-content="notifications_allow"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="notifications" value="allow"> + <span i18n-content="notifications_allow"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="notifications" value="ask"> - <span i18n-content="notifications_ask"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="notifications" value="ask"> + <span i18n-content="notifications_ask"></span> + </label></td> </tr> <tr> - <td class="option-name"><label> - <input type="radio" name="notifications" value="block"> - <span i18n-content="notifications_block"></span> - </label></td> + <td class="option-name"><label> + <input type="radio" name="notifications" value="block"> + <span i18n-content="notifications_block"></span> + </label></td> </tr> </table> diff --git a/chrome/browser/resources/options/content_settings.js b/chrome/browser/resources/options/content_settings.js index 3e79169..ceaddbf 100644 --- a/chrome/browser/resources/options/content_settings.js +++ b/chrome/browser/resources/options/content_settings.js @@ -59,6 +59,16 @@ cr.define('options', function() { OptionsPage.showPageByName('cookiesView'); }; }, + + /** + * Handles a hash value in the URL (such as bar in + * chrome://options/foo#bar). Overrides the default action of showing an + * overlay by instead navigating to a particular subtab. + * @param {string} hash The hash value. + */ + handleHash: function(hash) { + OptionsPage.showTab($(hash + '-nav-tab')); + }, }; /** diff --git a/chrome/browser/resources/options/options_page.js b/chrome/browser/resources/options/options_page.js index 7843364..bb560f3 100644 --- a/chrome/browser/resources/options/options_page.js +++ b/chrome/browser/resources/options/options_page.js @@ -49,6 +49,16 @@ cr.define('options', function() { }; /** + * Called on load. Dispatch the URL hash to the given page's handleHash + * function. + * @param {string} pageName The string name of the (registered) options page. + * @param {string} hash The value of the hash component of the URL. + */ + OptionsPage.handleHashForPage = function(pageName, hash) { + OptionsPage.registeredPages_[pageName].handleHash(hash); + }; + + /** * Shows a registered Overlay page. * @param {string} overlayName Page name. */ @@ -225,7 +235,18 @@ cr.define('options', function() { } cr.dispatchPropertyChange(this, 'visible', visible, !visible); - } + }, + + /** + * Handles a hash value in the URL (such as bar in + * chrome://options/foo#bar). Called on page load. By default, this shows + * an overlay that matches the hash name, but can be overriden by individual + * OptionsPage subclasses to get other behavior. + * @param {string} hash The hash value. + */ + handleHash: function(hash) { + OptionsPage.showOverlay(hash); + }, }; // Export diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index 3817c38..f75a530 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc @@ -129,9 +129,10 @@ const char kDefaultOptionsSubPage[] = ""; const char kBrowserOptionsSubPage[] = "browser"; const char kPersonalOptionsSubPage[] = "personal"; const char kAdvancedOptionsSubPage[] = "advanced"; -const char kSearchEnginesOptionsSubPage[] = "searchEngines"; +const char kSearchEnginesOptionsSubPage[] = "editSearchEngineOverlay"; const char kClearBrowserDataSubPage[] = "clearBrowserDataOverlay"; const char kImportDataSubPage[] = "importDataOverlay"; +const char kContentSettingsSubPage[] = "content"; #if defined(OS_CHROMEOS) const char kSystemOptionsSubPage[] = "system"; const char kLanguageOptionsSubPage[] = "language"; diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h index f808952..80728fa 100644 --- a/chrome/common/url_constants.h +++ b/chrome/common/url_constants.h @@ -130,6 +130,7 @@ extern const char kAdvancedOptionsSubPage[]; extern const char kSearchEnginesOptionsSubPage[]; extern const char kClearBrowserDataSubPage[]; extern const char kImportDataSubPage[]; +extern const char kContentSettingsSubPage[]; #if defined(OS_CHROMEOS) extern const char kSystemOptionsSubPage[]; extern const char kLanguageOptionsSubPage[]; |