diff options
author | Kristian Monsen <kristianm@google.com> | 2011-05-11 20:53:37 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-05-16 13:54:48 +0100 |
commit | 21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch) | |
tree | 64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/common/extensions | |
parent | 0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff) | |
download | external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.zip external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.gz external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.bz2 |
Merge Chromium at 10.0.621.0: Initial merge by git.
Change-Id: I070cc91c608dfa4a968a5a54c173260765ac8097
Diffstat (limited to 'chrome/common/extensions')
111 files changed, 937 insertions, 345 deletions
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json index 1cb4a0e..8dac7c4 100644 --- a/chrome/common/extensions/api/extension_api.json +++ b/chrome/common/extensions/api/extension_api.json @@ -517,10 +517,15 @@ "optional": true, "description": "If true, enqueues this utterance if TTS is already in progress. If false (the default), interrupts any current speech and flushes the speech queue before speaking this new utterance." }, - "languageName": { + "voiceName": { "type": "string", "optional": true, - "description": "The language name for synthesis specified in the form <language>-<locale>, e.g. en-US, en-GB, fr-CA, zh-CN, etc." + "description": "The name of the voice to use for synthesis." + }, + "locale": { + "type": "string", + "optional": true, + "description": "The language and region code that specify the language and dialect to be used for synthesis, in the form <language>-<region>, e.g. en-US, en-GB, fr-CA, zh-CN, etc." }, "gender": { "type": "string", @@ -584,6 +589,99 @@ ] } ] + }, + { + "name": "speakCompleted", + "nodoc": true, + "type": "function", + "description": "A callback passed to the onSpeak event.", + "parameters": [ + { + "type": "integer", + "name": "requestId" + }, + { + "type": "string", + "optional": "true", + "name": "errorMessage" + } + ] + } + ], + "events": [ + { + "name": "onSpeak", + "type": "function", + "description": "Called when the user makes a call to tts.speak and the options matches one of the tts_voices from this extension's manifest.", + "parameters": [ + { + "type": "string", + "name": "utterance", + "description": "The text to speak." + }, + { + "type": "object", + "name": "options", + "description": "The speak options.", + "properties": { + "voiceName": { + "type": "string", + "optional": true, + "description": "The name of the voice to use for synthesis." + }, + "locale": { + "type": "string", + "optional": true, + "description": "The language and region code that specify the language and dialect to be used for synthesis, in the form <language>-<region>, e.g. en-US, en-GB, fr-CA, zh-CN, etc." + }, + "gender": { + "type": "string", + "optional": true, + "description": "Gender of voice for synthesized speech.", + "enum": ["male", "female"] + }, + "rate": { + "type": "number", + "optional": true, + "minimum": 0, + "maximum": 1, + "description": "Speaking speed between 0 and 1 inclusive, with 0 being slowest and 1 being fastest." + }, + "pitch": { + "type": "number", + "optional": true, + "minimum": 0, + "maximum": 1, + "description": "Speaking pitch between 0 and 1 inclusive, with 0 being lowest and 1 being highest." + }, + "volume": { + "type": "number", + "optional": true, + "minimum": 0, + "maximum": 1, + "description": "Speaking volume between 0 and 1 inclusive, with 0 being lowest and 1 being highest." + } + } + }, + { + "type": "function", + "name": "callback", + "description": "You must call this function when speaking is finished.", + "parameters": [ + { + "type": "string", + "name": "error", + "optional": true, + "description": "Error message, which will be returned to the caller in chrome.extension.lastError." + } + ] + } + ] + }, + { + "name": "onStop", + "type": "function", + "description": "Fired when a call is made to tts.stop and this extension may be in the middle of speaking." } ] }, @@ -710,6 +808,7 @@ {"type": "array", "items": {"type": "string"}} ] }, + "tabId": {"type": "integer", "minimum": 0, "optional": true, "description": "The id of the tab for which you want to adopt to the new window."}, "left": {"type": "integer", "optional": true, "description": "The number of pixels to position the new window from the left edge of the screen. If not specified, the new window is offset naturally from the last focusd window."}, "top": {"type": "integer", "optional": true, "description": "The number of pixels to position the new window from the top edge of the screen. If not specified, the new window is offset naturally from the last focusd window."}, "width": {"type": "integer", "minimum": 0, "optional": true, "description": "The width in pixels of the new window. If not specified defaults to a natural width."}, @@ -3635,8 +3734,12 @@ "description": "An object encapsulating a complete proxy configuration.", "properties": { "rules": {"$ref": "ProxyRules", "optional": true, "description": "The proxy rules describing this configuration."}, - "autoDetect": {"type": "boolean", "optional": true, "description": "True if the proxy settings sbould be detected automatically."}, - "pacScript": {"$ref": "PacScript", "optional": true, "description": "The proxy auto-config (PAC) script for this configuration."} + "pacScript": {"$ref": "PacScript", "optional": true, "description": "The proxy auto-config (PAC) script for this configuration."}, + "mode": { + "type": "string", + "enum": ["direct", "auto_detect", "pac_script", "fixed_servers", "system"], + "description": "'direct' = Never use a proxy<br>'auto_detect' = Auto detect proxy settings<br>'pac_script' = Use specified PAC script<br>'fixed_servers' = Manually specify proxy servers<br>'system' = Use system proxy settings" + } } } ], @@ -3815,7 +3918,7 @@ "name": "state", "type": "string", "enum": ["hidden", "shown", "active"], - "description": "'hidden' indicates sidebar is not defined for the specified tab (show was never called or hide() was called). Nothing is displayed for this sidebar.</br>'shown' means sidebar is defined for the specified tab; mini tab is displayed for this sidebar. Sidebar UI is either collapsed or displaying a content of some other extension's sidebar.</br>'active' indicates that sidebar is defined for the specified tab; sidebar UI is expanded and displaying this sidebar's content." + "description": "'hidden' indicates sidebar is not defined for the specified tab (show was never called or hide() was called). Nothing is displayed for this sidebar.<br>'shown' means sidebar is defined for the specified tab; mini tab is displayed for this sidebar. Sidebar UI is either collapsed or displaying a content of some other extension's sidebar.<br>'active' indicates that sidebar is defined for the specified tab; sidebar UI is expanded and displaying this sidebar's content." } ] } @@ -4133,7 +4236,7 @@ }, { "name": "get", - "description": "Return information about the installed extension with the given ID.", + "description": "Return information about the installed extension or app that has the given ID.", "parameters": [ { "name": "id", diff --git a/chrome/common/extensions/docs/a11y.html b/chrome/common/extensions/docs/a11y.html index d18f6f7..721b93a 100644 --- a/chrome/common/extensions/docs/a11y.html +++ b/chrome/common/extensions/docs/a11y.html @@ -956,7 +956,7 @@ see <a href="samples.html">Samples</a>. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/api_index.html b/chrome/common/extensions/docs/api_index.html index af8e72b..5480998 100644 --- a/chrome/common/extensions/docs/api_index.html +++ b/chrome/common/extensions/docs/api_index.html @@ -523,7 +523,7 @@ For more information, see the video <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/api_other.html b/chrome/common/extensions/docs/api_other.html index 7a0077e..baa17f2 100644 --- a/chrome/common/extensions/docs/api_other.html +++ b/chrome/common/extensions/docs/api_other.html @@ -555,7 +555,7 @@ just as they do in other web pages. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/apps.html b/chrome/common/extensions/docs/apps.html index 0b50ed7..53634d6 100644 --- a/chrome/common/extensions/docs/apps.html +++ b/chrome/common/extensions/docs/apps.html @@ -378,7 +378,7 @@ extensions and packaged apps, and packaged apps and hosted apps: <ul> <li> <a href="http://code.google.com/chrome/apps/articles/thinking_in_web_apps.html">Thinking in Web Apps</a> </li> - <li> <a href="http://codesite-staging:29006/chrome/webstore/articles/apps_vs_extensions.html">Extensions, Packaged Apps, and Hosted Apps in the Chrome Web Store</a> </li> + <li> <a href="http://code.google.com/chrome/webstore/articles/apps_vs_extensions.html">Extensions, Packaged Apps, and Hosted Apps in the Chrome Web Store</a> </li> </ul> @@ -653,7 +653,7 @@ basic concepts about extensions. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/autoupdate.html b/chrome/common/extensions/docs/autoupdate.html index d3aaf51..b65e2a8 100644 --- a/chrome/common/extensions/docs/autoupdate.html +++ b/chrome/common/extensions/docs/autoupdate.html @@ -612,7 +612,7 @@ Another option is to use the --extensions-update-frequency command-line flag to <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/background_pages.html b/chrome/common/extensions/docs/background_pages.html index 85d9b99..68dfa2d 100644 --- a/chrome/common/extensions/docs/background_pages.html +++ b/chrome/common/extensions/docs/background_pages.html @@ -605,7 +605,7 @@ from a file named <code>image.html</code>. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/bookmarks.html b/chrome/common/extensions/docs/bookmarks.html index 33dd392..1f31c7b 100644 --- a/chrome/common/extensions/docs/bookmarks.html +++ b/chrome/common/extensions/docs/bookmarks.html @@ -5323,7 +5323,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/browserAction.html b/chrome/common/extensions/docs/browserAction.html index f8b505f..639fd88 100644 --- a/chrome/common/extensions/docs/browserAction.html +++ b/chrome/common/extensions/docs/browserAction.html @@ -1909,7 +1909,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/content_scripts.html b/chrome/common/extensions/docs/content_scripts.html index e64f704..3e529d2 100644 --- a/chrome/common/extensions/docs/content_scripts.html +++ b/chrome/common/extensions/docs/content_scripts.html @@ -961,7 +961,7 @@ sending a request to its parent extension. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/contextMenus.html b/chrome/common/extensions/docs/contextMenus.html index 981c17d..1265b34 100644 --- a/chrome/common/extensions/docs/contextMenus.html +++ b/chrome/common/extensions/docs/contextMenus.html @@ -2933,7 +2933,7 @@ You can find samples of this API on the <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/cookies.html b/chrome/common/extensions/docs/cookies.html index f45e8ef..582afa1 100644 --- a/chrome/common/extensions/docs/cookies.html +++ b/chrome/common/extensions/docs/cookies.html @@ -3611,7 +3611,7 @@ see <a href="samples.html">Samples</a>. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/crx.html b/chrome/common/extensions/docs/crx.html index 9a72d60..b1b2df7 100644 --- a/chrome/common/extensions/docs/crx.html +++ b/chrome/common/extensions/docs/crx.html @@ -638,7 +638,7 @@ echo "Wrote $crx" <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/css/samples.css b/chrome/common/extensions/docs/css/samples.css index de3bdb5..05701ea 100644 --- a/chrome/common/extensions/docs/css/samples.css +++ b/chrome/common/extensions/docs/css/samples.css @@ -75,7 +75,6 @@ img.icon { margin: 10px 0; background: #eee; padding: 10px; - -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; } @@ -99,4 +98,4 @@ img.icon { padding: 50px 0; font-size: 17px; font-weight: bold; -}
\ No newline at end of file +} diff --git a/chrome/common/extensions/docs/devguide.html b/chrome/common/extensions/docs/devguide.html index 8e489a6..a806b4b 100644 --- a/chrome/common/extensions/docs/devguide.html +++ b/chrome/common/extensions/docs/devguide.html @@ -607,7 +607,7 @@ applies to packaged apps, as well as extensions. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/docs.html b/chrome/common/extensions/docs/docs.html index baab851..aa629a7 100644 --- a/chrome/common/extensions/docs/docs.html +++ b/chrome/common/extensions/docs/docs.html @@ -610,7 +610,7 @@ The following table lists the doc locations and explains how they differ. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/events.html b/chrome/common/extensions/docs/events.html index 3136703..e6a3bb2 100644 --- a/chrome/common/extensions/docs/events.html +++ b/chrome/common/extensions/docs/events.html @@ -515,7 +515,7 @@ bool hasListener(function callback(...)) <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/examples/api/bookmarks/basic.zip b/chrome/common/extensions/docs/examples/api/bookmarks/basic.zip Binary files differindex 73a1258..02d772f 100644 --- a/chrome/common/extensions/docs/examples/api/bookmarks/basic.zip +++ b/chrome/common/extensions/docs/examples/api/bookmarks/basic.zip diff --git a/chrome/common/extensions/docs/examples/api/bookmarks/basic/icon.png b/chrome/common/extensions/docs/examples/api/bookmarks/basic/icon.png Binary files differnew file mode 100644 index 0000000..9a79a46 --- /dev/null +++ b/chrome/common/extensions/docs/examples/api/bookmarks/basic/icon.png diff --git a/chrome/common/extensions/docs/examples/api/omnibox/simple-example.zip b/chrome/common/extensions/docs/examples/api/omnibox/simple-example.zip Binary files differindex 17d22b2..2a5116d 100644 --- a/chrome/common/extensions/docs/examples/api/omnibox/simple-example.zip +++ b/chrome/common/extensions/docs/examples/api/omnibox/simple-example.zip diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher.zip b/chrome/common/extensions/docs/examples/extensions/app_launcher.zip Binary files differnew file mode 100644 index 0000000..6f71c38 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher.zip diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/browser_action_icon.png b/chrome/common/extensions/docs/examples/extensions/app_launcher/browser_action_icon.png Binary files differnew file mode 100644 index 0000000..046ee42 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/browser_action_icon.png diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/icon.png b/chrome/common/extensions/docs/examples/extensions/app_launcher/icon.png Binary files differnew file mode 100644 index 0000000..4aa2994 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/icon.png diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json b/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json new file mode 100644 index 0000000..86b0286 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json @@ -0,0 +1,13 @@ +{ + "name": "App Launcher", + "version": "0.7.3", + "permissions": ["management"], + "browser_action": { + "default_icon": "browser_action_icon.png", + "default_title": "App Launcher", + "default_popup": "popup.html" + }, + "icons": { + "48": "icon.png" + } +} diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.css b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.css new file mode 100644 index 0000000..aa6ce07 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.css @@ -0,0 +1,49 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +html { + overflow-x: hidden; +} + +body { + font-family: Helvetica, Arial, sans-serif; +} + +#search_container { + text-align: center; +} + +#search { + width: 85%; +} + +.app { + width: 100%; + margin-top: 7px; + margin-bottom: 7px; + margin-left: 2px; + margin-right: 20px; + white-space: nowrap; +} + +.app img { + vertical-align: middle; + height: 38px; + width: 38px; +} + +.app_title { + vertical-align: middle; + margin-left: 5px; +} + +.app:hover { + background-color: rgb(250,250,250); + cursor:pointer; + outline: 1px dotted rgb(100,100,200); +} + +.app_selected,.app_selected:hover { + background-color: rgb(230,230,230); +} diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.html b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.html new file mode 100644 index 0000000..ca14080 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.html @@ -0,0 +1,32 @@ +<!doctype html> +<!-- + * Copyright (c) 2010 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. +--> +<html> +<head> +<link rel="stylesheet" type="text/css" href="popup.css"> +<script src="popup.js"></script> +</head> +<body onload="onLoad()"> + +<div id="spacer_dummy"></div> +<div id="outer"> + +<div id="appstore_link" style="display:none"> +<p>No apps installed.</p><p> +<a href='javascript:chrome.tabs.create({"url":"https://chrome.google.com/webstore", "selected":true});window.close();'>Go get some</a></p> +</div> + +<div id="search_container"> +<input id="search" type="text" placeholder="type to search" + oninput="onSearchInput()" spellcheck="false"> +</div> + +<div id="apps"></div> + +</div> + +</body> +</html> diff --git a/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.js b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.js new file mode 100644 index 0000000..8918c62 --- /dev/null +++ b/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.js @@ -0,0 +1,198 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function $(id) { + return document.getElementById(id); +} + +// Returns the largest size icon, or a default icon, for the given |app|. +function getIconURL(app) { + if (!app.icons || app.icons.length == 0) { + return chrome.extension.getURL("icon.png"); + } + var largest = {size:0}; + for (var i = 0; i < app.icons.length; i++) { + var icon = app.icons[i]; + if (icon.size > largest.size) { + largest = icon; + } + } + return largest.url; +} + +function launchApp(id) { + chrome.management.launchApp(id); + window.close(); // Only needed on OSX because of crbug.com/63594 +} + +// Adds DOM nodes for |app| into |appsDiv|. +function addApp(appsDiv, app, selected) { + var div = document.createElement("div"); + div.className = "app" + (selected ? " app_selected" : ""); + + div.onclick = function() { + launchApp(app.id); + }; + + var img = document.createElement("img"); + img.src = getIconURL(app); + div.appendChild(img); + + var title = document.createElement("span"); + title.className = "app_title"; + title.innerText = app.name; + div.appendChild(title); + + appsDiv.appendChild(div); +} + +// The list of all apps & extensions. +var completeList = []; + +// A filtered list of apps we actually want to show. +var appList = []; + +// The index of an app in |appList| that should be highlighted. +var selectedIndex = 0; + +function reloadAppDisplay() { + var appsDiv = $("apps"); + + // Empty the current content. + appsDiv.innerHTML = ""; + + for (var i = 0; i < appList.length; i++) { + var item = appList[i]; + addApp(appsDiv, item, i == selectedIndex); + } +} + +// Puts only enabled apps from completeList into appList. +function rebuildAppList(filter) { + selectedIndex = 0; + appList = []; + for (var i = 0; i < completeList.length; i++){ + var item = completeList[i]; + // Skip extensions and disabled apps. + if (!item.isApp || !item.enabled) { + continue; + } + if (filter && item.name.toLowerCase().search(filter) < 0) { + continue; + } + appList.push(item); + } +} + +// In order to keep the popup bubble from shrinking as your search narrows the +// list of apps shown, we set an explicit width on the outermost div. +var didSetExplicitWidth = false; + +function adjustWidthIfNeeded(filter) { + if (filter.length > 0 && !didSetExplicitWidth) { + // Set an explicit width, correcting for any scroll bar present. + var outer = $("outer"); + var correction = window.innerWidth - document.documentElement.clientWidth; + var width = outer.offsetWidth; + $("spacer_dummy").style.width = width + correction + "px"; + didSetExplicitWidth = true; + } +} + +// Shows the list of apps based on the search box contents. +function onSearchInput() { + var filter = $("search").value; + adjustWidthIfNeeded(filter); + rebuildAppList(filter); + reloadAppDisplay(); +} + +function compare(a, b) { + return (a > b) ? 1 : (a == b ? 0 : -1); +} + +function compareByName(app1, app2) { + return compare(app1.name.toLowerCase(), app2.name.toLowerCase()); +} + +function onLoad() { + chrome.management.getAll(function(info) { + var appCount = 0; + for (var i = 0; i < info.length; i++) { + if (info[i].isApp) { + appCount++; + } + } + if (appCount == 0) { + $("search").style.display = "none"; + $("appstore_link").style.display = ""; + return; + } + completeList = info.sort(compareByName); + onSearchInput(); + }); +} + +// Changes the selected app in the list. +function changeSelection(newIndex) { + if (newIndex >= 0 && newIndex <= appList.length - 1) { + selectedIndex = newIndex; + reloadAppDisplay(); + + var selected = document.getElementsByClassName("app_selected")[0]; + var rect = selected.getBoundingClientRect(); + if (newIndex == 0) { + window.scrollTo(0, 0); + } else if (newIndex == appList.length - 1) { + window.scrollTo(0, document.height); + } else if (rect.top < 0) { + window.scrollBy(0, rect.top); + } else if (rect.bottom > innerHeight) { + window.scrollBy(0, rect.bottom - innerHeight); + } + } +} + +var keys = { + ENTER : 13, + ESCAPE : 27, + END : 35, + HOME : 36, + LEFT : 37, + UP : 38, + RIGHT : 39, + DOWN : 40 +}; + +// Set up a key event handler that handles moving the selected app up/down, +// hitting enter to launch the selected app, as well as auto-focusing the +// search box as soon as you start typing. +window.onkeydown = function(event) { + switch (event.keyCode) { + case keys.DOWN: + changeSelection(selectedIndex + 1); + break; + case keys.UP: + changeSelection(selectedIndex - 1); + break; + case keys.HOME: + changeSelection(0); + break; + case keys.END: + changeSelection(appList.length - 1); + break; + case keys.ENTER: + var app = appList[selectedIndex]; + if (app) { + launchApp(app.id); + } + break; + default: + // Focus the search box and return true so you can just start typing even + // when the search box isn't focused. + $("search").focus(); + return true; + } + return false; +}; diff --git a/chrome/common/extensions/docs/examples/extensions/benchmark.zip b/chrome/common/extensions/docs/examples/extensions/benchmark.zip Binary files differindex a322ab3..3d799d2 100644 --- a/chrome/common/extensions/docs/examples/extensions/benchmark.zip +++ b/chrome/common/extensions/docs/examples/extensions/benchmark.zip diff --git a/chrome/common/extensions/docs/examples/extensions/benchmark/options.html b/chrome/common/extensions/docs/examples/extensions/benchmark/options.html index 24adc77..6db31d2 100644 --- a/chrome/common/extensions/docs/examples/extensions/benchmark/options.html +++ b/chrome/common/extensions/docs/examples/extensions/benchmark/options.html @@ -36,9 +36,9 @@ div#header { position: relative; overflow: hidden; background: #5296de; - -webkit-background-size: 100%; + background-size: 100%; border: 1px solid #3a75bd; - -webkit-border-radius: 6px; + border-radius: 6px; color: white; text-shadow: 0 0 2px black; } diff --git a/chrome/common/extensions/docs/examples/extensions/buildbot.zip b/chrome/common/extensions/docs/examples/extensions/buildbot.zip Binary files differindex d7eb8c4..9e7ad86 100644 --- a/chrome/common/extensions/docs/examples/extensions/buildbot.zip +++ b/chrome/common/extensions/docs/examples/extensions/buildbot.zip diff --git a/chrome/common/extensions/docs/examples/extensions/buildbot/bg.html b/chrome/common/extensions/docs/examples/extensions/buildbot/bg.html index 39dd344..dda276e 100644 --- a/chrome/common/extensions/docs/examples/extensions/buildbot/bg.html +++ b/chrome/common/extensions/docs/examples/extensions/buildbot/bg.html @@ -49,9 +49,14 @@ function requestURL(url, callback) { try { xhr.onreadystatechange = function(state) { if (xhr.readyState == 4) { - var text = xhr.responseText; - //console.log(text); - callback(text); + if (xhr.status == 200) { + var text = xhr.responseText; + //console.log(text); + callback(text); + } else { + chrome.browserAction.setBadgeText({text:"?"}); + chrome.browserAction.setBadgeBackgroundColor({color:[0,0,255,255]}); + } } } diff --git a/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json b/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json index 1acb250..baeca6d 100644 --- a/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json +++ b/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json @@ -1,6 +1,6 @@ { "name": "Chromium Buildbot Monitor", - "version": "0.7.5", + "version": "0.7.6", "description": "Displays the status of the Chromium buildbot in the toolbar. Click to see more detailed status in a popup.", "icons": { "128": "icon.png" }, "background_page": "bg.html", diff --git a/chrome/common/extensions/docs/examples/extensions/buildbot/popup.html b/chrome/common/extensions/docs/examples/extensions/buildbot/popup.html index 3a66636..f89511a 100644 --- a/chrome/common/extensions/docs/examples/extensions/buildbot/popup.html +++ b/chrome/common/extensions/docs/examples/extensions/buildbot/popup.html @@ -17,7 +17,11 @@ function updateBotList(text) { } var data; try { - data = JSON.parse(results[1]); + // The build bot returns invalid JSON. Namely it uses single + // quotes and includes commas in some invalid locations. We have to + // run some regexps across the text to fix it up. + var jsonString = results[1].replace(/'/g, '"').replace(/},]/g,'}]'); + data = JSON.parse(jsonString); } catch (e) { console.dir(e); console.log(text); @@ -104,9 +108,13 @@ function requestURL(url, callback) { try { xhr.onreadystatechange = function(state) { if (xhr.readyState == 4) { - var text = xhr.responseText; - //console.log(text); - callback(text); + if (xhr.status == 200) { + var text = xhr.responseText; + //console.log(text); + callback(text); + } else { + bots.innerText = "Error."; + } } } @@ -147,7 +155,7 @@ body { #links { background-color: #efefef; border: 1px solid #cccccc; - -webkit-border-radius: 5px; + border-radius: 5px; margin-top: 1px; padding: 3px; white-space: nowrap; @@ -175,7 +183,7 @@ body.small .bot { .bot { cursor: pointer; - -webkit-border-radius: 5px; + border-radius: 5px; margin-top: 1px; padding: 3px; white-space: nowrap; diff --git a/chrome/common/extensions/docs/examples/extensions/chrome_search.zip b/chrome/common/extensions/docs/examples/extensions/chrome_search.zip Binary files differindex d0ad166..a38e561 100644 --- a/chrome/common/extensions/docs/examples/extensions/chrome_search.zip +++ b/chrome/common/extensions/docs/examples/extensions/chrome_search.zip diff --git a/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json b/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json index 54de17c..3254391 100644 --- a/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json +++ b/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json @@ -1,9 +1,9 @@ { "background_page": "background.html", "description": "Add support to the omnibox to search the Chromium source code.", + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRx0y4f/CuomPPeGxcVMo7yfYZ1apxD+9e3ItNtPRBi8WMmzG0xhjnqvm03LTfTljbzA1L93s31HkjS5Bd12qM8SSZxOOizsZveK1tdpX0QelikSUaz1wwIyjatoC/jJy7vuuk0j5kPeLkNAhYGJTqN3H/Pqt0lFF1VFX4+fCEvQIDAQAB", "name": "Chromium Search", "omnibox": { "keyword" : "src" }, "permissions": [ "tabs", "http://www.google.com/" ], - "version": "5", - "minimum_chrome_version": "9" + "version": "4" } diff --git a/chrome/common/extensions/docs/examples/extensions/imageinfo.zip b/chrome/common/extensions/docs/examples/extensions/imageinfo.zip Binary files differindex 9ab6603..dbce95b 100644 --- a/chrome/common/extensions/docs/examples/extensions/imageinfo.zip +++ b/chrome/common/extensions/docs/examples/extensions/imageinfo.zip diff --git a/chrome/common/extensions/docs/examples/tutorials/getstarted.zip b/chrome/common/extensions/docs/examples/tutorials/getstarted.zip Binary files differindex 54083ae..268cc5d 100644 --- a/chrome/common/extensions/docs/examples/tutorials/getstarted.zip +++ b/chrome/common/extensions/docs/examples/tutorials/getstarted.zip diff --git a/chrome/common/extensions/docs/examples/tutorials/getstarted/getstarted.zip b/chrome/common/extensions/docs/examples/tutorials/getstarted/getstarted.zip Binary files differnew file mode 100644 index 0000000..37deb7f --- /dev/null +++ b/chrome/common/extensions/docs/examples/tutorials/getstarted/getstarted.zip diff --git a/chrome/common/extensions/docs/experimental.clipboard.html b/chrome/common/extensions/docs/experimental.clipboard.html index 24287e0..4852c75 100644 --- a/chrome/common/extensions/docs/experimental.clipboard.html +++ b/chrome/common/extensions/docs/experimental.clipboard.html @@ -966,7 +966,7 @@ generally indicates the tab is going away. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.contextMenus.html b/chrome/common/extensions/docs/experimental.contextMenus.html index aa7a362..5f246fd 100644 --- a/chrome/common/extensions/docs/experimental.contextMenus.html +++ b/chrome/common/extensions/docs/experimental.contextMenus.html @@ -480,7 +480,7 @@ You can read all about it at its new home: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.cookies.html b/chrome/common/extensions/docs/experimental.cookies.html index 5fdcdcc..b179e08 100644 --- a/chrome/common/extensions/docs/experimental.cookies.html +++ b/chrome/common/extensions/docs/experimental.cookies.html @@ -480,7 +480,7 @@ You can read all about it at its new home: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.history.html b/chrome/common/extensions/docs/experimental.history.html index 0e45ec7..b839162 100644 --- a/chrome/common/extensions/docs/experimental.history.html +++ b/chrome/common/extensions/docs/experimental.history.html @@ -480,7 +480,7 @@ You can read all about it at its new home: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.html b/chrome/common/extensions/docs/experimental.html index 1c9ebe1..fd600a2 100644 --- a/chrome/common/extensions/docs/experimental.html +++ b/chrome/common/extensions/docs/experimental.html @@ -547,7 +547,7 @@ For information on the standard APIs that extensions can use, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.idle.html b/chrome/common/extensions/docs/experimental.idle.html index 6d1ae19..6f709ae 100644 --- a/chrome/common/extensions/docs/experimental.idle.html +++ b/chrome/common/extensions/docs/experimental.idle.html @@ -480,7 +480,7 @@ You can read all about it at its new home: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.infobars.html b/chrome/common/extensions/docs/experimental.infobars.html index f542b7a..59e642d 100644 --- a/chrome/common/extensions/docs/experimental.infobars.html +++ b/chrome/common/extensions/docs/experimental.infobars.html @@ -800,7 +800,7 @@ For example: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.processes.html b/chrome/common/extensions/docs/experimental.processes.html index f2a289e..a41a1c6 100644 --- a/chrome/common/extensions/docs/experimental.processes.html +++ b/chrome/common/extensions/docs/experimental.processes.html @@ -1107,7 +1107,7 @@ http://src.chromium.org/viewvc/chrome/trunk/src/chrome/test/data/extensions/api_ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.proxy.html b/chrome/common/extensions/docs/experimental.proxy.html index 07c2ed9..a13ce9e 100644 --- a/chrome/common/extensions/docs/experimental.proxy.html +++ b/chrome/common/extensions/docs/experimental.proxy.html @@ -1314,7 +1314,7 @@ </div><div> <div> <dt> - <var>autoDetect</var> + <var>pacScript</var> <em> <!-- TYPE --> @@ -1323,15 +1323,15 @@ <span class="optional">optional</span> <span class="enum" style="display: none; ">enumerated</span> <span id="typeTemplate"> - <span style="display: none; "> - <a> Type</a> - </span> <span> - <span style="display: none; "> + <a href="experimental.proxy.html#type-PacScript">PacScript</a> + </span> + <span style="display: none; "> + <span> array of <span><span></span></span> </span> - <span>boolean</span> - <span style="display: none; "></span> + <span>paramType</span> + <span></span> </span> </span> ) @@ -1342,7 +1342,7 @@ <dd class="todo" style="display: none; "> Undocumented. </dd> - <dd>True if the proxy settings sbould be detected automatically.</dd> + <dd>The proxy auto-config (PAC) script for this configuration.</dd> <dd style="display: none; "> This parameter was added in version <b><span></span></b>. @@ -1372,24 +1372,24 @@ </div><div> <div> <dt> - <var>pacScript</var> + <var>mode</var> <em> <!-- TYPE --> <div style="display:inline"> ( - <span class="optional">optional</span> - <span class="enum" style="display: none; ">enumerated</span> + <span class="optional" style="display: none; ">optional</span> + <span class="enum">enumerated</span> <span id="typeTemplate"> - <span> - <a href="experimental.proxy.html#type-PacScript">PacScript</a> - </span> <span style="display: none; "> - <span> + <a> Type</a> + </span> + <span> + <span style="display: none; "> array of <span><span></span></span> </span> - <span>paramType</span> - <span></span> + <span>string</span> + <span>["direct", "auto_detect", "pac_script", "fixed_servers", "system"]</span> </span> </span> ) @@ -1400,7 +1400,7 @@ <dd class="todo" style="display: none; "> Undocumented. </dd> - <dd>The proxy auto-config (PAC) script for this configuration.</dd> + <dd>'direct' = Never use a proxy<br>'auto_detect' = Auto detect proxy settings<br>'pac_script' = Use specified PAC script<br>'fixed_servers' = Manually specify proxy servers<br>'system' = Use system proxy settings</dd> <dd style="display: none; "> This parameter was added in version <b><span></span></b>. @@ -1455,7 +1455,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.sidebar.html b/chrome/common/extensions/docs/experimental.sidebar.html index 148de03..727bf89 100644 --- a/chrome/common/extensions/docs/experimental.sidebar.html +++ b/chrome/common/extensions/docs/experimental.sidebar.html @@ -2583,7 +2583,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.webNavigation.html b/chrome/common/extensions/docs/experimental.webNavigation.html index 52a04af..237ee23 100644 --- a/chrome/common/extensions/docs/experimental.webNavigation.html +++ b/chrome/common/extensions/docs/experimental.webNavigation.html @@ -2555,7 +2555,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/experimental.webRequest.html b/chrome/common/extensions/docs/experimental.webRequest.html index 71769af..14346ff 100644 --- a/chrome/common/extensions/docs/experimental.webRequest.html +++ b/chrome/common/extensions/docs/experimental.webRequest.html @@ -2493,7 +2493,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/extension.html b/chrome/common/extensions/docs/extension.html index a0e11fd..e7bb9e7 100644 --- a/chrome/common/extensions/docs/extension.html +++ b/chrome/common/extensions/docs/extension.html @@ -3556,7 +3556,7 @@ For details, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/external_extensions.html b/chrome/common/extensions/docs/external_extensions.html index 0ee2ed5..39c1540 100644 --- a/chrome/common/extensions/docs/external_extensions.html +++ b/chrome/common/extensions/docs/external_extensions.html @@ -768,7 +768,7 @@ through the UI, and then uninstalling it. </p> <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/faq.html b/chrome/common/extensions/docs/faq.html index 0e17982..66cc1b4 100644 --- a/chrome/common/extensions/docs/faq.html +++ b/chrome/common/extensions/docs/faq.html @@ -872,7 +872,7 @@ win,stable,#.#.###.#,#.#.###.#</pre> <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/getstarted.html b/chrome/common/extensions/docs/getstarted.html index 3dafe3c..d7e94c8 100644 --- a/chrome/common/extensions/docs/getstarted.html +++ b/chrome/common/extensions/docs/getstarted.html @@ -376,6 +376,7 @@ to the toolbar of Google Chrome. by clicking the wrench icon <img src="images/toolsmenu.gif" width="29" height="29" alt="" style="margin-top:0"> and choosing <b>Tools > Extensions</b>. + (On Mac, use <b>Window > Extensions</b>.) </li> <li> @@ -655,7 +656,7 @@ If you don't feel like reading, try these: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/history.html b/chrome/common/extensions/docs/history.html index e6be466..ce1c49e 100644 --- a/chrome/common/extensions/docs/history.html +++ b/chrome/common/extensions/docs/history.html @@ -3150,7 +3150,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/hosting.html b/chrome/common/extensions/docs/hosting.html index 0a688fb..e852619 100644 --- a/chrome/common/extensions/docs/hosting.html +++ b/chrome/common/extensions/docs/hosting.html @@ -560,7 +560,7 @@ or try hosting the <code>.crx</code> file at another server. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/i18n-messages.html b/chrome/common/extensions/docs/i18n-messages.html index 3c85b6b..cf07efd 100644 --- a/chrome/common/extensions/docs/i18n-messages.html +++ b/chrome/common/extensions/docs/i18n-messages.html @@ -814,7 +814,7 @@ because its value is obvious from the "content" field. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/i18n.html b/chrome/common/extensions/docs/i18n.html index d5e3bb9..39d0f83 100644 --- a/chrome/common/extensions/docs/i18n.html +++ b/chrome/common/extensions/docs/i18n.html @@ -1421,7 +1421,7 @@ For details on calling <code>getAcceptLanguages()</code>, see the <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/idle.html b/chrome/common/extensions/docs/idle.html index 1ab1b64..6b3aa54 100644 --- a/chrome/common/extensions/docs/idle.html +++ b/chrome/common/extensions/docs/idle.html @@ -713,7 +713,7 @@ For example: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/images/perms-hw1.png b/chrome/common/extensions/docs/images/perms-hw1.png Binary files differindex 224bd2d..eb6a79e 100644 --- a/chrome/common/extensions/docs/images/perms-hw1.png +++ b/chrome/common/extensions/docs/images/perms-hw1.png diff --git a/chrome/common/extensions/docs/images/perms-hw2.png b/chrome/common/extensions/docs/images/perms-hw2.png Binary files differindex 644a276..8fd5c47 100644 --- a/chrome/common/extensions/docs/images/perms-hw2.png +++ b/chrome/common/extensions/docs/images/perms-hw2.png diff --git a/chrome/common/extensions/docs/index.html b/chrome/common/extensions/docs/index.html index 54cd32f..7e89cfc 100644 --- a/chrome/common/extensions/docs/index.html +++ b/chrome/common/extensions/docs/index.html @@ -582,7 +582,7 @@ For more information, see the <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/management.html b/chrome/common/extensions/docs/management.html index 3bb1d52..7efee0e 100644 --- a/chrome/common/extensions/docs/management.html +++ b/chrome/common/extensions/docs/management.html @@ -384,7 +384,7 @@ For example:</p> <div class="description"> <p class="todo" style="display: none; ">Undocumented.</p> - <p>Return information about the installed extension with the given ID.</p> + <p>Return information about the installed extension or app that has the given ID.</p> <!-- PARAMETERS --> <h4>Parameters</h4> @@ -2661,7 +2661,7 @@ For example:</p> <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/manifest.html b/chrome/common/extensions/docs/manifest.html index 658290f..c043355 100644 --- a/chrome/common/extensions/docs/manifest.html +++ b/chrome/common/extensions/docs/manifest.html @@ -441,9 +441,8 @@ see <a href="i18n.html">Internationalization</a> for details. The URL of the homepage for this extension. The extensions management page (chrome://extensions) will contain a link to this URL. This field is particularly useful if you <a href="hosting.html">host the extension on your own site</a>. If you distribute your -extension using the <a href="https://chrome.google.com/extensions">Extensions Gallery</a>, -the homepage URL defaults to the extension's own gallery page. -<!-- PENDING: check whether the same is true of the store --> +extension using the <a href="https://chrome.google.com/extensions">Extensions Gallery</a> or <a href="https://chrome.google.com/webstore">Chrome Web Store</a>, +the homepage URL defaults to the extension's own page. </p> <h3 id="icons">icons</h3> @@ -950,7 +949,7 @@ For more information, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/match_patterns.html b/chrome/common/extensions/docs/match_patterns.html index ddbc56b..c9aa23c 100644 --- a/chrome/common/extensions/docs/match_patterns.html +++ b/chrome/common/extensions/docs/match_patterns.html @@ -702,7 +702,7 @@ Here are some examples of <em>invalid</em> pattern matches: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/messaging.html b/chrome/common/extensions/docs/messaging.html index 19e683d..4d7d884 100644 --- a/chrome/common/extensions/docs/messaging.html +++ b/chrome/common/extensions/docs/messaging.html @@ -768,7 +768,7 @@ For more examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/notifications.html b/chrome/common/extensions/docs/notifications.html index 82c5e07..3afbd73 100644 --- a/chrome/common/extensions/docs/notifications.html +++ b/chrome/common/extensions/docs/notifications.html @@ -609,7 +609,7 @@ see the <a href="http://dev.chromium.org/developers/design-documents/desktop-not <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/npapi.html b/chrome/common/extensions/docs/npapi.html index 8aad2ea..904bff2 100644 --- a/chrome/common/extensions/docs/npapi.html +++ b/chrome/common/extensions/docs/npapi.html @@ -567,7 +567,7 @@ avoid making your NPAPI plugin public whenever possible. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/omnibox.html b/chrome/common/extensions/docs/omnibox.html index 6f7afa7..24fad5e 100644 --- a/chrome/common/extensions/docs/omnibox.html +++ b/chrome/common/extensions/docs/omnibox.html @@ -1217,7 +1217,7 @@ You can find samples of this API on the <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/options.html b/chrome/common/extensions/docs/options.html index 982032f..701630a 100644 --- a/chrome/common/extensions/docs/options.html +++ b/chrome/common/extensions/docs/options.html @@ -558,7 +558,7 @@ Favorite Color: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/override.html b/chrome/common/extensions/docs/override.html index bfa7e7d..6d03561 100644 --- a/chrome/common/extensions/docs/override.html +++ b/chrome/common/extensions/docs/override.html @@ -663,7 +663,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/overview.html b/chrome/common/extensions/docs/overview.html index 49e7d8c..2d5760f 100644 --- a/chrome/common/extensions/docs/overview.html +++ b/chrome/common/extensions/docs/overview.html @@ -937,7 +937,7 @@ Here are some ideas for where to go next: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/packaging.html b/chrome/common/extensions/docs/packaging.html index ccfa542..4939c6c 100644 --- a/chrome/common/extensions/docs/packaging.html +++ b/chrome/common/extensions/docs/packaging.html @@ -649,7 +649,7 @@ to create <code>.crx</code> files, see <a href="crx.html">CRX package format</a> <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/pageAction.html b/chrome/common/extensions/docs/pageAction.html index 36d96af..b086ab8 100644 --- a/chrome/common/extensions/docs/pageAction.html +++ b/chrome/common/extensions/docs/pageAction.html @@ -427,6 +427,15 @@ follow these guidelines:</p> for features that make sense for most pages. Use <a href="browserAction.html">browser actions</a> instead. + </li><li><b>Do</b> use icons + that are slightly lighter weight + than <a href="browserAction.html#icon">browser action icons</a>. + Most icons that Chrome displays + in the location bar + are smaller than 19 pixels. + If the edge pixels are used, + they are usually only used + for a faint shadow. </li><li><b>Don't</b> constantly animate your icon. That's just annoying. </li></ul> @@ -1655,7 +1664,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/permission_warnings.html b/chrome/common/extensions/docs/permission_warnings.html index eb062e3..1c6ed92 100644 --- a/chrome/common/extensions/docs/permission_warnings.html +++ b/chrome/common/extensions/docs/permission_warnings.html @@ -326,21 +326,9 @@ <div id="static"><div id="pageData-name" class="pageData">Permission Warnings</div> <div id="pageData-showTOC" class="pageData">true</div> -<!-- -NOTE: When this doc is updated, the online help should also be updated: -http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=186213 - -We should periodically look at -http://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/generated_resources.grd?view=markup -to make sure that we're covering all messages. Search for -IDS_EXTENSION_PROMPT_WARNING -(e.g. IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY). ---> - <p> To use most chrome.* APIs and extension capabilities, -your extension must declare its intent in the -<a href="manifest.html">manifest</a>, +your extension must declare its intent in the manifest, often in the "permissions" field. Some of these declarations result in a warning when @@ -364,7 +352,7 @@ Here's a typical dialog that a user might see when installing an extension: </p> -<img src="images/perms-hw1.png" width="410" height="193" alt="Permission warning: 'It can access: Your data on api.flickr.com'"> +<img src="images/perms-hw1.png" width="387" height="162" alt="Permission warning: 'This extension can access: Your data on api.flickr.com'"> <p> The warning about access to data on api.flickr.com @@ -415,7 +403,7 @@ Clicking the Re-enable button brings up the following warning: </p> -<img src="images/perms-hw2.png" width="412" height="220" alt="Permission warning: 'It can access: Your data on api.flickr.com and flickr.com; Your browsing history'"> +<img src="images/perms-hw2.png" width="387" height="190" alt="Permission warning: 'This extension can access: Your data on api.flickr.com and flickr.com; Your browsing history'"> <h2 id="warnings"> Warnings and their triggers </h2> @@ -426,7 +414,8 @@ results in the seemingly unrelated warning that the extension can access your browsing history. The reason for the warning is that although the <code>chrome.tabs</code> API -might be used only to open new tabs, +might be used only to open new tabs +(<a href="tabs.html#method-create"><code>chrome.tabs.create()</code></a>), it can also be used to see the URL that's associated with every newly opened tab (using their <a href="tabs.html#type-Tab">Tab</a> objects). @@ -436,14 +425,13 @@ with every newly opened tab <b>Note:</b> As of Google Chrome 7, you no longer need to specify the "tabs" permission -just to call <code>chrome.tabs.create()</code> -or <code>chrome.tabs.update()</code>. +just to call <code>chrome.tabs.create()</code>. </p> <p> The following table lists the warning messages that users can see, -along with the manifest entries +along with the <a href="manifest.html">manifest</a> entries that trigger them. </p> @@ -455,7 +443,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_FULL_ACCESS --> All data on your computer and the websites you visit </td> <td> @@ -469,7 +457,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_BOOKMARKS --> Your bookmarks </td> <td> @@ -483,7 +471,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_BROWSING_HISTORY --> Your browsing history </td> <td> @@ -510,7 +498,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_ALL_HOSTS --> Your data on all websites </td> <td> @@ -543,8 +531,8 @@ that trigger them. </tr> <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_?_HOST --> - <!-- IDS_EXTENSION_PROMPT_WARNING_4_OR_MORE_HOSTS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_?_HOST --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_4_OR_MORE_HOSTS --> Your data on <em>{list of websites}</em> </td> <td> @@ -577,29 +565,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT --> - Your list of installed apps, extensions, and themes - <br> - <span style="font-weight:normal; font-style:italic">or</span> - <br> - Manage themes, extensions, and apps - - <!-- PENDING: remove "Manage...apps" alternative message - once the fix is out on stable channel --> - <!-- See http://crbug.com/67859 --> - </td> - <td> - "management" permission - </td> - <td> - The "management" permission is required by the - <a href="management.html"><code>chrome.management</code></a> module. - </td> -</tr> - -<tr> - <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_GEOLOCATION --> Your physical location </td> <td> @@ -825,7 +791,7 @@ by clicking the <b>chrome://extensions</b> page's <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/samples.html b/chrome/common/extensions/docs/samples.html index f57fa01..85ae945 100644 --- a/chrome/common/extensions/docs/samples.html +++ b/chrome/common/extensions/docs/samples.html @@ -303,7 +303,7 @@ <!-- STATIC CONTENT PLACEHOLDER --> <div id="static"><link rel="stylesheet" href="css/samples.css"> -<script>var search_data = {"0262260daf0c8f7b28feff2ef23b05e7abf9d1e0":"A BROWSER ACTION WHICH CHANGES ITS ICON WHEN CLICKED. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETICON","ea2894c41cb8e80a4433a3e6c5772dadce9be90d":"A BROWSER ACTION WITH A POPUP THAT CHANGES THE PAGE COLOR. BROWSER_ACTION POPUP TABS CHROME.TABS.EXECUTESCRIPT","ede3c47b7757245be42ec33fd5ca63df4b490066":"A BROWSER ACTION WITH NO ICON THAT MAKES THE PAGE RED BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.TABS.EXECUTESCRIPT","fbf0aa1a09a15ff8cc4fc7de4fd176d6c663d07a":"ACCEPTLANGUAGE RETURNS ACCEPT LANGUAGES OF THE BROWSER BROWSER_ACTION POPUP CHROME.I18N.GETACCEPTLANGUAGES CHROME.I18N.GETMESSAGE","9a6e4ec46997fb92b324974afa08a3d007e2537f":"ANIMATED PAGE ACTION THIS EXTENSION ADDS AN ANIMATED BROWSER ACTION TO THE TOOLBAR. BACKGROUND_PAGE PAGE_ACTION TABS CHROME.PAGEACTION.HIDE CHROME.PAGEACTION.ONCLICKED CHROME.PAGEACTION.SETICON CHROME.PAGEACTION.SETTITLE CHROME.PAGEACTION.SHOW CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED","9747e3d6a3eab39bc7c17f11a80573c62d44c7e5":"BLANK NEW TAB PAGE CHROME_URL_OVERRIDES","903e7277139e1e6caec123d3319cab295d8d1b3a":"CHROME SOUNDS ENJOY A MORE MAGICAL AND IMMERSIVE EXPERIENCE WHEN BROWSING THE WEB USING THE POWER OF SOUND. BACKGROUND_PAGE BOOKMARKS OPTIONS_PAGE TABS CHROME.BOOKMARKS.ONCREATED CHROME.BOOKMARKS.ONMOVED CHROME.BOOKMARKS.ONREMOVED CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.TABS.GET CHROME.TABS.ONATTACHED CHROME.TABS.ONCREATED CHROME.TABS.ONDETACHED CHROME.TABS.ONMOVED CHROME.TABS.ONREMOVED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.WINDOWS.ONCREATED CHROME.WINDOWS.ONFOCUSCHANGED CHROME.WINDOWS.ONREMOVED","0e790e035a4a00b6f1def5ef9a7d7be1bce95ab5":"CHROMIUM BUILDBOT MONITOR DISPLAYS THE STATUS OF THE CHROMIUM BUILDBOT IN THE TOOLBAR. CLICK TO SEE MORE DETAILED STATUS IN A POPUP. BACKGROUND_PAGE BROWSER_ACTION NOTIFICATIONS OPTIONS_PAGE POPUP CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.GETURL","ac31228200b41a87982e386cc90d3a6eee4ad885":"CHROMIUM SEARCH ADD SUPPORT TO THE OMNIBOX TO SEARCH THE CHROMIUM SOURCE CODE. BACKGROUND_PAGE TABS CHROME.OMNIBOX.ONINPUTCANCELLED CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED CHROME.OMNIBOX.ONINPUTSTARTED CHROME.OMNIBOX.SETDEFAULTSUGGESTION CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.UPDATE","7d5d6cf195bc25480256618e360aa38c6e6fba82":"CLD DISPLAYS THE LANGUAGE OF A TAB BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.SETBADGETEXT CHROME.TABS.DETECTLANGUAGE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED","5d81304a17cf7ac2887484f730fbd2b01e51e166":"CONTEXT MENUS SAMPLE SHOWS SOME OF THE FEATURES OF THE CONTEXT MENUS API BACKGROUND_PAGE CONTEXTMENUS CHROME.CONTEXTMENUS.CREATE","4daa6becd0899a54776d9cf7f09613ed1a9f4d77":"COOKIE API TEST EXTENSION TESTING COOKIE API BACKGROUND_PAGE BROWSER_ACTION COOKIES TABS CHROME.BROWSERACTION.ONCLICKED CHROME.COOKIES.GET CHROME.COOKIES.GETALL CHROME.COOKIES.ONCHANGED CHROME.COOKIES.REMOVE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL","6871d09f4a96bf9d4b6cc724d00e909cee0f3902":"CROSS-DOMAIN XMLHTTPREQUEST FROM A CONTENT SCRIPT DEMONSTRATES A METHOD TO MAKE A CROSS-DOMAIN XMLHTTPREQUEST FETCH FROM A CONTENT SCRIPT. THIS EXTENSION FETCHES THE CURRENT TRENDING TOPICS FROM TWITTER AND INSERTS THEM IN AN OVERLAY AT THE TOP OF GOOGLE NEWS. VISIT HTTP://NEWS.GOOGLE.COM TO TEST THIS EXTENSION. BACKGROUND_PAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST","028eb5364924344029bcbe1d527f132fc72b34e5":"EMAIL THIS PAGE (BY GOOGLE) THIS EXTENSION ADDS AN EMAIL BUTTON TO THE TOOLBAR WHICH ALLOWS YOU TO EMAIL THE PAGE LINK USING YOUR DEFAULT MAIL CLIENT OR GMAIL. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.CONNECT CHROME.EXTENSION.ONCONNECT CHROME.TABS.CREATE CHROME.TABS.EXECUTESCRIPT CHROME.TABS.UPDATE","763a08e9b06595d785568a8d392b95a2f3700258":"EVENT TRACKING WITH GOOGLE ANALYTICS A SAMPLE EXTENSION WHICH USES GOOGLE ANALYTICS TO TRACK USAGE. BACKGROUND_PAGE BROWSER_ACTION POPUP","e3df888a89e35bdeb9c8bc8d03be5e1851b97c68":"EXTENSION DOCS SEARCH SEARCH THE CHROME EXTENSIONS DOCUMENTATION. TO USE, TYPE CRDOC PLUS A SEARCH TERM INTO THE OMNIBOX. BACKGROUND_PAGE TABS CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.ONREMOVED CHROME.TABS.UPDATE","8b0dd31216235941bdd8eb33fda915ef5cf79a82":"GOOGLE CALENDAR CHECKER (BY GOOGLE) QUICKLY SEE THE TIME UNTIL YOUR NEXT MEETING FROM ANY OF YOUR CALENDARS. CLICK ON THE BUTTON TO BE TAKEN TO YOUR CALENDAR. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETICON CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.ONUPDATED CHROME.TABS.UPDATE","4e35caa9742fb82dbd628892d23a781614f6eff6":"GOOGLE DOCUMENT LIST VIEWER DEMONSTRATES HOW TO USE OAUTH TO CONNECT THE GOOGLE DOCUMENTS LIST DATA API. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.BROWSERACTION.SETBADGETEXT CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","bb57f7a0132cbeb36ad7e7bb0ab75c21704234ca":"GOOGLE MAIL CHECKER DISPLAYS THE NUMBER OF UNREAD MESSAGES IN YOUR GOOGLE MAIL INBOX. YOU CAN ALSO CLICK THE BUTTON TO OPEN YOUR INBOX. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETICON CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.ONUPDATED CHROME.TABS.UPDATE","1682e05ea9a1bde985123b04f6f8ac50a8a64033":"GOOGLE WAVE NOTIFIER FIND OUT WHEN YOU HAVE NEW WAVES AND PREVIEW THEM FAST. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","14b9651fda4e57b2a5914ba73a779812201b750a":"HELLO WORLD THE FIRST EXTENSION THAT I MADE. BROWSER_ACTION POPUP","2020d72f2577f53caf8e94e3dbac0fb849ceaa4d":"IDLE - SIMPLE EXAMPLE DEMONSTRATES THE IDLE API BACKGROUND_PAGE BROWSER_ACTION IDLE CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.IDLE.ONSTATECHANGED CHROME.IDLE.QUERYSTATE","0ea1588bd07b20338fc21f725de1542a5fdf9726":"IGOOGLE NEW TAB PAGE CHROME_URL_OVERRIDES","646325c25f572a1d15edc73d057f821d847a4fbe":"IMAGEINFO GET IMAGE INFO FOR IMAGES, INCLUDING EXIF DATA BACKGROUND_PAGE CONTEXTMENUS TABS CHROME.CONTEXTMENUS.CREATE CHROME.TABS.GET CHROME.TABS.GETCURRENT CHROME.WINDOWS.CREATE CHROME.WINDOWS.UPDATE","ec97ec20ca2f095d081e39f1565fc12af09ef067":"MAPPY FINDS ADDRESSES IN THE WEB PAGE YOURE ON AND POPS UP A MAP WINDOW. BACKGROUND_PAGE PAGE_ACTION POPUP TABS CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.PAGEACTION.HIDE CHROME.PAGEACTION.SETTITLE CHROME.PAGEACTION.SHOW CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.TABS.SENDREQUEST","b2f5f8a790e16f091a7e4e0a39b2d0a6d32e3a6d":"MERGE WINDOWS MERGES ALL OF THE BROWSERS WINDOWS INTO THE CURRENT WINDOW BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.MOVE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT","51a83d2ba3a32e3ff1bdb624d4e18ccec4c4038e":"MESSAGE TIMER TIMES HOW LONG IT TAKES TO SEND A MESSAGE TO A CONTENT SCRIPT AND BACK. BROWSER_ACTION POPUP TABS CHROME.EXTENSION.ONCONNECT CHROME.EXTENSION.ONREQUEST CHROME.TABS.CONNECT CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.SENDREQUEST","4f6785ec4f937add6728615682dd37c9a42d9548":"MY BOOKMARKS A BROWSER ACTION WITH A POPUP DUMP OF ALL BOOKMARKS, INCLUDING SEARCH, ADD, EDIT AND DELETE. BOOKMARKS BROWSER_ACTION POPUP TABS CHROME.BOOKMARKS.CREATE CHROME.BOOKMARKS.GET CHROME.BOOKMARKS.GETTREE CHROME.BOOKMARKS.REMOVE CHROME.BOOKMARKS.UPDATE CHROME.TABS.CREATE","597015d3bcce3da693b02314afd607bec4f55291":"NEWS READER DISPLAYS THE FIRST 5 ITEMS FROM THE GOOGLE NEWS - TOP NEWS RSS FEED IN A POPUP. BROWSER_ACTION POPUP TABS CHROME.TABS.CREATE","6444e5c8ae112a6a433909c5e770669cd16e2e5f":"NEWS READER DISPLAYS THE FIRST 5 ITEMS FROM THE GOOGLE NEWS - TOP NEWS RSS FEED IN A POPUP. BROWSER_ACTION POPUP TABS CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE","3aea027164cb9b732ba4a8c51cb93708891726ef":"NEWS READER (BY GOOGLE) DISPLAYS THE LATEST STORIES FROM GOOGLE NEWS IN A POPUP. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.EXTENSION.GETURL CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE","f799e26ceef2367cf836f24bcb47df4398b0df58":"NOTIFICATION DEMO SHOWS OFF DESKTOP NOTIFICATIONS, WHICH ARE TOAST WINDOWS THAT POP UP ON THE DESKTOP. BACKGROUND_PAGE NOTIFICATIONS OPTIONS_PAGE TABS CHROME.TABS.CREATE","e787b322bddbc6289bb31b7d7550b1bf6456a80b":"OMNIBOX EXAMPLE TO USE, TYPE OMNIX PLUS A SEARCH TERM INTO THE OMNIBOX. BACKGROUND_PAGE CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED","8d0a50b57c26bb498be592e871001ffed91541b4":"PAGE ACTION BY CONTENT SHOWS A PAGE ACTION FOR HTML PAGES CONTAINING THE WORD SANDWICH BACKGROUND_PAGE PAGE_ACTION CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.PAGEACTION.SHOW","80b86ccc6e8520660fa591caa565826f0ed1b12c":"PAGE ACTION BY URL SHOWS A PAGE ACTION FOR URLS WHICH HAVE THE LETTER G IN THEM. BACKGROUND_PAGE PAGE_ACTION TABS CHROME.PAGEACTION.SHOW CHROME.TABS.ONUPDATED","d74c3c18a1c1dd18b035149105a306f837c8823e":"PAGE BENCHMARKER CHROMIUM PAGE BENCHMARKER. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.CONNECT CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETEXTENSIONTABS CHROME.EXTENSION.GETURL CHROME.EXTENSION.ONCONNECT CHROME.TABS.CREATE CHROME.TABS.EXECUTESCRIPT CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.GETSELECTED CHROME.TABS.REMOVE CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETCURRENT","e6ae17ab4ccfd7e059c8c01f25760ca5d894c7fd":"PRINT THIS PAGE ADDS A PRINT BUTTON TO THE BROWSER. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.TABS.UPDATE","beff6ecd9677dea0a7c648c5042165b48bb66f09":"PROCESS MONITOR ADDS A BROWSER ACTION THAT MONITORS RESOURCE USAGE OF ALL BROWSER PROCESSES. BROWSER_ACTION EXPERIMENTAL POPUP TABS CHROME.EXPERIMENTAL.PROCESSES.ONUPDATED","56a8d2ac24ca7bba78fd88ad57f43fc13c784497":"SAMPLE - OAUTH CONTACTS USES OAUTH TO CONNECT TO GOOGLES CONTACTS SERVICE AND DISPLAY A LIST OF YOUR CONTACTS. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETICON CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","38f6e1e17756ede38b1364c7114a738ca717dcbb":"SANDWICHBAR SHOWS AN INFOBAR ON PAGES WHICH CONTAIN THE WORD SANDWICH BACKGROUND_PAGE EXPERIMENTAL CHROME.EXPERIMENTAL.INFOBARS.SHOW CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST","fc89b35755483af30b66cd72cefa34a43a3e8312":"SHOW TABS IN PROCESS ADDS A BROWSER ACTION SHOWING WHICH TABS SHARE THE CURRENT TABS PROCESS. BROWSER_ACTION EXPERIMENTAL POPUP TABS CHROME.EXPERIMENTAL.PROCESSES.GETPROCESSIDFORTAB CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT CHROME.WINDOWS.UPDATE","230463f2d5c3d4d0ca13c230e1f00f2aae0a8a64":"TAB INSPECTOR UTILITY FOR WORKING WITH THE EXTENSION TABS API BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.GETSELECTED CHROME.TABS.MOVE CHROME.TABS.ONATTACHED CHROME.TABS.ONCREATED CHROME.TABS.ONDETACHED CHROME.TABS.ONMOVED CHROME.TABS.ONREMOVED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE CHROME.TABS.UPDATE CHROME.WINDOWS.CREATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT CHROME.WINDOWS.GETLASTFOCUSED CHROME.WINDOWS.ONCREATED CHROME.WINDOWS.ONFOCUSCHANGED CHROME.WINDOWS.ONREMOVED CHROME.WINDOWS.REMOVE CHROME.WINDOWS.UPDATE","e1697cacebad05218798bf3e8a0f724517f0e8c3":"TEST SCREENSHOT EXTENSION DEMONSTRATE SCREENSHOT FUNCTIONALITY IN THE CHROME.TABS API. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETURL CHROME.EXTENSION.GETVIEWS CHROME.TABS.CAPTUREVISIBLETAB CHROME.TABS.CREATE CHROME.TABS.ONUPDATED","b3de91ab04b7d7a2670ca7ee9d740eb42cead0b6":"TYPED URL HISTORY READS YOUR HISTORY, AND SHOWS THE TOP TEN PAGES YOU GO TO BY TYPING THE URL. BROWSER_ACTION HISTORY TABS CHROME.HISTORY.GETVISITS CHROME.HISTORY.SEARCH CHROME.TABS.CREATE"}</script> +<script>var search_data = {"0262260daf0c8f7b28feff2ef23b05e7abf9d1e0":"A BROWSER ACTION WHICH CHANGES ITS ICON WHEN CLICKED. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETICON","ea2894c41cb8e80a4433a3e6c5772dadce9be90d":"A BROWSER ACTION WITH A POPUP THAT CHANGES THE PAGE COLOR. BROWSER_ACTION POPUP TABS CHROME.TABS.EXECUTESCRIPT","ede3c47b7757245be42ec33fd5ca63df4b490066":"A BROWSER ACTION WITH NO ICON THAT MAKES THE PAGE RED BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.TABS.EXECUTESCRIPT","fbf0aa1a09a15ff8cc4fc7de4fd176d6c663d07a":"ACCEPTLANGUAGE RETURNS ACCEPT LANGUAGES OF THE BROWSER BROWSER_ACTION POPUP CHROME.I18N.GETACCEPTLANGUAGES CHROME.I18N.GETMESSAGE","9a6e4ec46997fb92b324974afa08a3d007e2537f":"ANIMATED PAGE ACTION THIS EXTENSION ADDS AN ANIMATED BROWSER ACTION TO THE TOOLBAR. BACKGROUND_PAGE PAGE_ACTION TABS CHROME.PAGEACTION.HIDE CHROME.PAGEACTION.ONCLICKED CHROME.PAGEACTION.SETICON CHROME.PAGEACTION.SETTITLE CHROME.PAGEACTION.SHOW CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED","a1f7cf79dd555b04fa8d603247a040e644996293":"APP LAUNCHER BROWSER_ACTION MANAGEMENT CHROME.EXTENSION.GETURL CHROME.MANAGEMENT.GET CHROME.MANAGEMENT.GETALL CHROME.MANAGEMENT.LAUNCHAPP CHROME.TABS.CREATE","9747e3d6a3eab39bc7c17f11a80573c62d44c7e5":"BLANK NEW TAB PAGE CHROME_URL_OVERRIDES","903e7277139e1e6caec123d3319cab295d8d1b3a":"CHROME SOUNDS ENJOY A MORE MAGICAL AND IMMERSIVE EXPERIENCE WHEN BROWSING THE WEB USING THE POWER OF SOUND. BACKGROUND_PAGE BOOKMARKS OPTIONS_PAGE TABS CHROME.BOOKMARKS.ONCREATED CHROME.BOOKMARKS.ONMOVED CHROME.BOOKMARKS.ONREMOVED CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.TABS.GET CHROME.TABS.ONATTACHED CHROME.TABS.ONCREATED CHROME.TABS.ONDETACHED CHROME.TABS.ONMOVED CHROME.TABS.ONREMOVED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.WINDOWS.ONCREATED CHROME.WINDOWS.ONFOCUSCHANGED CHROME.WINDOWS.ONREMOVED","0e790e035a4a00b6f1def5ef9a7d7be1bce95ab5":"CHROMIUM BUILDBOT MONITOR DISPLAYS THE STATUS OF THE CHROMIUM BUILDBOT IN THE TOOLBAR. CLICK TO SEE MORE DETAILED STATUS IN A POPUP. BACKGROUND_PAGE BROWSER_ACTION NOTIFICATIONS OPTIONS_PAGE POPUP CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.GETURL","ac31228200b41a87982e386cc90d3a6eee4ad885":"CHROMIUM SEARCH ADD SUPPORT TO THE OMNIBOX TO SEARCH THE CHROMIUM SOURCE CODE. BACKGROUND_PAGE TABS CHROME.OMNIBOX.ONINPUTCANCELLED CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED CHROME.OMNIBOX.ONINPUTSTARTED CHROME.OMNIBOX.SETDEFAULTSUGGESTION CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.UPDATE","7d5d6cf195bc25480256618e360aa38c6e6fba82":"CLD DISPLAYS THE LANGUAGE OF A TAB BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.SETBADGETEXT CHROME.TABS.DETECTLANGUAGE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED","5d81304a17cf7ac2887484f730fbd2b01e51e166":"CONTEXT MENUS SAMPLE SHOWS SOME OF THE FEATURES OF THE CONTEXT MENUS API BACKGROUND_PAGE CONTEXTMENUS CHROME.CONTEXTMENUS.CREATE","4daa6becd0899a54776d9cf7f09613ed1a9f4d77":"COOKIE API TEST EXTENSION TESTING COOKIE API BACKGROUND_PAGE BROWSER_ACTION COOKIES TABS CHROME.BROWSERACTION.ONCLICKED CHROME.COOKIES.GET CHROME.COOKIES.GETALL CHROME.COOKIES.ONCHANGED CHROME.COOKIES.REMOVE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL","6871d09f4a96bf9d4b6cc724d00e909cee0f3902":"CROSS-DOMAIN XMLHTTPREQUEST FROM A CONTENT SCRIPT DEMONSTRATES A METHOD TO MAKE A CROSS-DOMAIN XMLHTTPREQUEST FETCH FROM A CONTENT SCRIPT. THIS EXTENSION FETCHES THE CURRENT TRENDING TOPICS FROM TWITTER AND INSERTS THEM IN AN OVERLAY AT THE TOP OF GOOGLE NEWS. VISIT HTTP://NEWS.GOOGLE.COM TO TEST THIS EXTENSION. BACKGROUND_PAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST","028eb5364924344029bcbe1d527f132fc72b34e5":"EMAIL THIS PAGE (BY GOOGLE) THIS EXTENSION ADDS AN EMAIL BUTTON TO THE TOOLBAR WHICH ALLOWS YOU TO EMAIL THE PAGE LINK USING YOUR DEFAULT MAIL CLIENT OR GMAIL. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.CONNECT CHROME.EXTENSION.ONCONNECT CHROME.TABS.CREATE CHROME.TABS.EXECUTESCRIPT CHROME.TABS.UPDATE","763a08e9b06595d785568a8d392b95a2f3700258":"EVENT TRACKING WITH GOOGLE ANALYTICS A SAMPLE EXTENSION WHICH USES GOOGLE ANALYTICS TO TRACK USAGE. BACKGROUND_PAGE BROWSER_ACTION POPUP","e3df888a89e35bdeb9c8bc8d03be5e1851b97c68":"EXTENSION DOCS SEARCH SEARCH THE CHROME EXTENSIONS DOCUMENTATION. TO USE, TYPE CRDOC PLUS A SEARCH TERM INTO THE OMNIBOX. BACKGROUND_PAGE TABS CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.ONREMOVED CHROME.TABS.UPDATE","8b0dd31216235941bdd8eb33fda915ef5cf79a82":"GOOGLE CALENDAR CHECKER (BY GOOGLE) QUICKLY SEE THE TIME UNTIL YOUR NEXT MEETING FROM ANY OF YOUR CALENDARS. CLICK ON THE BUTTON TO BE TAKEN TO YOUR CALENDAR. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETICON CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.ONUPDATED CHROME.TABS.UPDATE","4e35caa9742fb82dbd628892d23a781614f6eff6":"GOOGLE DOCUMENT LIST VIEWER DEMONSTRATES HOW TO USE OAUTH TO CONNECT THE GOOGLE DOCUMENTS LIST DATA API. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.BROWSERACTION.SETBADGETEXT CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","bb57f7a0132cbeb36ad7e7bb0ab75c21704234ca":"GOOGLE MAIL CHECKER DISPLAYS THE NUMBER OF UNREAD MESSAGES IN YOUR GOOGLE MAIL INBOX. YOU CAN ALSO CLICK THE BUTTON TO OPEN YOUR INBOX. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETICON CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.ONUPDATED CHROME.TABS.UPDATE","1682e05ea9a1bde985123b04f6f8ac50a8a64033":"GOOGLE WAVE NOTIFIER FIND OUT WHEN YOU HAVE NEW WAVES AND PREVIEW THEM FAST. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","14b9651fda4e57b2a5914ba73a779812201b750a":"HELLO WORLD THE FIRST EXTENSION THAT I MADE. BROWSER_ACTION POPUP","2020d72f2577f53caf8e94e3dbac0fb849ceaa4d":"IDLE - SIMPLE EXAMPLE DEMONSTRATES THE IDLE API BACKGROUND_PAGE BROWSER_ACTION IDLE CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.IDLE.ONSTATECHANGED CHROME.IDLE.QUERYSTATE","0ea1588bd07b20338fc21f725de1542a5fdf9726":"IGOOGLE NEW TAB PAGE CHROME_URL_OVERRIDES","646325c25f572a1d15edc73d057f821d847a4fbe":"IMAGEINFO GET IMAGE INFO FOR IMAGES, INCLUDING EXIF DATA BACKGROUND_PAGE CONTEXTMENUS TABS CHROME.CONTEXTMENUS.CREATE CHROME.TABS.GET CHROME.TABS.GETCURRENT CHROME.WINDOWS.CREATE CHROME.WINDOWS.UPDATE","ec97ec20ca2f095d081e39f1565fc12af09ef067":"MAPPY FINDS ADDRESSES IN THE WEB PAGE YOURE ON AND POPS UP A MAP WINDOW. BACKGROUND_PAGE PAGE_ACTION POPUP TABS CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.ONREQUEST CHROME.PAGEACTION.HIDE CHROME.PAGEACTION.SETTITLE CHROME.PAGEACTION.SHOW CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.TABS.SENDREQUEST","b2f5f8a790e16f091a7e4e0a39b2d0a6d32e3a6d":"MERGE WINDOWS MERGES ALL OF THE BROWSERS WINDOWS INTO THE CURRENT WINDOW BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.MOVE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT","51a83d2ba3a32e3ff1bdb624d4e18ccec4c4038e":"MESSAGE TIMER TIMES HOW LONG IT TAKES TO SEND A MESSAGE TO A CONTENT SCRIPT AND BACK. BROWSER_ACTION POPUP TABS CHROME.EXTENSION.ONCONNECT CHROME.EXTENSION.ONREQUEST CHROME.TABS.CONNECT CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.SENDREQUEST","4f6785ec4f937add6728615682dd37c9a42d9548":"MY BOOKMARKS A BROWSER ACTION WITH A POPUP DUMP OF ALL BOOKMARKS, INCLUDING SEARCH, ADD, EDIT AND DELETE. BOOKMARKS BROWSER_ACTION POPUP TABS CHROME.BOOKMARKS.CREATE CHROME.BOOKMARKS.GET CHROME.BOOKMARKS.GETTREE CHROME.BOOKMARKS.REMOVE CHROME.BOOKMARKS.UPDATE CHROME.TABS.CREATE","597015d3bcce3da693b02314afd607bec4f55291":"NEWS READER DISPLAYS THE FIRST 5 ITEMS FROM THE GOOGLE NEWS - TOP NEWS RSS FEED IN A POPUP. BROWSER_ACTION POPUP TABS CHROME.TABS.CREATE","6444e5c8ae112a6a433909c5e770669cd16e2e5f":"NEWS READER DISPLAYS THE FIRST 5 ITEMS FROM THE GOOGLE NEWS - TOP NEWS RSS FEED IN A POPUP. BROWSER_ACTION POPUP TABS CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE","3aea027164cb9b732ba4a8c51cb93708891726ef":"NEWS READER (BY GOOGLE) DISPLAYS THE LATEST STORIES FROM GOOGLE NEWS IN A POPUP. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE POPUP TABS CHROME.EXTENSION.GETURL CHROME.I18N.GETMESSAGE CHROME.TABS.CREATE","f799e26ceef2367cf836f24bcb47df4398b0df58":"NOTIFICATION DEMO SHOWS OFF DESKTOP NOTIFICATIONS, WHICH ARE TOAST WINDOWS THAT POP UP ON THE DESKTOP. BACKGROUND_PAGE NOTIFICATIONS OPTIONS_PAGE TABS CHROME.TABS.CREATE","e787b322bddbc6289bb31b7d7550b1bf6456a80b":"OMNIBOX EXAMPLE TO USE, TYPE OMNIX PLUS A SEARCH TERM INTO THE OMNIBOX. BACKGROUND_PAGE CHROME.OMNIBOX.ONINPUTCHANGED CHROME.OMNIBOX.ONINPUTENTERED","8d0a50b57c26bb498be592e871001ffed91541b4":"PAGE ACTION BY CONTENT SHOWS A PAGE ACTION FOR HTML PAGES CONTAINING THE WORD SANDWICH BACKGROUND_PAGE PAGE_ACTION CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST CHROME.PAGEACTION.SHOW","80b86ccc6e8520660fa591caa565826f0ed1b12c":"PAGE ACTION BY URL SHOWS A PAGE ACTION FOR URLS WHICH HAVE THE LETTER G IN THEM. BACKGROUND_PAGE PAGE_ACTION TABS CHROME.PAGEACTION.SHOW CHROME.TABS.ONUPDATED","d74c3c18a1c1dd18b035149105a306f837c8823e":"PAGE BENCHMARKER CHROMIUM PAGE BENCHMARKER. BACKGROUND_PAGE BROWSER_ACTION OPTIONS_PAGE TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETBADGEBACKGROUNDCOLOR CHROME.BROWSERACTION.SETBADGETEXT CHROME.BROWSERACTION.SETTITLE CHROME.EXTENSION.CONNECT CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETEXTENSIONTABS CHROME.EXTENSION.GETURL CHROME.EXTENSION.ONCONNECT CHROME.TABS.CREATE CHROME.TABS.EXECUTESCRIPT CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.GETSELECTED CHROME.TABS.REMOVE CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETCURRENT","e6ae17ab4ccfd7e059c8c01f25760ca5d894c7fd":"PRINT THIS PAGE ADDS A PRINT BUTTON TO THE BROWSER. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.TABS.UPDATE","beff6ecd9677dea0a7c648c5042165b48bb66f09":"PROCESS MONITOR ADDS A BROWSER ACTION THAT MONITORS RESOURCE USAGE OF ALL BROWSER PROCESSES. BROWSER_ACTION EXPERIMENTAL POPUP TABS CHROME.EXPERIMENTAL.PROCESSES.ONUPDATED","56a8d2ac24ca7bba78fd88ad57f43fc13c784497":"SAMPLE - OAUTH CONTACTS USES OAUTH TO CONNECT TO GOOGLES CONTACTS SERVICE AND DISPLAY A LIST OF YOUR CONTACTS. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.BROWSERACTION.SETICON CHROME.EXTENSION.GETBACKGROUNDPAGE CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE","38f6e1e17756ede38b1364c7114a738ca717dcbb":"SANDWICHBAR SHOWS AN INFOBAR ON PAGES WHICH CONTAIN THE WORD SANDWICH BACKGROUND_PAGE EXPERIMENTAL CHROME.EXPERIMENTAL.INFOBARS.SHOW CHROME.EXTENSION.ONREQUEST CHROME.EXTENSION.SENDREQUEST","fc89b35755483af30b66cd72cefa34a43a3e8312":"SHOW TABS IN PROCESS ADDS A BROWSER ACTION SHOWING WHICH TABS SHARE THE CURRENT TABS PROCESS. BROWSER_ACTION EXPERIMENTAL POPUP TABS CHROME.EXPERIMENTAL.PROCESSES.GETPROCESSIDFORTAB CHROME.TABS.GET CHROME.TABS.GETSELECTED CHROME.TABS.UPDATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT CHROME.WINDOWS.UPDATE","230463f2d5c3d4d0ca13c230e1f00f2aae0a8a64":"TAB INSPECTOR UTILITY FOR WORKING WITH THE EXTENSION TABS API BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETURL CHROME.TABS.CREATE CHROME.TABS.GET CHROME.TABS.GETALLINWINDOW CHROME.TABS.GETSELECTED CHROME.TABS.MOVE CHROME.TABS.ONATTACHED CHROME.TABS.ONCREATED CHROME.TABS.ONDETACHED CHROME.TABS.ONMOVED CHROME.TABS.ONREMOVED CHROME.TABS.ONSELECTIONCHANGED CHROME.TABS.ONUPDATED CHROME.TABS.REMOVE CHROME.TABS.UPDATE CHROME.WINDOWS.CREATE CHROME.WINDOWS.GET CHROME.WINDOWS.GETALL CHROME.WINDOWS.GETCURRENT CHROME.WINDOWS.GETLASTFOCUSED CHROME.WINDOWS.ONCREATED CHROME.WINDOWS.ONFOCUSCHANGED CHROME.WINDOWS.ONREMOVED CHROME.WINDOWS.REMOVE CHROME.WINDOWS.UPDATE","e1697cacebad05218798bf3e8a0f724517f0e8c3":"TEST SCREENSHOT EXTENSION DEMONSTRATE SCREENSHOT FUNCTIONALITY IN THE CHROME.TABS API. BACKGROUND_PAGE BROWSER_ACTION TABS CHROME.BROWSERACTION.ONCLICKED CHROME.EXTENSION.GETURL CHROME.EXTENSION.GETVIEWS CHROME.TABS.CAPTUREVISIBLETAB CHROME.TABS.CREATE CHROME.TABS.ONUPDATED","b3de91ab04b7d7a2670ca7ee9d740eb42cead0b6":"TYPED URL HISTORY READS YOUR HISTORY, AND SHOWS THE TOP TEN PAGES YOU GO TO BY TYPING THE URL. BROWSER_ACTION HISTORY TABS CHROME.HISTORY.GETVISITS CHROME.HISTORY.SEARCH CHROME.TABS.CREATE"}</script> <script src="js/sample_search.js"></script> @@ -558,6 +558,51 @@ </ul> </div> <div><a href="examples/api/pageAction/set_icon.zip">Download .zip</a></div> +</div><div class="sample" id="a1f7cf79dd555b04fa8d603247a040e644996293"> + <img class="icon" style="display: none; "> + <img class="icon" src="images/sample-default-icon.png"> + <h2 class="name"> + <a target="_blank" href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/app_launcher/">App Launcher</a> + </h2> + <p class="metadata features">Uses + <span> + <strong>browser_action</strong><span style="display: none; ">, </span> + <span> and</span> + </span><span> + <strong>management</strong><span style="display: none; ">, </span> + <span style="display: none; "> and</span> + </span> + </p> + <p></p> + <div class="apicalls"><strong>Calls:</strong> + <ul> + <li> + <code><a href="extension.html#method-getURL">chrome.extension.getURL</a></code> + </li><li> + <code><a href="management.html#method-get">chrome.management.get</a></code> + </li><li> + <code><a href="management.html#method-getAll">chrome.management.getAll</a></code> + </li><li> + <code><a href="management.html#method-launchApp">chrome.management.launchApp</a></code> + </li><li> + <code><a href="tabs.html#method-create">chrome.tabs.create</a></code> + </li> + </ul> + </div> + <div class="sourcefiles"><strong>Source files:</strong> + <ul> + <li> + <code><a target="_blank" href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json?content-type=text/plain">manifest.json</a></code> + </li><li> + <code><a target="_blank" href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.css?content-type=text/plain">popup.css</a></code> + </li><li> + <code><a target="_blank" href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.html?content-type=text/plain">popup.html</a></code> + </li><li> + <code><a target="_blank" href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/extensions/app_launcher/popup.js?content-type=text/plain">popup.js</a></code> + </li> + </ul> + </div> + <div><a href="examples/extensions/app_launcher.zip">Download .zip</a></div> </div><div class="sample" id="9747e3d6a3eab39bc7c17f11a80573c62d44c7e5"> <img class="icon" style="display: none; "> <img class="icon" src="images/sample-default-icon.png"> @@ -2777,7 +2822,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/samples.json b/chrome/common/extensions/docs/samples.json index 89ffe2e..9e70b0c 100644 --- a/chrome/common/extensions/docs/samples.json +++ b/chrome/common/extensions/docs/samples.json @@ -279,6 +279,34 @@ "zip_path": "examples/api/pageAction/set_icon.zip" }, { + "api_calls": [ + "chrome.extension.getURL", + "chrome.management.get", + "chrome.management.getAll", + "chrome.management.launchApp", + "chrome.tabs.create" + ], + "description": "", + "features": [ + "browser_action", + "management" + ], + "icon": null, + "id": "a1f7cf79dd555b04fa8d603247a040e644996293", + "name": "App Launcher", + "path": "examples/extensions/app_launcher/", + "protocols": [], + "search_string": "APP LAUNCHER BROWSER_ACTION MANAGEMENT CHROME.EXTENSION.GETURL CHROME.MANAGEMENT.GET CHROME.MANAGEMENT.GETALL CHROME.MANAGEMENT.LAUNCHAPP CHROME.TABS.CREATE", + "source_files": [ + "manifest.json", + "popup.css", + "popup.html", + "popup.js" + ], + "source_hash": "4cb1348cfca9c990117d52290f93eb5fc5081bc2", + "zip_path": "examples/extensions/app_launcher.zip" + }, + { "api_calls": [], "description": "", "features": [ @@ -373,7 +401,7 @@ "options.html", "popup.html" ], - "source_hash": "bbd36a3d1d5580b477929d081f5a3a467ad32c63", + "source_hash": "a6ad5cd2a77ef54c0d96b4c5da014cfac34487db", "zip_path": "examples/extensions/buildbot.zip" }, { @@ -404,7 +432,7 @@ "background.html", "manifest.json" ], - "source_hash": "37dd43080094bbe459b0429f1a2b995c33bab7c3", + "source_hash": "027409688a677867e3f2fcbc530ceac904ccedea", "zip_path": "examples/extensions/chrome_search.zip" }, { @@ -913,7 +941,7 @@ "info.html", "manifest.json" ], - "source_hash": "672f49ed8edbe0829c7ba5a1d890b4440b157991", + "source_hash": "c746d9114348f4b414c1ec05e988e2807feb963a", "zip_path": "examples/extensions/imageinfo.zip" }, { @@ -1286,7 +1314,7 @@ "util/sorttable.js", "util/table2CSV.js" ], - "source_hash": "7b6fde63c8dd0e626d176e8ce34ad43649746436", + "source_hash": "7e592dbd3446353f7d98d1760f7cd773035aaaad", "zip_path": "examples/extensions/benchmark.zip" }, { diff --git a/chrome/common/extensions/docs/server/chromeextensionsdocs.py b/chrome/common/extensions/docs/server/chromeextensionsdocs.py index 9edf5cd..a3778f4 100644 --- a/chrome/common/extensions/docs/server/chromeextensionsdocs.py +++ b/chrome/common/extensions/docs/server/chromeextensionsdocs.py @@ -6,6 +6,7 @@ import cgi import logging import re +import os from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app @@ -43,10 +44,10 @@ DEFAULT_CACHE_TIME = 300 class MainPage(webapp.RequestHandler): # get page from memcache, or else fetch it from src def get(self): - path = self.request.path + path = os.path.realpath(os.path.join('/', self.request.path)) # special path to invoke the unit tests # TODO(nickbaum): is there a less ghetto way to invoke the unit test? - if path == "/test/": + if path == "/test": self.unitTest() return # if root, redirect to index.html diff --git a/chrome/common/extensions/docs/static/apps.html b/chrome/common/extensions/docs/static/apps.html index b4696bb..2cf3944 100644 --- a/chrome/common/extensions/docs/static/apps.html +++ b/chrome/common/extensions/docs/static/apps.html @@ -60,7 +60,7 @@ extensions and packaged apps, and packaged apps and hosted apps: <ul> <li> <a href="http://code.google.com/chrome/apps/articles/thinking_in_web_apps.html">Thinking in Web Apps</a> </li> - <li> <a href="http://codesite-staging:29006/chrome/webstore/articles/apps_vs_extensions.html">Extensions, Packaged Apps, and Hosted Apps in the Chrome Web Store</a> </li> + <li> <a href="http://code.google.com/chrome/webstore/articles/apps_vs_extensions.html">Extensions, Packaged Apps, and Hosted Apps in the Chrome Web Store</a> </li> </ul> diff --git a/chrome/common/extensions/docs/static/getstarted.html b/chrome/common/extensions/docs/static/getstarted.html index f1ec273..1121b58 100644 --- a/chrome/common/extensions/docs/static/getstarted.html +++ b/chrome/common/extensions/docs/static/getstarted.html @@ -65,6 +65,7 @@ to the toolbar of Google Chrome. <img src="images/toolsmenu.gif" width="29" height="29" alt="" style="margin-top:0" /> and choosing <b>Tools > Extensions</b>. + (On Mac, use <b>Window > Extensions</b>.) </li> <li> diff --git a/chrome/common/extensions/docs/static/manifest.html b/chrome/common/extensions/docs/static/manifest.html index 3f2f34e..aed4953 100644 --- a/chrome/common/extensions/docs/static/manifest.html +++ b/chrome/common/extensions/docs/static/manifest.html @@ -111,9 +111,8 @@ see <a href="i18n.html">Internationalization</a> for details. The URL of the homepage for this extension. The extensions management page (chrome://extensions) will contain a link to this URL. This field is particularly useful if you <a href="hosting.html">host the extension on your own site</a>. If you distribute your -extension using the <a href="https://chrome.google.com/extensions">Extensions Gallery</a>, -the homepage URL defaults to the extension's own gallery page. -<!-- PENDING: check whether the same is true of the store --> +extension using the <a href="https://chrome.google.com/extensions">Extensions Gallery</a> or <a href="https://chrome.google.com/webstore">Chrome Web Store</a>, +the homepage URL defaults to the extension's own page. </p> <h3 id="icons">icons</h3> diff --git a/chrome/common/extensions/docs/static/pageAction.html b/chrome/common/extensions/docs/static/pageAction.html index 60933ff..3def87e 100644 --- a/chrome/common/extensions/docs/static/pageAction.html +++ b/chrome/common/extensions/docs/static/pageAction.html @@ -95,6 +95,15 @@ follow these guidelines:</p> for features that make sense for most pages. Use <a href="browserAction.html">browser actions</a> instead. + <li><b>Do</b> use icons + that are slightly lighter weight + than <a href="browserAction.html#icon">browser action icons</a>. + Most icons that Chrome displays + in the location bar + are smaller than 19 pixels. + If the edge pixels are used, + they are usually only used + for a faint shadow. <li><b>Don't</b> constantly animate your icon. That's just annoying. </ul> diff --git a/chrome/common/extensions/docs/static/permission_warnings.html b/chrome/common/extensions/docs/static/permission_warnings.html index 4671f58..eea6558 100644 --- a/chrome/common/extensions/docs/static/permission_warnings.html +++ b/chrome/common/extensions/docs/static/permission_warnings.html @@ -1,21 +1,9 @@ <div id="pageData-name" class="pageData">Permission Warnings</div> <div id="pageData-showTOC" class="pageData">true</div> -<!-- -NOTE: When this doc is updated, the online help should also be updated: -http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=186213 - -We should periodically look at -http://src.chromium.org/viewvc/chrome/trunk/src/chrome/app/generated_resources.grd?view=markup -to make sure that we're covering all messages. Search for -IDS_EXTENSION_PROMPT_WARNING -(e.g. IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY). ---> - <p> To use most chrome.* APIs and extension capabilities, -your extension must declare its intent in the -<a href="manifest.html">manifest</a>, +your extension must declare its intent in the manifest, often in the "permissions" field. Some of these declarations result in a warning when @@ -40,8 +28,8 @@ that a user might see when installing an extension: </p> <img src="images/perms-hw1.png" - width="410" height="193" - alt="Permission warning: 'It can access: Your data on api.flickr.com'" + width="387" height="162" + alt="Permission warning: 'This extension can access: Your data on api.flickr.com'" /> <p> @@ -99,8 +87,8 @@ brings up the following warning: </p> <img src="images/perms-hw2.png" - width="412" height="220" - alt="Permission warning: 'It can access: Your data on api.flickr.com and flickr.com; Your browsing history'" + width="387" height="190" + alt="Permission warning: 'This extension can access: Your data on api.flickr.com and flickr.com; Your browsing history'" /> @@ -112,7 +100,8 @@ results in the seemingly unrelated warning that the extension can access your browsing history. The reason for the warning is that although the <code>chrome.tabs</code> API -might be used only to open new tabs, +might be used only to open new tabs +(<a href="tabs.html#method-create"><code>chrome.tabs.create()</code></a>), it can also be used to see the URL that's associated with every newly opened tab (using their <a href="tabs.html#type-Tab">Tab</a> objects). @@ -122,14 +111,13 @@ with every newly opened tab <b>Note:</b> As of Google Chrome 7, you no longer need to specify the "tabs" permission -just to call <code>chrome.tabs.create()</code> -or <code>chrome.tabs.update()</code>. +just to call <code>chrome.tabs.create()</code>. </p> <p> The following table lists the warning messages that users can see, -along with the manifest entries +along with the <a href="manifest.html">manifest</a> entries that trigger them. </p> @@ -141,7 +129,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_FULL_ACCESS --> All data on your computer and the websites you visit </td> <td> @@ -155,7 +143,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_BOOKMARKS --> Your bookmarks </td> <td> @@ -169,7 +157,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_BROWSING_HISTORY --> Your browsing history </td> <td> @@ -196,7 +184,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_ALL_HOSTS --> Your data on all websites </td> <td> @@ -229,8 +217,8 @@ that trigger them. </tr> <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_?_HOST --> - <!-- IDS_EXTENSION_PROMPT_WARNING_4_OR_MORE_HOSTS --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_?_HOST --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_4_OR_MORE_HOSTS --> Your data on <em>{list of websites}</em> </td> <td> @@ -263,29 +251,7 @@ that trigger them. <tr> <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT --> - Your list of installed apps, extensions, and themes - <br /> - <span style="font-weight:normal; font-style:italic">or</span> - <br /> - Manage themes, extensions, and apps - - <!-- PENDING: remove "Manage...apps" alternative message - once the fix is out on stable channel --> - <!-- See http://crbug.com/67859 --> - </td> - <td> - "management" permission - </td> - <td> - The "management" permission is required by the - <a href="management.html"><code>chrome.management</code></a> module. - </td> -</tr> - -<tr> - <td style="font-weight:bold"> - <!-- IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION --> + <!-- IDS_EXTENSION_PROMPT2_WARNING_GEOLOCATION --> Your physical location </td> <td> diff --git a/chrome/common/extensions/docs/static/themes.html b/chrome/common/extensions/docs/static/themes.html index 651a74d..0d04779 100644 --- a/chrome/common/extensions/docs/static/themes.html +++ b/chrome/common/extensions/docs/static/themes.html @@ -66,7 +66,7 @@ file for a theme: Colors are in RGB format. To find the strings you can use within the "colors" field, look for kColor* strings in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. </p> <h3 id="images">images</h3> @@ -75,7 +75,7 @@ look for kColor* strings in Image resources use paths relative to the root of the extension. You can override any of the images that are specified by <code>kThemeableImages</code> in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. Just remove the "IDR_" and convert the remaining characters to lowercase. For example, <code>IDR_THEME_NTP_BACKGROUND</code> @@ -92,7 +92,7 @@ properties such as background alignment, background repeat, and an alternate logo. To see the properties and the values they can have, see -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. <!-- [PENDING: We should flesh this out.] --> </p> @@ -106,7 +106,7 @@ because images don't work across platforms and are brittle in the case of adding new buttons. To find the strings you can use within the "tints" field, look for kTint* strings in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. </p> <p> diff --git a/chrome/common/extensions/docs/static/tut_debugging.html b/chrome/common/extensions/docs/static/tut_debugging.html index 7713e90..20d46c5 100644 --- a/chrome/common/extensions/docs/static/tut_debugging.html +++ b/chrome/common/extensions/docs/static/tut_debugging.html @@ -38,7 +38,7 @@ in the Extensions page. find the extension files and load them. If you don't have a handy copy of the files, extract them from this - <a href="examples/tutorials/getstarted.zip">ZIP file</a>. + <a href="examples/tutorials/getstarted/getstarted.zip">ZIP file</a>. See Getting Started if you need <a href="getstarted.html#load-ext">instructions for loading the extension</a>. diff --git a/chrome/common/extensions/docs/tabs.html b/chrome/common/extensions/docs/tabs.html index 27b26be..cf7d2f6 100644 --- a/chrome/common/extensions/docs/tabs.html +++ b/chrome/common/extensions/docs/tabs.html @@ -7373,7 +7373,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/template/api_template.html b/chrome/common/extensions/docs/template/api_template.html index 1b47011..b495e8d 100644 --- a/chrome/common/extensions/docs/template/api_template.html +++ b/chrome/common/extensions/docs/template/api_template.html @@ -471,7 +471,7 @@ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/themes.html b/chrome/common/extensions/docs/themes.html index 57c8063..b488a9d 100644 --- a/chrome/common/extensions/docs/themes.html +++ b/chrome/common/extensions/docs/themes.html @@ -379,7 +379,7 @@ file for a theme: Colors are in RGB format. To find the strings you can use within the "colors" field, look for kColor* strings in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. </p> <h3 id="images">images</h3> @@ -388,7 +388,7 @@ look for kColor* strings in Image resources use paths relative to the root of the extension. You can override any of the images that are specified by <code>kThemeableImages</code> in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. Just remove the "IDR_" and convert the remaining characters to lowercase. For example, <code>IDR_THEME_NTP_BACKGROUND</code> @@ -405,7 +405,7 @@ properties such as background alignment, background repeat, and an alternate logo. To see the properties and the values they can have, see -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. <!-- [PENDING: We should flesh this out.] --> </p> @@ -419,7 +419,7 @@ because images don't work across platforms and are brittle in the case of adding new buttons. To find the strings you can use within the "tints" field, look for kTint* strings in -<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/themes/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. +<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/browser_theme_provider.cc"><code>browser_theme_provider.cc</code></a>. </p> <p> @@ -627,7 +627,7 @@ Community-written documentation to help you write themes is here: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/tut_analytics.html b/chrome/common/extensions/docs/tut_analytics.html index 4c695ff..d6a070f 100644 --- a/chrome/common/extensions/docs/tut_analytics.html +++ b/chrome/common/extensions/docs/tut_analytics.html @@ -695,7 +695,7 @@ extension.</p> <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/tut_debugging.html b/chrome/common/extensions/docs/tut_debugging.html index 821c8e9..64a4ae1 100644 --- a/chrome/common/extensions/docs/tut_debugging.html +++ b/chrome/common/extensions/docs/tut_debugging.html @@ -368,7 +368,7 @@ in the Extensions page. find the extension files and load them. If you don't have a handy copy of the files, extract them from this - <a href="examples/tutorials/getstarted.zip">ZIP file</a>. + <a href="examples/tutorials/getstarted/getstarted.zip">ZIP file</a>. See Getting Started if you need <a href="getstarted.html#load-ext">instructions for loading the extension</a>. @@ -743,7 +743,7 @@ of Getting Started. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/tut_oauth.html b/chrome/common/extensions/docs/tut_oauth.html index 1d21c96..1783eda 100644 --- a/chrome/common/extensions/docs/tut_oauth.html +++ b/chrome/common/extensions/docs/tut_oauth.html @@ -685,7 +685,7 @@ Sample extensions that use these techniques are available in the Chromium source <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/tutorials.html b/chrome/common/extensions/docs/tutorials.html index 8657aed..b88a9cf 100644 --- a/chrome/common/extensions/docs/tutorials.html +++ b/chrome/common/extensions/docs/tutorials.html @@ -498,7 +498,7 @@ more specialized topics: <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/whats_new.html b/chrome/common/extensions/docs/whats_new.html index 9e2b8ed..79d6835 100644 --- a/chrome/common/extensions/docs/whats_new.html +++ b/chrome/common/extensions/docs/whats_new.html @@ -610,7 +610,7 @@ No API or manifest changes worth noting. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/windows.html b/chrome/common/extensions/docs/windows.html index ad163a2..1332caf 100644 --- a/chrome/common/extensions/docs/windows.html +++ b/chrome/common/extensions/docs/windows.html @@ -616,6 +616,64 @@ For other examples and for help in viewing the source code, see </div><div> <div> <dt> + <var>tabId</var> + <em> + + <!-- TYPE --> + <div style="display:inline"> + ( + <span class="optional">optional</span> + <span class="enum" style="display: none; ">enumerated</span> + <span id="typeTemplate"> + <span style="display: none; "> + <a> Type</a> + </span> + <span> + <span style="display: none; "> + array of <span><span></span></span> + </span> + <span>integer</span> + <span style="display: none; "></span> + </span> + </span> + ) + </div> + + </em> + </dt> + <dd class="todo" style="display: none; "> + Undocumented. + </dd> + <dd>The id of the tab for which you want to adopt to the new window.</dd> + <dd style="display: none; "> + This parameter was added in version + <b><span></span></b>. + You must omit this parameter in earlier versions, + and you may omit it in any version. If you require this + parameter, the manifest key + <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> + can ensure that your extension won't be run in an earlier browser version. + </dd> + + <!-- OBJECT PROPERTIES --> + <dd style="display: none; "> + <dl> + <div> + <div> + </div> + </div> + </dl> + </dd> + + <!-- FUNCTION PARAMETERS --> + <dd style="display: none; "> + <div></div> + </dd> + + </div> + </div><div> + <div> + <dt> <var>left</var> <em> @@ -3668,7 +3726,7 @@ For other examples and for help in viewing the source code, see <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/docs/xhr.html b/chrome/common/extensions/docs/xhr.html index 4710c3e..b76acc5 100644 --- a/chrome/common/extensions/docs/xhr.html +++ b/chrome/common/extensions/docs/xhr.html @@ -628,7 +628,7 @@ prefer HTTPS whenever possible. <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. </p> <p> - ©2011 Google + ©2010 Google </p> <!-- begin analytics --> diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc index c49399a..bdbb33a 100644 --- a/chrome/common/extensions/extension.cc +++ b/chrome/common/extensions/extension.cc @@ -31,7 +31,6 @@ #include "chrome/common/extensions/extension_l10n_util.h" #include "chrome/common/extensions/extension_resource.h" #include "chrome/common/extensions/user_script.h" -#include "chrome/common/notification_service.h" #include "chrome/common/url_constants.h" #include "googleurl/src/url_util.h" #include "grit/chromium_strings.h" @@ -133,7 +132,7 @@ const size_t kNumNonPermissionFunctionNames = // A singleton object containing global data needed by the extension objects. class ExtensionConfig { public: - static ExtensionConfig* GetSingleton() { + static ExtensionConfig* GetInstance() { return Singleton<ExtensionConfig>::get(); } @@ -288,7 +287,7 @@ GURL Extension::GalleryUpdateUrl(bool secure) { // static int Extension::GetPermissionMessageId(const std::string& permission) { - return ExtensionConfig::GetSingleton()->GetPermissionMessageId(permission); + return ExtensionConfig::GetInstance()->GetPermissionMessageId(permission); } std::vector<string16> Extension::GetPermissionMessages() const { @@ -470,7 +469,7 @@ std::string Extension::GenerateIdForPath(const FilePath& path) { return id; } -Extension::HistogramType Extension::GetHistogramType() const { +Extension::Type Extension::GetType() const { if (is_theme()) return TYPE_THEME; if (converted_from_user_script()) @@ -1267,8 +1266,7 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, *error = errors::kInvalidVersion; return false; } - version_.reset( - Version::GetVersionFromString(version_str)); + version_.reset(Version::GetVersionFromString(version_str)); if (!version_.get() || version_->components().size() > 4) { *error = errors::kInvalidVersion; @@ -1742,6 +1740,15 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, if (web_extent().is_empty() || location() == Extension::COMPONENT) { // Check if it's a module permission. If so, enable that permission. if (IsAPIPermission(permission_str)) { + // Only allow the experimental API permission if the command line + // flag is present, or if the extension is a component of Chrome. + if (permission_str == Extension::kExperimentalPermission && + !CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableExperimentalExtensionApis) && + location() != Extension::COMPONENT) { + *error = errors::kExperimentalFlagRequired; + return false; + } api_permissions_.insert(permission_str); continue; } @@ -1781,9 +1788,8 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, } if (source.HasKey(keys::kDefaultLocale)) { - if (!source.GetString(keys::kDefaultLocale, - &default_locale_) || - default_locale_.empty()) { + if (!source.GetString(keys::kDefaultLocale, &default_locale_) || + !l10n_util::IsValidLocaleSyntax(default_locale_)) { *error = errors::kInvalidDefaultLocale; return false; } @@ -1846,6 +1852,59 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key, devtools_url_ = GetResourceURL(devtools_str); } + // Initialize text-to-speech voices (optional). + if (source.HasKey(keys::kTts)) { + DictionaryValue* tts_dict; + if (!source.GetDictionary(keys::kTts, &tts_dict)) { + *error = errors::kInvalidTts; + return false; + } + + if (tts_dict->HasKey(keys::kTtsVoices)) { + ListValue* tts_voices; + if (!tts_dict->GetList(keys::kTtsVoices, &tts_voices)) { + *error = errors::kInvalidTtsVoices; + return false; + } + + for (size_t i = 0; i < tts_voices->GetSize(); i++) { + DictionaryValue* one_tts_voice; + if (!tts_voices->GetDictionary(i, &one_tts_voice)) { + *error = errors::kInvalidTtsVoices; + return false; + } + + TtsVoice voice_data; + if (one_tts_voice->HasKey(keys::kTtsVoicesVoiceName)) { + if (!one_tts_voice->GetString( + keys::kTtsVoicesVoiceName, &voice_data.voice_name)) { + *error = errors::kInvalidTtsVoicesVoiceName; + return false; + } + } + if (one_tts_voice->HasKey(keys::kTtsVoicesLocale)) { + if (!one_tts_voice->GetString( + keys::kTtsVoicesLocale, &voice_data.locale) || + !l10n_util::IsValidLocaleSyntax(voice_data.locale)) { + *error = errors::kInvalidTtsVoicesLocale; + return false; + } + } + if (one_tts_voice->HasKey(keys::kTtsVoicesGender)) { + if (!one_tts_voice->GetString( + keys::kTtsVoicesGender, &voice_data.gender) || + (voice_data.gender != keys::kTtsGenderMale && + voice_data.gender != keys::kTtsGenderFemale)) { + *error = errors::kInvalidTtsVoicesGender; + return false; + } + } + + tts_voices_.push_back(voice_data); + } + } + } + // Initialize incognito behavior. Apps default to split mode, extensions // default to spanning. incognito_split_mode_ = is_app(); @@ -1966,7 +2025,7 @@ static std::string SizeToString(const gfx::Size& max_size) { void Extension::SetScriptingWhitelist( const std::vector<std::string>& whitelist) { ScriptingWhitelist* current_whitelist = - ExtensionConfig::GetSingleton()->whitelist(); + ExtensionConfig::GetInstance()->whitelist(); current_whitelist->clear(); for (ScriptingWhitelist::const_iterator it = whitelist.begin(); it != whitelist.end(); ++it) { @@ -2201,20 +2260,7 @@ bool Extension::HasFullPermissions() const { bool Extension::IsAPIPermission(const std::string& str) const { for (size_t i = 0; i < Extension::kNumPermissions; ++i) { if (str == Extension::kPermissions[i].name) { - // Only allow the experimental API permission if the command line - // flag is present, or if the extension is a component of Chrome. - if (str == Extension::kExperimentalPermission) { - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableExperimentalExtensionApis)) { - return true; - } else if (location() == Extension::COMPONENT) { - return true; - } else { - return false; - } - } else { - return true; - } + return true; } } return false; @@ -2225,7 +2271,7 @@ bool Extension::CanExecuteScriptEverywhere() const { return true; ScriptingWhitelist* whitelist = - ExtensionConfig::GetSingleton()->whitelist(); + ExtensionConfig::GetInstance()->whitelist(); for (ScriptingWhitelist::const_iterator it = whitelist->begin(); it != whitelist->end(); ++it) { @@ -2260,9 +2306,15 @@ UninstalledExtensionInfo::UninstalledExtensionInfo( const Extension& extension) : extension_id(extension.id()), extension_api_permissions(extension.api_permissions()), - is_theme(extension.is_theme()), - is_app(extension.is_app()), - converted_from_user_script(extension.converted_from_user_script()), + extension_type(extension.GetType()), update_url(extension.update_url()) {} UninstalledExtensionInfo::~UninstalledExtensionInfo() {} + + +UnloadedExtensionInfo::UnloadedExtensionInfo( + const Extension* extension, + Reason reason) + : reason(reason), + already_disabled(false), + extension(extension) {} diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h index 0d171d8..4c82fd6 100644 --- a/chrome/common/extensions/extension.h +++ b/chrome/common/extensions/extension.h @@ -83,9 +83,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> { EXTENSION_ICON_BITTY = 16, }; - // Type used for UMA_HISTOGRAM_ENUMERATION about extensions. - // Do not change the order of entries or remove entries in this list. - enum HistogramType { + // Do not change the order of entries or remove entries in this list + // as this is used in UMA_HISTOGRAM_ENUMERATIONs about extensions. + enum Type { TYPE_UNKNOWN = 0, TYPE_EXTENSION, TYPE_THEME, @@ -100,6 +100,12 @@ class Extension : public base::RefCountedThreadSafe<Extension> { bool is_public; // False if only this extension can load this plugin. }; + struct TtsVoice { + std::string voice_name; + std::string locale; + std::string gender; + }; + // A permission is defined by its |name| (what is used in the manifest), // and the |message_id| that's used by install/update UI. struct Permission { @@ -227,8 +233,8 @@ class Extension : public base::RefCountedThreadSafe<Extension> { IsExternalLocation(location); } - // See HistogramType definition above. - HistogramType GetHistogramType() const; + // See Type definition above. + Type GetType() const; // Returns an absolute url to a resource inside of an extension. The // |extension_url| argument should be the url() from an Extension object. The @@ -296,8 +302,8 @@ class Extension : public base::RefCountedThreadSafe<Extension> { // Returns the url prefix for the extension/apps gallery. Can be set via the // --apps-gallery-url switch. The URL returned will not contain a trailing // slash. Do not use this as a prefix/extent for the store. Instead see - // ExtensionsService::GetWebStoreApp or - // ExtensionsService::IsDownloadFromGallery + // ExtensionService::GetWebStoreApp or + // ExtensionService::IsDownloadFromGallery static std::string ChromeStoreLaunchURL(); // Helper function that consolidates the check for whether the script can @@ -428,6 +434,7 @@ class Extension : public base::RefCountedThreadSafe<Extension> { } const std::string omnibox_keyword() const { return omnibox_keyword_; } bool incognito_split_mode() const { return incognito_split_mode_; } + const std::vector<TtsVoice>& tts_voices() const { return tts_voices_; } // App-related. bool is_app() const { return is_app_; } @@ -691,7 +698,10 @@ class Extension : public base::RefCountedThreadSafe<Extension> { // The Omnibox keyword for this extension, or empty if there is none. std::string omnibox_keyword_; - FRIEND_TEST_ALL_PREFIXES(ExtensionsServiceTest, + // List of text-to-speech voices that this extension provides, if any. + std::vector<TtsVoice> tts_voices_; + + FRIEND_TEST_ALL_PREFIXES(ExtensionServiceTest, UpdateExtensionPreservesLocation); FRIEND_TEST_ALL_PREFIXES(ExtensionTest, LoadPageActionHelper); FRIEND_TEST_ALL_PREFIXES(ExtensionTest, InitFromValueInvalid); @@ -730,12 +740,26 @@ struct UninstalledExtensionInfo { std::string extension_id; std::set<std::string> extension_api_permissions; - // TODO(akalin): Once we have a unified ExtensionType, replace the - // below member variables with a member of that type. - bool is_theme; - bool is_app; - bool converted_from_user_script; + Extension::Type extension_type; GURL update_url; }; +struct UnloadedExtensionInfo { + enum Reason { + DISABLE, // The extension is being disabled. + UPDATE, // The extension is being updated to a newer version. + UNINSTALL, // The extension is being uninstalled. + }; + + Reason reason; + + // Was the extension already disabled? + bool already_disabled; + + // The extension being unloaded - this should always be non-NULL. + const Extension* extension; + + UnloadedExtensionInfo(const Extension* extension, Reason reason); +}; + #endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_ diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc index 2e99e2b..dd15afa 100644 --- a/chrome/common/extensions/extension_constants.cc +++ b/chrome/common/extensions/extension_constants.cc @@ -60,6 +60,13 @@ const char* kThemeImages = "images"; const char* kThemeTints = "tints"; const char* kToolstripPath = "path"; const char* kToolstrips = "toolstrips"; +const char* kTts = "tts"; +const char* kTtsGenderFemale = "female"; +const char* kTtsGenderMale = "male"; +const char* kTtsVoices = "voices"; +const char* kTtsVoicesGender = "gender"; +const char* kTtsVoicesLocale = "locale"; +const char* kTtsVoicesVoiceName = "voiceName"; const char* kType = "type"; const char* kUpdateURL = "update_url"; const char* kVersion = "version"; @@ -98,6 +105,9 @@ const char* kDisabledByPolicy = const char* kDevToolsExperimental = "You must request the 'experimental' permission in order to use the" " DevTools API."; +const char* kExperimentalFlagRequired = + "Loading extensions with 'experimental' permission requires" + " --enable-experimental-extension-apis command line flag."; const char* kHostedAppsCannotIncludeExtensionFeatures = "Hosted apps cannot use extension features."; const char* kInvalidAllFrames = @@ -231,6 +241,16 @@ const char* kInvalidToolstrip = "Invalid value for 'toolstrips[*]'"; const char* kInvalidToolstrips = "Invalid value for 'toolstrips'."; +const char* kInvalidTts = + "Invalid value for 'tts'."; +const char* kInvalidTtsVoices = + "Invalid value for 'tts.voices'."; +const char* kInvalidTtsVoicesGender = + "Invalid value for 'tts.voices[*].gender'."; +const char* kInvalidTtsVoicesLocale = + "Invalid value for 'tts.voices[*].locale'."; +const char* kInvalidTtsVoicesVoiceName = + "Invalid value for 'tts.voices[*].voiceName'."; const char* kInvalidUpdateURL = "Invalid value for update url: '[*]'."; const char* kInvalidVersion = diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h index cf09515..7f09630 100644 --- a/chrome/common/extensions/extension_constants.h +++ b/chrome/common/extensions/extension_constants.h @@ -65,6 +65,13 @@ namespace extension_manifest_keys { extern const char* kThemeTints; extern const char* kToolstripPath; extern const char* kToolstrips; + extern const char* kTts; + extern const char* kTtsGenderFemale; + extern const char* kTtsGenderMale; + extern const char* kTtsVoices; + extern const char* kTtsVoicesGender; + extern const char* kTtsVoicesLocale; + extern const char* kTtsVoicesVoiceName; extern const char* kType; extern const char* kUpdateURL; extern const char* kVersion; @@ -92,6 +99,8 @@ namespace extension_manifest_errors { extern const char* kCannotScriptGallery; extern const char* kChromeVersionTooLow; extern const char* kDevToolsExperimental; + extern const char* kDisabledByPolicy; + extern const char* kExperimentalFlagRequired; extern const char* kHostedAppsCannotIncludeExtensionFeatures; extern const char* kInvalidAllFrames; extern const char* kInvalidBackground; @@ -105,7 +114,6 @@ namespace extension_manifest_errors { extern const char* kInvalidCssList; extern const char* kInvalidDefaultLocale; extern const char* kInvalidDescription; - extern const char* kDisabledByPolicy; extern const char* kInvalidDevToolsPage; extern const char* kInvalidGlob; extern const char* kInvalidGlobList; @@ -160,6 +168,11 @@ namespace extension_manifest_errors { extern const char* kInvalidThemeTints; extern const char* kInvalidToolstrip; extern const char* kInvalidToolstrips; + extern const char* kInvalidTts; + extern const char* kInvalidTtsVoices; + extern const char* kInvalidTtsVoicesGender; + extern const char* kInvalidTtsVoicesLocale; + extern const char* kInvalidTtsVoicesVoiceName; extern const char* kInvalidUpdateURL; extern const char* kInvalidVersion; extern const char* kInvalidWebURL; @@ -243,8 +256,7 @@ namespace extension_misc { PROMO_LAUNCH_WEB_STORE, PROMO_CLOSE, PROMO_EXPIRE, - PROMO_SEEN, - PROMO_BUCKET_BOUNDARY + PROMO_BUCKET_BOUNDARY = PROMO_EXPIRE + 1 }; } // extension_misc diff --git a/chrome/common/extensions/extension_file_util.cc b/chrome/common/extensions/extension_file_util.cc index f2350cc..e8636be 100644 --- a/chrome/common/extensions/extension_file_util.cc +++ b/chrome/common/extensions/extension_file_util.cc @@ -77,7 +77,7 @@ void UninstallExtension(const FilePath& extensions_dir, const std::string& id) { // We don't care about the return value. If this fails (and it can, due to // plugins that aren't unloaded yet, it will get cleaned up by - // ExtensionsService::GarbageCollectExtensions). + // ExtensionService::GarbageCollectExtensions). file_util::Delete(extensions_dir.AppendASCII(id), true); // recursive. } diff --git a/chrome/common/extensions/extension_file_util_unittest.cc b/chrome/common/extensions/extension_file_util_unittest.cc index 230712d..3f59da6 100644 --- a/chrome/common/extensions/extension_file_util_unittest.cc +++ b/chrome/common/extensions/extension_file_util_unittest.cc @@ -239,5 +239,5 @@ TEST(ExtensionFileUtil, ExtensionURLToRelativeFilePath) { } // TODO(aa): More tests as motivation allows. Maybe steal some from -// ExtensionsService? Many of them could probably be tested here without the +// ExtensionService? Many of them could probably be tested here without the // MessageLoop shenanigans. diff --git a/chrome/common/extensions/extension_l10n_util.cc b/chrome/common/extensions/extension_l10n_util.cc index 34762fd..994ab83 100644 --- a/chrome/common/extensions/extension_l10n_util.cc +++ b/chrome/common/extensions/extension_l10n_util.cc @@ -167,37 +167,14 @@ bool AddLocale(const std::set<std::string>& chrome_locales, return true; } -std::string NormalizeLocale(const std::string& locale) { - std::string normalized_locale(locale); - std::replace(normalized_locale.begin(), normalized_locale.end(), '-', '_'); - - return normalized_locale; -} - std::string CurrentLocaleOrDefault() { - std::string current_locale = NormalizeLocale(*GetProcessLocale()); + std::string current_locale = l10n_util::NormalizeLocale(*GetProcessLocale()); if (current_locale.empty()) current_locale = "en"; return current_locale; } -void GetParentLocales(const std::string& current_locale, - std::vector<std::string>* parent_locales) { - std::string locale(NormalizeLocale(current_locale)); - - const int kNameCapacity = 256; - char parent[kNameCapacity]; - base::strlcpy(parent, locale.c_str(), kNameCapacity); - parent_locales->push_back(parent); - UErrorCode err = U_ZERO_ERROR; - while (uloc_getParent(parent, parent, kNameCapacity, &err) > 0) { - if (U_FAILURE(err)) - break; - parent_locales->push_back(parent); - } -} - void GetAllLocales(std::set<std::string>* all_locales) { const std::vector<std::string>& available_locales = l10n_util::GetAvailableLocales(); @@ -205,7 +182,7 @@ void GetAllLocales(std::set<std::string>* all_locales) { // I.e. for sr_Cyrl_RS we add sr_Cyrl_RS, sr_Cyrl and sr. for (size_t i = 0; i < available_locales.size(); ++i) { std::vector<std::string> result; - GetParentLocales(available_locales[i], &result); + l10n_util::GetParentLocales(available_locales[i], &result); all_locales->insert(result.begin(), result.end()); } } @@ -240,6 +217,7 @@ bool GetValidLocales(const FilePath& locale_path, return true; } + // Loads contents of the messages file for given locale. If file is not found, // or there was parsing error we return NULL and set |error|. // Caller owns the returned object. @@ -270,7 +248,7 @@ ExtensionMessageBundle* LoadMessageCatalogs( // Order locales to load as current_locale, first_parent, ..., default_locale. std::vector<std::string> all_fallback_locales; if (!application_locale.empty() && application_locale != default_locale) - GetParentLocales(application_locale, &all_fallback_locales); + l10n_util::GetParentLocales(application_locale, &all_fallback_locales); all_fallback_locales.push_back(default_locale); std::vector<linked_ptr<DictionaryValue> > catalogs; diff --git a/chrome/common/extensions/extension_l10n_util.h b/chrome/common/extensions/extension_l10n_util.h index e1fdfa0..57aa68f 100644 --- a/chrome/common/extensions/extension_l10n_util.h +++ b/chrome/common/extensions/extension_l10n_util.h @@ -59,18 +59,9 @@ bool AddLocale(const std::set<std::string>& chrome_locales, std::set<std::string>* valid_locales, std::string* error); -// Converts all - into _, to be consistent with ICU and file system names. -std::string NormalizeLocale(const std::string& locale); - // Returns normalized current locale, or default locale - en_US. std::string CurrentLocaleOrDefault(); -// Produce a vector of parent locales for given locale. -// It includes the current locale in the result. -// sr_Cyrl_RS generates sr_Cyrl_RS, sr_Cyrl and sr. -void GetParentLocales(const std::string& current_locale, - std::vector<std::string>* parent_locales); - // Extends list of Chrome locales to them and their parents, so we can do // proper fallback. void GetAllLocales(std::set<std::string>* all_locales); diff --git a/chrome/common/extensions/extension_l10n_util_unittest.cc b/chrome/common/extensions/extension_l10n_util_unittest.cc index 1487452..0ec7e97 100644 --- a/chrome/common/extensions/extension_l10n_util_unittest.cc +++ b/chrome/common/extensions/extension_l10n_util_unittest.cc @@ -214,17 +214,6 @@ TEST(ExtensionL10nUtil, LoadMessageCatalogsDuplicateKeys) { EXPECT_TRUE(error.empty()); } -TEST(ExtensionL10nUtil, GetParentLocales) { - std::vector<std::string> locales; - const std::string top_locale("sr_Cyrl_RS"); - extension_l10n_util::GetParentLocales(top_locale, &locales); - - ASSERT_EQ(3U, locales.size()); - EXPECT_EQ("sr_Cyrl_RS", locales[0]); - EXPECT_EQ("sr_Cyrl", locales[1]); - EXPECT_EQ("sr", locales[2]); -} - // Caller owns the returned object. ExtensionMessageBundle* CreateManifestBundle() { linked_ptr<DictionaryValue> catalog(new DictionaryValue); diff --git a/chrome/common/extensions/extension_manifests_unittest.cc b/chrome/common/extensions/extension_manifests_unittest.cc index 2132b6c..f7c8f27 100644 --- a/chrome/common/extensions/extension_manifests_unittest.cc +++ b/chrome/common/extensions/extension_manifests_unittest.cc @@ -245,6 +245,15 @@ TEST_F(ExtensionManifestTest, ChromeURLContentScriptInvalid) { errors::kInvalidMatch); } +TEST_F(ExtensionManifestTest, ExperimentalPermission) { + LoadAndExpectError("experimental.json", errors::kExperimentalFlagRequired); + CommandLine old_command_line = *CommandLine::ForCurrentProcess(); + CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kEnableExperimentalExtensionApis); + LoadAndExpectSuccess("experimental.json"); + *CommandLine::ForCurrentProcess() = old_command_line; +} + TEST_F(ExtensionManifestTest, DevToolsExtensions) { LoadAndExpectError("devtools_extension_no_permissions.json", errors::kDevToolsExperimental); @@ -365,3 +374,37 @@ TEST_F(ExtensionManifestTest, DefaultPathForExtent) { EXPECT_TRUE(extension->web_extent().ContainsURL( GURL("http://www.google.com/monkey"))); } + +TEST_F(ExtensionManifestTest, DefaultLocale) { + LoadAndExpectError("default_locale_invalid.json", + extension_manifest_errors::kInvalidDefaultLocale); + + scoped_refptr<Extension> extension( + LoadAndExpectSuccess("default_locale_valid.json")); + EXPECT_EQ("de-AT", extension->default_locale()); +} + +TEST_F(ExtensionManifestTest, TtsProvider) { + LoadAndExpectError("tts_provider_invalid_1.json", + extension_manifest_errors::kInvalidTts); + LoadAndExpectError("tts_provider_invalid_2.json", + extension_manifest_errors::kInvalidTtsVoices); + LoadAndExpectError("tts_provider_invalid_3.json", + extension_manifest_errors::kInvalidTtsVoices); + LoadAndExpectError("tts_provider_invalid_4.json", + extension_manifest_errors::kInvalidTtsVoicesVoiceName); + LoadAndExpectError("tts_provider_invalid_5.json", + extension_manifest_errors::kInvalidTtsVoicesLocale); + LoadAndExpectError("tts_provider_invalid_6.json", + extension_manifest_errors::kInvalidTtsVoicesLocale); + LoadAndExpectError("tts_provider_invalid_7.json", + extension_manifest_errors::kInvalidTtsVoicesGender); + + scoped_refptr<Extension> extension( + LoadAndExpectSuccess("tts_provider_valid.json")); + + ASSERT_EQ(1u, extension->tts_voices().size()); + EXPECT_EQ("name", extension->tts_voices()[0].voice_name); + EXPECT_EQ("en-US", extension->tts_voices()[0].locale); + EXPECT_EQ("female", extension->tts_voices()[0].gender); +} diff --git a/chrome/common/extensions/extension_message_bundle.cc b/chrome/common/extensions/extension_message_bundle.cc index 3f7c152..ea28c83 100644 --- a/chrome/common/extensions/extension_message_bundle.cc +++ b/chrome/common/extensions/extension_message_bundle.cc @@ -10,9 +10,9 @@ #include "app/l10n_util.h" #include "base/hash_tables.h" #include "base/i18n/rtl.h" +#include "base/lazy_instance.h" #include "base/linked_ptr.h" #include "base/scoped_ptr.h" -#include "base/singleton.h" #include "base/stl_util-inl.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" @@ -316,18 +316,30 @@ std::string ExtensionMessageBundle::GetL10nMessage( // /////////////////////////////////////////////////////////////////////////////// +// Unique class for Singleton. +struct ExtensionToMessagesMap { + ExtensionToMessagesMap(); + ~ExtensionToMessagesMap(); + + // Maps extension ID to message map. + ExtensionToL10nMessagesMap messages_map; +}; + +static base::LazyInstance<ExtensionToMessagesMap> g_extension_to_messages_map( + base::LINKER_INITIALIZED); + ExtensionToMessagesMap::ExtensionToMessagesMap() {} ExtensionToMessagesMap::~ExtensionToMessagesMap() {} ExtensionToL10nMessagesMap* GetExtensionToL10nMessagesMap() { - return &Singleton<ExtensionToMessagesMap>()->messages_map; + return &g_extension_to_messages_map.Get().messages_map; } L10nMessagesMap* GetL10nMessagesMap(const std::string extension_id) { ExtensionToL10nMessagesMap::iterator it = - Singleton<ExtensionToMessagesMap>()->messages_map.find(extension_id); - if (it != Singleton<ExtensionToMessagesMap>()->messages_map.end()) + g_extension_to_messages_map.Get().messages_map.find(extension_id); + if (it != g_extension_to_messages_map.Get().messages_map.end()) return &(it->second); return NULL; diff --git a/chrome/common/extensions/extension_message_bundle.h b/chrome/common/extensions/extension_message_bundle.h index 6370559..df3bf35 100644 --- a/chrome/common/extensions/extension_message_bundle.h +++ b/chrome/common/extensions/extension_message_bundle.h @@ -155,15 +155,6 @@ typedef std::map<std::string, std::string> L10nMessagesMap; // A map of extension ID to l10n message map. typedef std::map<std::string, L10nMessagesMap > ExtensionToL10nMessagesMap; -// Unique class for Singleton. -struct ExtensionToMessagesMap { - ExtensionToMessagesMap(); - ~ExtensionToMessagesMap(); - - // Maps extension ID to message map. - ExtensionToL10nMessagesMap messages_map; -}; - // Returns the extension_id to messages map. ExtensionToL10nMessagesMap* GetExtensionToL10nMessagesMap(); diff --git a/chrome/common/extensions/extension_resource_unittest.cc b/chrome/common/extensions/extension_resource_unittest.cc index 1590225..e7b3ef0 100644 --- a/chrome/common/extensions/extension_resource_unittest.cc +++ b/chrome/common/extensions/extension_resource_unittest.cc @@ -58,8 +58,7 @@ TEST(ExtensionResourceTest, CreateWithAllResourcesOnDisk) { ASSERT_TRUE(file_util::CreateDirectory(l10n_path)); std::vector<std::string> locales; - extension_l10n_util::GetParentLocales(l10n_util::GetApplicationLocale(""), - &locales); + l10n_util::GetParentLocales(l10n_util::GetApplicationLocale(""), &locales); ASSERT_FALSE(locales.empty()); for (size_t i = 0; i < locales.size(); i++) { FilePath make_path; diff --git a/chrome/common/extensions/extension_unpacker.cc b/chrome/common/extensions/extension_unpacker.cc index e270870..1ff4342 100644 --- a/chrome/common/extensions/extension_unpacker.cc +++ b/chrome/common/extensions/extension_unpacker.cc @@ -4,6 +4,8 @@ #include "chrome/common/extensions/extension_unpacker.h" +#include <set> + #include "base/file_util.h" #include "base/scoped_handle.h" #include "base/scoped_temp_dir.h" @@ -18,7 +20,6 @@ #include "chrome/common/extensions/extension_file_util.h" #include "chrome/common/extensions/extension_l10n_util.h" #include "chrome/common/json_value_serializer.h" -#include "chrome/common/notification_service.h" #include "chrome/common/url_constants.h" #include "chrome/common/zip.h" #include "ipc/ipc_message_utils.h" @@ -150,7 +151,6 @@ bool ExtensionUnpacker::Run() { extension_path_.DirName().AppendASCII(filenames::kTempExtensionName); if (!file_util::CreateDirectory(temp_install_dir_)) { - #if defined(OS_WIN) std::string dir_string = WideToUTF8(temp_install_dir_.value()); #else diff --git a/chrome/common/extensions/update_manifest.cc b/chrome/common/extensions/update_manifest.cc index 3329456..c75aa01 100644 --- a/chrome/common/extensions/update_manifest.cc +++ b/chrome/common/extensions/update_manifest.cc @@ -10,6 +10,7 @@ #include "base/stl_util-inl.h" #include "base/string_util.h" #include "base/string_number_conversions.h" +#include "base/stringprintf.h" #include "base/version.h" #include "chrome/common/libxml_utils.h" #include "libxml/tree.h" @@ -35,7 +36,7 @@ void UpdateManifest::ParseError(const char* details, ...) { // TODO(asargent) make a platform abstracted newline? errors_ += "\r\n"; } - StringAppendV(&errors_, details, args); + base::StringAppendV(&errors_, details, args); va_end(args); } @@ -81,7 +82,7 @@ static void XmlErrorFunc(void *context, const char *message, ...) { va_list args; va_start(args, message); std::string* error = static_cast<std::string*>(context); - StringAppendV(error, message, args); + base::StringAppendV(error, message, args); va_end(args); } diff --git a/chrome/common/extensions/url_pattern.h b/chrome/common/extensions/url_pattern.h index 72810ba..c0f17af 100644 --- a/chrome/common/extensions/url_pattern.h +++ b/chrome/common/extensions/url_pattern.h @@ -203,19 +203,10 @@ class URLPattern { private: friend class std::vector<URLPattern>; -// See clang bug: http://llvm.org/bugs/show_bug.cgi?id=8479 -#if defined(__clang__) - public: -#endif - // Note: don't use this directly. This exists so URLPattern can be used // with STL containers. URLPattern(); -#if defined(__clang__) - private: -#endif - // A bitmask containing the schemes which are considered valid for this // pattern. Parse() uses this to decide whether a pattern contains a valid // scheme. MatchesScheme uses this to decide whether a wildcard scheme_ |