Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Unified Diff: docs/chrome_settings.md

Issue 1309473002: WIP: Migrate Wiki content over to src/docs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « docs/ccache_mac.md ('k') | docs/chromium_browser_vs_google_chrome.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: docs/chrome_settings.md
diff --git a/docs/chrome_settings.md b/docs/chrome_settings.md
new file mode 100644
index 0000000000000000000000000000000000000000..fbd44f426d3a5d4e89b8aaa8d41733ab786d959d
--- /dev/null
+++ b/docs/chrome_settings.md
@@ -0,0 +1,107 @@
+# What is chrome://settings?
+
+Chrome (version 10 and above) uses WebUI settings by default for all platforms.
+Access it via the wrench menu ("Preferences" on Mac and Linux; "Options" on
+Windows and ChromeOS), or by typing chrome://settings into the address bar.
+
+One advantage of chrome://settings over platform-native dialogs is that it is
+shared by all platforms; therefore, it is easier to add new options UI and to
+keep all platforms in sync.
+
+Note that at the time of this writing, DOMUI is being renamed to WebUI. The two
+terms will be used interchangeably herein.
+
+## Moving parts
+
+### String resources
+
+Strings live in `chrome/app/generated_resources.grd`. There are several rules
+governing the format of strings:
+
+* the **casing of button text** depends on the platform. If your string will
+ be displayed on a button, you need to add it twice, in sentence case and
+ title case. Follow examples inside `<if expr="pp_ifdef('use_titlecase')">`
+ blocks. Do this even if your string is a single word because it may not be a
+ single word in another locale.
+* strings that are associated with form controls (buttons, checkboxes,
+ dropdowns, etc.) should NOT have **trailing punctuation**. Standalone
+ strings, such as sectional descriptive text, should have trailing
+ punctuation.
+* strings may be different between Google Chrome and chromium. If they differ
+ only in **product name**, put them in `generated_resources.grd` and use
+ product name placeholders; if they differ more substantially, use
+ `chromium_strings.grd` and `google_chrome_strings.grd`.
+
+### WebUI Handlers
+
+The C++ WebUI handler classes for chrome://settings live in
+`chrome/browser/ui/webui/options/`. These objects both handle messages from and
+dispatch messages to the page. Each handler is a logical grouping of related
+functionality. Hence `ContentSettingsHandler` is both the delegate and
+controller of the content settings subpage.
+
+A handler sends a message to the page via `dom_ui_->CallJavascriptFunction()`
+and registers for messages from the page via
+`dom_ui_->RegisterMessageCallback()`.
+
+### HTML/CSS/JS
+
+The HTML, CSS, and JS resources live in `chrome/browser/resources/options`. They
+are compiled into one resource at compile time by grit, via `<link>`, `<src>`
+and `<include>` tags in `options.html`. There is no need to add new files to any
+`.gyp` file.
+
+Some things that are good to know:
+
+* JS objects are bound to HTML nodes via `decorate()`. * Javascript calls
+ into C++ via `chrome.send`. * Some automatic preference handling is
+ provided in `preferences.js` and `pref_ui.js`. * Strings defined in a WebUI
+ handler are available via `localStrings.getString()` and friends.
+
+## Example: adding a simple pref
+
+Suppose you want to add a pref controlled by a **checkbox**.
+
+### 1. Getting UI approval
+
+Ask one of the UI leads where your option belongs. First point of contact should
+be Alex Ainslie <ainslie at chromium>.
+
+### 2. Adding Strings
+
+Add the string to `chrome/app/generated_resources.grd` near related strings. No
+trailing punctuation; sentence case.
+
+### 3. Changing WebUI Handler
+
+For simple prefs, the UI is kept in sync with the value automagically (see
+`CoreOptionsHandler`). Find the handler most closely relevant to your pref. The
+only action we need take here is to make the page aware of the new string.
+Locate the method in the handler called `GetLocalizedStrings` and look at its
+body for examples of `SetString` usage. The first parameter is the javascript
+name for the string.
+
+### 4. HTML/CSS/JS
+
+An example of the form a checkbox should take in html:
+
+```html
+<label class="checkbox">
+ <input id="clear-cookies-on-exit"
+ pref="profile.clear_site_data_on_exit" type="checkbox">
+ <span i18n-content="clearCookiesOnExit"></span>
+</label>
+```
+
+Of note:
+
+* the `checkbox` class allows us to style all checkboxes the same via CSS
+* the class and ID are in dash-form * the i18n-content value is in camelCase
+* the pref attribute matches that which is defined in
+ `chrome/common/pref_names.cc` and allows the prefs framework to
+ automatically keep it in sync with the value in C++
+* the `i18n-content` value matches the string we defined in the WebUI handler.
+ The `textContent` of the `span` will automatically be set to the associated
+ text.
+
+In this example, no additional JS or CSS are needed.
« no previous file with comments | « docs/ccache_mac.md ('k') | docs/chromium_browser_vs_google_chrome.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698