summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-14 19:59:29 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-14 19:59:29 +0000
commit12e816bde502876c7674a83dc4ff7ef2b898a5e3 (patch)
treebab72bfdc0bc67bbb124a1fa5f21717b459f424a
parent28be55152d424691143467dc77cbe49532fbdcd1 (diff)
downloadchromium_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.cc34
-rw-r--r--chrome/browser/browser.h2
-rw-r--r--chrome/browser/dom_ui/content_settings_handler.cc48
-rw-r--r--chrome/browser/dom_ui/content_settings_handler.h3
-rw-r--r--chrome/browser/resources/options.html5
-rw-r--r--chrome/browser/resources/options/content_settings.html100
-rw-r--r--chrome/browser/resources/options/content_settings.js10
-rw-r--r--chrome/browser/resources/options/options_page.js23
-rw-r--r--chrome/common/url_constants.cc3
-rw-r--r--chrome/common/url_constants.h1
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[];