summaryrefslogtreecommitdiff
path: root/chromium/chrome/common
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-03-18 13:16:26 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-03-20 15:55:39 +0100
commit3f0f86b0caed75241fa71c95a5d73bc0164348c5 (patch)
tree92b9fb00f2e9e90b0be2262093876d4f43b6cd13 /chromium/chrome/common
parente90d7c4b152c56919d963987e2503f9909a666d2 (diff)
downloadqtwebengine-chromium-3f0f86b0caed75241fa71c95a5d73bc0164348c5.tar.gz
Update to new stable branch 1750
This also includes an updated ninja and chromium dependencies needed on Windows. Change-Id: Icd597d80ed3fa4425933c9f1334c3c2e31291c42 Reviewed-by: Zoltan Arvai <zarvai@inf.u-szeged.hu> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'chromium/chrome/common')
-rw-r--r--chromium/chrome/common/common_resources.grd21
-rw-r--r--chromium/chrome/common/extensions/api/_api_features.json745
-rw-r--r--chromium/chrome/common/extensions/api/_manifest_features.json414
-rw-r--r--chromium/chrome/common/extensions/api/_permission_features.json937
-rw-r--r--chromium/chrome/common/extensions/api/activity_log_private.json116
-rw-r--r--chromium/chrome/common/extensions/api/adview.json12
-rw-r--r--chromium/chrome/common/extensions/api/api.gyp282
-rw-r--r--chromium/chrome/common/extensions/api/app.json94
-rw-r--r--chromium/chrome/common/extensions/api/bookmark_manager_private.json334
-rw-r--r--chromium/chrome/common/extensions/api/bookmarks.json513
-rw-r--r--chromium/chrome/common/extensions/api/browser_action.json350
-rw-r--r--chromium/chrome/common/extensions/api/browsing_data.json389
-rw-r--r--chromium/chrome/common/extensions/api/chromeos_info_private.json76
-rw-r--r--chromium/chrome/common/extensions/api/cloud_print_private.json132
-rw-r--r--chromium/chrome/common/extensions/api/command_line_private.json35
-rw-r--r--chromium/chrome/common/extensions/api/commands.json70
-rw-r--r--chromium/chrome/common/extensions/api/content_settings.json226
-rw-r--r--chromium/chrome/common/extensions/api/context_menus.json313
-rw-r--r--chromium/chrome/common/extensions/api/cookies.json200
-rw-r--r--chromium/chrome/common/extensions/api/debugger.json188
-rw-r--r--chromium/chrome/common/extensions/api/declarative_content.json69
-rw-r--r--chromium/chrome/common/extensions/api/declarative_web_request.json597
-rw-r--r--chromium/chrome/common/extensions/api/desktop_capture.json66
-rw-r--r--chromium/chrome/common/extensions/api/devtools/experimental_audits.json191
-rw-r--r--chromium/chrome/common/extensions/api/devtools/experimental_console.json100
-rw-r--r--chromium/chrome/common/extensions/api/devtools/inspected_window.json197
-rw-r--r--chromium/chrome/common/extensions/api/devtools/network.json88
-rw-r--r--chromium/chrome/common/extensions/api/devtools/panels.json316
-rw-r--r--chromium/chrome/common/extensions/api/echo_private.json133
-rw-r--r--chromium/chrome/common/extensions/api/enterprise_platform_keys_private.json66
-rw-r--r--chromium/chrome/common/extensions/api/events.json335
-rw-r--r--chromium/chrome/common/extensions/api/experimental_accessibility.json337
-rw-r--r--chromium/chrome/common/extensions/api/extension.json218
-rw-r--r--chromium/chrome/common/extensions/api/file_browser_handler.json102
-rw-r--r--chromium/chrome/common/extensions/api/file_browser_handler_internal.json85
-rw-r--r--chromium/chrome/common/extensions/api/first_run_private.json42
-rw-r--r--chromium/chrome/common/extensions/api/font_settings.json496
-rw-r--r--chromium/chrome/common/extensions/api/gcm.json161
-rw-r--r--chromium/chrome/common/extensions/api/history.json181
-rw-r--r--chromium/chrome/common/extensions/api/i18n.json51
-rw-r--r--chromium/chrome/common/extensions/api/idle.json64
-rw-r--r--chromium/chrome/common/extensions/api/infobars.json54
-rw-r--r--chromium/chrome/common/extensions/api/input_ime.json668
-rw-r--r--chromium/chrome/common/extensions/api/input_method_private.json52
-rw-r--r--chromium/chrome/common/extensions/api/management.json335
-rw-r--r--chromium/chrome/common/extensions/api/manifest_types.json206
-rw-r--r--chromium/chrome/common/extensions/api/media_player_private.json34
-rw-r--r--chromium/chrome/common/extensions/api/metrics_private.json162
-rw-r--r--chromium/chrome/common/extensions/api/networking_private.json385
-rw-r--r--chromium/chrome/common/extensions/api/omnibox.json192
-rw-r--r--chromium/chrome/common/extensions/api/page_action.json191
-rw-r--r--chromium/chrome/common/extensions/api/page_actions.json52
-rw-r--r--chromium/chrome/common/extensions/api/page_capture.json43
-rw-r--r--chromium/chrome/common/extensions/api/permissions.json144
-rw-r--r--chromium/chrome/common/extensions/api/preferences_private.json17
-rw-r--r--chromium/chrome/common/extensions/api/privacy.json89
-rw-r--r--chromium/chrome/common/extensions/api/processes.json263
-rw-r--r--chromium/chrome/common/extensions/api/proxy.json96
-rw-r--r--chromium/chrome/common/extensions/api/runtime.json474
-rw-r--r--chromium/chrome/common/extensions/api/script_badge.json89
-rw-r--r--chromium/chrome/common/extensions/api/sessions.json117
-rw-r--r--chromium/chrome/common/extensions/api/storage.json219
-rw-r--r--chromium/chrome/common/extensions/api/streams_private.json48
-rw-r--r--chromium/chrome/common/extensions/api/system_private.json148
-rw-r--r--chromium/chrome/common/extensions/api/tabs.json926
-rw-r--r--chromium/chrome/common/extensions/api/terminal_private.json153
-rw-r--r--chromium/chrome/common/extensions/api/test.json376
-rw-r--r--chromium/chrome/common/extensions/api/test_presubmit/invalid_json_1.json8
-rw-r--r--chromium/chrome/common/extensions/api/test_presubmit/invalid_json_2.json8
-rw-r--r--chromium/chrome/common/extensions/api/test_presubmit/invalid_json_3.json8
-rw-r--r--chromium/chrome/common/extensions/api/test_presubmit/invalid_json_4.json8
-rw-r--r--chromium/chrome/common/extensions/api/test_presubmit/valid_json.json11
-rw-r--r--chromium/chrome/common/extensions/api/top_sites.json41
-rw-r--r--chromium/chrome/common/extensions/api/tts.json257
-rw-r--r--chromium/chrome/common/extensions/api/tts_engine.json114
-rw-r--r--chromium/chrome/common/extensions/api/types.json176
-rw-r--r--chromium/chrome/common/extensions/api/types_private.json143
-rw-r--r--chromium/chrome/common/extensions/api/virtual_keyboard_private.json142
-rw-r--r--chromium/chrome/common/extensions/api/wallpaper.json66
-rw-r--r--chromium/chrome/common/extensions/api/wallpaper_private.json243
-rw-r--r--chromium/chrome/common/extensions/api/web_navigation.json339
-rw-r--r--chromium/chrome/common/extensions/api/web_request.json543
-rw-r--r--chromium/chrome/common/extensions/api/web_request_internal.json53
-rw-r--r--chromium/chrome/common/extensions/api/webstore.json44
-rw-r--r--chromium/chrome/common/extensions/api/webstore_private.json258
-rw-r--r--chromium/chrome/common/extensions/api/webview.json271
-rw-r--r--chromium/chrome/common/extensions/api/webview_request.json10
-rw-r--r--chromium/chrome/common/extensions/api/webview_tag.json678
-rw-r--r--chromium/chrome/common/extensions/api/windows.json277
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/browserAction/make_page_red/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/browserAction/print/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/browserAction/set_icon_path/manifest.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/browserAction/set_page_color/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/browsingData/basic/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/commands/manifest.json25
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/contentSettings/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/contextMenus/basic/manifest.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/contextMenus/event_page/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/cookies/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/debugger/live-headers/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/debugger/pause-resume/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/desktopCapture/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/devtools/audits/broken-links/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/devtools/inspectedWindow/chrome-preprocessor/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/devtools/network/chrome-firephp/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/devtools/panels/chrome-query/manifest.json7
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/manifest.json8
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_links/manifest.json9
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/_locales/en/messages.json290
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/_locales/en/messages.json9
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/manifest.json8
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/downloads/downloads_overwrite/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/eventPage/basic/manifest.json24
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/extension/isAllowedAccess/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/fontSettings/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/history/showHistory/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/cld/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/en_US/messages.json27
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/es/messages.json27
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/sr/messages.json24
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/de/messages.json8
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/en/messages.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/idle/idle_simple/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/infobars/sandwichbar/manifest.json23
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/input.ime/basic/manifest.json22
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/messaging/timer/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/app/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo-win.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/notifications/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/omnibox/simple-example/manifest.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/override/blank_ntp/manifest.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/override/override_igoogle/manifest.json9
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_content/manifest.json29
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/pageAction/set_icon/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/permissions/extension-questions/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/power/_locales/en/messages.json22
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/power/manifest.json30
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/preferences/allowThirdPartyCookies/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/preferences/enableReferrer/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/processes/process_monitor/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/processes/show_tabs/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/storage/stylizr/manifest.json20
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/tabs/inspector/manifest.json14
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/tabs/pin/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/tabs/screenshot/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/topsites/basic/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/topsites/magic8ball/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/ttsEngine/console_tts_engine/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/_locales/en/messages.json52
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/api/windows/merge_windows/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/apps/background-simple/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/apps/calculator/app/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/benchmark/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json28
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ar/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/bg/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ca/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/cs/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/da/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/de/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/el/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en_GB/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es_419/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/et/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fil/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/he/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hu/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/id/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/it/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ja/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ko/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lt/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lv/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nb/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_BR/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_PT/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ro/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ru/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sk/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sv/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/th/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/tr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/uk/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/vi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_CN/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_TW/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/calendar/manifest.json22
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/catblock/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/catifier/manifest.json12
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json13
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/email_this_page/manifest.json20
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/fx/manifest.json22
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gdocs/manifest.json25
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ar/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/bg/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ca/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/cs/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/da/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/de/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/el/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en_GB/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es_419/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/et/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fil/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/he/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hu/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/id/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/it/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ja/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ko/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lt/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lv/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nb/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_BR/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_PT/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ro/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ru/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sk/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sl/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sv/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/th/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/tr/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/uk/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/vi/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_CN/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_TW/messages.json1
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/gmail/manifest.json23
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/imageinfo/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/irc/app/manifest.json11
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/_locales/en/messages.json10
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/schema.json36
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/mappy/manifest.json22
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/maps_app/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news/_locales/en/messages.json102
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news/manifest.json20
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news_a11y/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/en/messages.json63
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/es/messages.json63
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/sr/messages.json59
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/oauth_contacts/manifest.json26
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/_locales/en/messages.json23
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/manifest.json16
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/_locales/en/messages.json54
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/manifest.json27
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/speak_selection/manifest.json49
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/manifest.json23
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/ttsdebug/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/extensions/ttsdemo/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/howto/contentscript_xhr/manifest.json18
-rw-r--r--chromium/chrome/common/extensions/docs/examples/howto/sandbox/manifest.json19
-rw-r--r--chromium/chrome/common/extensions/docs/examples/howto/tab_shortcuts/manifest.json26
-rw-r--r--chromium/chrome/common/extensions/docs/examples/tutorials/analytics/manifest.json17
-rw-r--r--chromium/chrome/common/extensions/docs/examples/tutorials/getstarted/manifest.json15
-rw-r--r--chromium/chrome/common/extensions/docs/server2/known_broken_links.json2030
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/first.json310
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/second.json1112
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/file_system/stat_result.json87
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/github_file_system/expected_list.json41
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/rietveld_patcher/expected/extensions_sidenav.json6
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/expected.json10
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/samples.json24
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/template_data_source/partials/input.json7
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/test_json/add_rules_def_test.json19
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/test_json/expected_tester.json218
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/test_json/fake_data_source.json112
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/test_json/ref_test_data_source.json23
-rw-r--r--chromium/chrome/common/extensions/docs/server2/test_data/test_json/test_file_data_source.json13
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/api_availabilities.json47
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/apps_sidenav.json278
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/chrome_sidenav.json1111
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/content_providers.json95
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/extensions_sidenav.json222
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/intro_tables.json300
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/manifest.json170
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/permissions.json66
-rw-r--r--chromium/chrome/common/extensions/docs/templates/json/strings.json19
-rw-r--r--chromium/chrome/common/extensions/docs/templates/public/apps/redirects.json11
-rw-r--r--chromium/chrome/common/extensions/docs/templates/public/extensions/redirects.json11
-rw-r--r--chromium/chrome/common/extensions/docs/templates/public/redirects.json7
-rw-r--r--chromium/chrome/common/extensions_api_resources.grd40
-rw-r--r--chromium/chrome/common/web_app_schema.json58
311 files changed, 27398 insertions, 135 deletions
diff --git a/chromium/chrome/common/common_resources.grd b/chromium/chrome/common/common_resources.grd
new file mode 100644
index 00000000000..06f100fb49d
--- /dev/null
+++ b/chromium/chrome/common/common_resources.grd
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1">
+ <outputs>
+ <output filename="grit/common_resources.h" type="rc_header">
+ <emit emit_type='prepend'></emit>
+ </output>
+ <output filename="common_resources.pak" type="data_package" />
+ <output filename="common_resources.rc" type="rc_all" />
+ </outputs>
+ <release seq="1">
+ <includes>
+ <include name="IDR_EXTENSION_API_FEATURES" file="extensions\api\_api_features.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_MANIFEST_FEATURES" file="extensions\api\_manifest_features.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_PERMISSION_FEATURES" file="extensions\api\_permission_features.json" type="BINDATA" />
+ <include name="IDR_WEB_APP_SCHEMA" file="web_app_schema.json" type="BINDATA" />
+ <if expr="is_macosx">
+ <include name="IDR_NACL_SANDBOX_PROFILE" file="nacl_loader.sb" type="BINDATA" />
+ </if>
+ </includes>
+ </release>
+</grit>
diff --git a/chromium/chrome/common/extensions/api/_api_features.json b/chromium/chrome/common/extensions/api/_api_features.json
new file mode 100644
index 00000000000..681b3c68d02
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/_api_features.json
@@ -0,0 +1,745 @@
+// Copyright (c) 2012 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.
+
+// See c/c/e/features/* to understand this file, in particular feature.h,
+// simple_feature.h, and base_feature_provider.h.
+//
+// Note that specifying "web_page", "blessed_web_page", or "all" as a context
+// type will require manually updating chrome/renderer/resources/dispatcher.cc.
+
+{
+ "activityLogPrivate": {
+ "dependencies": ["permission:activityLogPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "adview": {
+ "dependencies": ["permission:adview"],
+ "contexts": ["blessed_extension"]
+ },
+ "alarms": {
+ "dependencies": ["permission:alarms"],
+ "contexts": ["blessed_extension"]
+ },
+ "app": {
+ "channel": "stable",
+ "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
+ "contexts": [
+ "blessed_extension",
+ "unblessed_extension",
+ "content_script",
+ "web_page",
+ "blessed_web_page"
+ ],
+ "matches": [
+ "http://*/*", "https://*/*", "chrome-extension://*/*", "file://*/*"
+ ]
+ },
+ "app.runtime": {
+ "noparent": true,
+ "contexts": ["blessed_extension"],
+ "dependencies": ["permission:app.runtime"]
+ },
+ "app.window": {
+ "noparent": true,
+ "contexts": ["blessed_extension"],
+ "dependencies": ["permission:app.window"]
+ },
+ "app.currentWindowInternal": {
+ "noparent": true,
+ "internal": true,
+ "channel": "stable",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "app.getDetails": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
+ "matches": []
+ },
+ "app.getDetailsForFrame": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
+ "matches": []
+ },
+ "app.getIsInstalled": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
+ "matches": []
+ },
+ "app.installState": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
+ "matches": []
+ },
+ "app.runningState": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
+ "matches": []
+ },
+ "audio": {
+ "dependencies": ["permission:audio"],
+ "contexts": ["blessed_extension"]
+ },
+ "autotestPrivate": {
+ "dependencies": ["permission:autotestPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "bluetooth": {
+ "dependencies": ["permission:bluetooth"],
+ "contexts": ["blessed_extension"]
+ },
+ "bookmarkManagerPrivate": {
+ "dependencies": ["permission:bookmarkManagerPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "bookmarks": {
+ "dependencies": ["permission:bookmarks"],
+ "contexts": ["blessed_extension"]
+ },
+ "bookmarks.export": {
+ "extension_types": ["extension"],
+ "location": "component"
+ },
+ "bookmarks.import": {
+ "extension_types": ["extension"],
+ "location": "component"
+ },
+ "brailleDisplayPrivate": {
+ "dependencies": ["permission:brailleDisplayPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "browserAction": {
+ "dependencies": ["manifest:browser_action"],
+ "contexts": ["blessed_extension"]
+ },
+ // This API is whitelisted on stable and should not be enabled for a wider
+ // audience without resolving security issues raised in API proposal and
+ // review (https://codereview.chromium.org/25305002).
+ "browserAction.openPopup": [{
+ "channel": "dev",
+ "dependencies": ["manifest:browser_action"],
+ "contexts": ["blessed_extension"]
+ }, {
+ "channel": "stable",
+ "dependencies": ["manifest:browser_action"],
+ "whitelist": [
+ "enhhojjnijigcajfphajepfemndkmdlo", // Dev
+ "pkedcjkdefgpdelpbcmbmeomcjbeemfm", // Trusted Tester
+ "fmfcbgogabcbclcofgocippekhfcmgfj", // Staging
+ "hfaagokkkhdbgiakmmlclaapfelnkoah", // Canary
+ "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Trusted Tester (public)
+ "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Release
+ ],
+ "contexts": ["blessed_extension"]
+ }],
+ "browsingData": {
+ "dependencies": ["permission:browsingData"],
+ "contexts": ["blessed_extension"]
+ },
+ "cast.channel": {
+ "dependencies": ["permission:cast"],
+ "contexts": ["blessed_extension"]
+ },
+ "cast.streaming.rtpStream": {
+ "dependencies": ["permission:cast.streaming"],
+ "contexts": ["blessed_extension"]
+ },
+ "cast.streaming.session": {
+ "dependencies": ["permission:cast.streaming"],
+ "contexts": ["blessed_extension"]
+ },
+ "cast.streaming.udpTransport": {
+ "dependencies": ["permission:cast.streaming"],
+ "contexts": ["blessed_extension"]
+ },
+ "chromeosInfoPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:chromeosInfoPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "cloudPrintPrivate": {
+ "dependencies": ["permission:cloudPrintPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "commandLinePrivate": {
+ "dependencies": ["permission:commandLinePrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "commands": {
+ "dependencies": ["manifest:commands"],
+ "contexts": ["blessed_extension"]
+ },
+ "contentSettings": {
+ "dependencies": ["permission:contentSettings"],
+ "contexts": ["blessed_extension"]
+ },
+ "contextMenus": {
+ "dependencies": ["permission:contextMenus"],
+ "contexts": ["blessed_extension"]
+ },
+ "cookies": {
+ "dependencies": ["permission:cookies"],
+ "contexts": ["blessed_extension"]
+ },
+ "debugger": {
+ "dependencies": ["permission:debugger"],
+ "contexts": ["blessed_extension"]
+ },
+ "declarativeContent": {
+ "dependencies": ["permission:declarativeContent"],
+ "contexts": ["blessed_extension"]
+ },
+ "declarativeWebRequest": {
+ "dependencies": ["permission:declarativeWebRequest"],
+ "contexts": ["blessed_extension"]
+ },
+ "desktopCapture": {
+ "dependencies": ["permission:desktopCapture"],
+ "contexts": ["blessed_extension"]
+ },
+ "developerPrivate": {
+ "dependencies": ["permission:developerPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "devtools.inspectedWindow": {
+ "dependencies": ["manifest:devtools_page"],
+ "contexts": ["blessed_extension"]
+ },
+ "devtools.network": {
+ "dependencies": ["manifest:devtools_page"],
+ "contexts": ["blessed_extension"]
+ },
+ "devtools.panels": {
+ "dependencies": ["manifest:devtools_page"],
+ "contexts": ["blessed_extension"]
+ },
+ "diagnostics": {
+ "dependencies": ["permission:diagnostics"],
+ "extension_types": ["platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "dial": {
+ "dependencies": ["permission:dial"],
+ "contexts": ["blessed_extension"]
+ },
+ "dns": {
+ "dependencies": ["permission:dns"],
+ "contexts": ["blessed_extension"]
+ },
+ "downloads": {
+ "dependencies": ["permission:downloads"],
+ "contexts": ["blessed_extension"]
+ },
+ "downloadsInternal": {
+ "internal": true,
+ "channel": "stable",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "echoPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:echoPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "enterprise.platformKeysPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:enterprise.platformKeysPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "events": {
+ "internal": true,
+ "channel": "stable",
+ "extension_types": ["platform_app", "extension"],
+ "contexts": "all",
+ "matches": ["<all_urls>"]
+ },
+ "experimental.accessibility": {
+ "dependencies": ["permission:experimental"],
+ "contexts": ["blessed_extension"]
+ },
+ "experimental.devtools.audits": {
+ "dependencies": ["permission:experimental", "manifest:devtools_page"],
+ "extension_types": ["platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "experimental.devtools.console": {
+ "dependencies": ["permission:experimental", "manifest:devtools_page"],
+ "extension_types": ["platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "experimental.discovery": {
+ "dependencies": ["permission:experimental"],
+ "contexts": ["blessed_extension"]
+ },
+ "extension": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "extension.getURL": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "extension.inIncognitoContext": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "extension.lastError": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "extension.onRequest": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "extension.sendNativeMessage": {
+ "dependencies": ["permission:nativeMessaging"]
+ },
+ "extension.sendRequest": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "feedbackPrivate": {
+ "dependencies": ["permission:feedbackPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "fileBrowserHandler": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:fileBrowserHandler"],
+ "contexts": ["blessed_extension"]
+ },
+ "fileBrowserHandlerInternal": {
+ "internal": true,
+ "platforms": ["chromeos"],
+ "channel": "stable",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "screenlockPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:screenlockPrivate"],
+ "extension_types": ["platform_app"],
+ "contexts": ["blessed_extension", "unblessed_extension"]
+ },
+ "fileBrowserPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:fileBrowserPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "fileSystem": {
+ "dependencies": ["permission:fileSystem"],
+ "contexts": ["blessed_extension"]
+ },
+ "fileSystemProvider": {
+ "dependencies": ["permission:fileSystemProvider"],
+ "contexts": ["blessed_extension"]
+ },
+ "firstRunPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:firstRunPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "fontSettings": {
+ "dependencies": ["permission:fontSettings"],
+ "contexts": ["blessed_extension"]
+ },
+ "gcm": {
+ "dependencies": ["permission:gcm"],
+ "contexts": ["blessed_extension"]
+ },
+ "hangoutsPrivate": {
+ "channel": "stable",
+ "contexts": ["blessed_extension"],
+ "whitelist": [
+ // http://crbug.com/309737
+ "nckgahadagoaajjgafhacjanaoiihapd",
+ "ljclpkphhpbpinifbeabbhlfddcpfdde",
+ "ppleadejekpmccmnpjdimmlfljlkdfej",
+ "eggnbpckecmjlblplehfpjjdhhidfdoj"
+ ]
+ },
+ "history": {
+ "dependencies": ["permission:history"],
+ "contexts": ["blessed_extension"]
+ },
+ "i18n": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "identity": {
+ "dependencies": ["permission:identity"],
+ "contexts": ["blessed_extension"]
+ },
+ "identityPrivate": {
+ "dependencies": ["permission:identityPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "idltest": {
+ "dependencies": ["permission:idltest"],
+ "contexts": ["blessed_extension"]
+ },
+ "idle": {
+ "dependencies": ["permission:idle"],
+ "contexts": ["blessed_extension"]
+ },
+ "infobars": {
+ "dependencies": ["permission:infobars"],
+ "contexts": ["blessed_extension"]
+ },
+ "input.ime": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:input"],
+ "contexts": ["blessed_extension"]
+ },
+ "inputMethodPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:inputMethodPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "location": {
+ "dependencies": ["permission:location"],
+ "contexts": ["blessed_extension"]
+ },
+ "logPrivate": {
+ "dependencies": ["permission:logPrivate"],
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "management": {
+ "dependencies": ["permission:management"],
+ "contexts": ["blessed_extension"]
+ },
+ "management.getPermissionWarningsByManifest": {
+ "dependencies": [],
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "management.uninstallSelf": {
+ "dependencies": [],
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ // This is not a real API, only here for documentation purposes.
+ // See http://crbug.com/275944 for background.
+ "manifestTypes": {
+ "internal": true,
+ "channel": "stable",
+ "contexts": ["blessed_extension"]
+ },
+ "mediaGalleries": {
+ "dependencies": ["permission:mediaGalleries"],
+ "contexts": ["blessed_extension"]
+ },
+ "mediaGalleries.getMetadata": {
+ "channel": "dev",
+ "dependencies": ["permission:mediaGalleries"],
+ "contexts": ["blessed_extension"]
+ },
+ "mediaGalleriesPrivate": {
+ "dependencies": ["permission:mediaGalleriesPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "mediaPlayerPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:mediaPlayerPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "metricsPrivate": {
+ "dependencies": ["permission:metricsPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "mdns": {
+ "dependencies": ["permission:mdns"],
+ "contexts": ["blessed_extension"]
+ },
+ "musicManagerPrivate": {
+ "dependencies": ["permission:musicManagerPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "networkingPrivate": {
+ "platforms": ["chromeos", "win"],
+ "dependencies": ["permission:networkingPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "notifications": {
+ "dependencies": ["permission:notifications"],
+ "contexts": ["blessed_extension"]
+ },
+ "omnibox": {
+ "dependencies": ["manifest:omnibox"],
+ "contexts": ["blessed_extension"]
+ },
+ "pageAction": {
+ "dependencies": ["manifest:page_action"],
+ "contexts": ["blessed_extension"]
+ },
+ "pageActions": {
+ "dependencies": ["manifest:page_actions"],
+ "contexts": ["blessed_extension"]
+ },
+ "pageCapture": {
+ "dependencies": ["permission:pageCapture"],
+ "contexts": ["blessed_extension"]
+ },
+ "permissions": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "power": {
+ "dependencies": ["permission:power"],
+ "contexts": ["blessed_extension"]
+ },
+ "preferencesPrivate": {
+ "dependencies": ["permission:preferencesPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "principalsPrivate": {
+ "dependencies": ["permission:principalsPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "privacy": {
+ "dependencies": ["permission:privacy"],
+ "contexts": ["blessed_extension"]
+ },
+ "processes": {
+ "dependencies": ["permission:processes"],
+ "contexts": ["blessed_extension"]
+ },
+ "proxy": {
+ "dependencies": ["permission:proxy"],
+ "contexts": ["blessed_extension"]
+ },
+ "pushMessaging": {
+ "dependencies": ["permission:pushMessaging"],
+ "contexts": ["blessed_extension"]
+ },
+ "imageWriterPrivate": {
+ "dependencies": ["permission:imageWriterPrivate"],
+ "extension_types": ["platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "rtcPrivate": {
+ "dependencies": ["permission:rtcPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "runtime": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "runtime.connect": {
+ "contexts": "all",
+ "matches": ["<all_urls>"]
+ },
+ "runtime.getManifest": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.getURL": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.id": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.lastError": {
+ "contexts": "all",
+ "extension_types": "all",
+ "matches": ["<all_urls>"]
+ },
+ "runtime.onConnect": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.onMessage": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.reload": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.requestUpdateCheck": {
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "runtime.sendMessage": {
+ "contexts": "all",
+ "matches": ["<all_urls>"]
+ },
+ "runtime.setUninstallUrl": {
+ "channel": "dev",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "scriptBadge": {
+ "dependencies": ["manifest:script_badge"],
+ "contexts": ["blessed_extension"]
+ },
+ "serial": {
+ "dependencies": ["permission:serial"],
+ "contexts": ["blessed_extension"]
+ },
+ "sessions": {
+ "dependencies": ["permission:sessions"],
+ "contexts": ["blessed_extension"]
+ },
+ "signedInDevices": {
+ "dependencies": ["permission:signedInDevices"],
+ "contexts": ["blessed_extension"]
+ },
+ "socket": {
+ "dependencies": ["permission:socket"],
+ "contexts": ["blessed_extension"]
+ },
+ "sockets.tcp": {
+ "dependencies": ["manifest:sockets"],
+ "contexts": ["blessed_extension"]
+ },
+ "sockets.tcpServer": {
+ "dependencies": ["manifest:sockets"],
+ "contexts": ["blessed_extension"]
+ },
+ "sockets.udp": {
+ "dependencies": ["manifest:sockets"],
+ "contexts": ["blessed_extension"]
+ },
+ "storage": {
+ "dependencies": ["permission:storage"],
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "streamsPrivate": {
+ "dependencies": ["permission:streamsPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "syncFileSystem": {
+ "dependencies": ["permission:syncFileSystem"],
+ "contexts": ["blessed_extension"]
+ },
+ "systemIndicator": {
+ "dependencies": ["manifest:system_indicator"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.cpu": {
+ "dependencies": ["permission:system.cpu"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.display": {
+ "dependencies": ["permission:system.display"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.memory": {
+ "dependencies": ["permission:system.memory"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.network": {
+ "dependencies": ["permission:system.network"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.storage": {
+ "dependencies": ["permission:system.storage"],
+ "contexts": ["blessed_extension"]
+ },
+ "system.storage.getAvailableCapacity": {
+ "channel": "dev"
+ },
+ "systemPrivate": {
+ "dependencies": ["permission:systemPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "tabCapture": {
+ "dependencies": ["permission:tabCapture"],
+ "contexts": ["blessed_extension"]
+ },
+ "tabs": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "terminalPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:terminalPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "test": {
+ "channel": "stable",
+ "extension_types": "all",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "topSites": {
+ "dependencies": ["permission:topSites"],
+ "contexts": ["blessed_extension"]
+ },
+ "tts": {
+ "dependencies": ["permission:tts"],
+ "contexts": ["blessed_extension"]
+ },
+ "ttsEngine": {
+ "dependencies": ["permission:ttsEngine"],
+ "contexts": ["blessed_extension"]
+ },
+ "types": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "contexts": ["blessed_extension"]
+ },
+ "types.private": {
+ "channel": "dev",
+ "extension_types": ["extension"],
+ "location": "component"
+ },
+ "usb": {
+ "dependencies": ["permission:usb"],
+ "contexts": ["blessed_extension"]
+ },
+ "virtualKeyboardPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:virtualKeyboardPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "wallpaper": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:wallpaper"],
+ "contexts": ["blessed_extension"]
+ },
+ "wallpaperPrivate": {
+ "platforms": ["chromeos"],
+ "dependencies": ["permission:wallpaperPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "webNavigation": {
+ "dependencies": ["permission:webNavigation"],
+ "contexts": ["blessed_extension"]
+ },
+ "webRequest": {
+ "dependencies": ["permission:webRequest"],
+ "contexts": ["blessed_extension"]
+ },
+ "webRequestInternal": {
+ "internal": true,
+ "channel": "stable",
+ "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
+ },
+ "webrtcAudioPrivate": {
+ "dependencies": ["permission:webrtcAudioPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "webrtcLoggingPrivate": {
+ "dependencies": ["permission:webrtcLoggingPrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "webstore": {
+ // Hosted apps can use the webstore API from within a blessed context.
+ "channel": "stable",
+ "extension_types": ["hosted_app"],
+ "contexts": ["blessed_web_page", "web_page"],
+ // Any webpage can use the webstore API.
+ "matches": ["http://*/*", "https://*/*"]
+ },
+ "webstorePrivate": {
+ "dependencies": ["permission:webstorePrivate"],
+ "contexts": ["blessed_extension"]
+ },
+ "webview": {
+ "internal": true,
+ "dependencies": ["permission:webview"],
+ "contexts": ["blessed_extension", "unblessed_extension"]
+ },
+ "webViewRequest": {
+ "dependencies": ["permission:webview"],
+ "contexts": ["blessed_extension", "unblessed_extension"]
+ },
+ "webviewTag": {
+ "internal": true,
+ "channel": "stable",
+ "dependencies": ["permission:webview"],
+ "contexts": ["blessed_extension"]
+ },
+ "windows": {
+ "dependencies": ["api:tabs"],
+ "contexts": ["blessed_extension"]
+ }
+}
diff --git a/chromium/chrome/common/extensions/api/_manifest_features.json b/chromium/chrome/common/extensions/api/_manifest_features.json
new file mode 100644
index 00000000000..853b46cb645
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/_manifest_features.json
@@ -0,0 +1,414 @@
+// Copyright (c) 2012 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.
+
+// See c/c/e/features/* to understand this file, in particular feature.h,
+// simple_feature.h, and base_feature_provider.h.
+
+{
+ "app": {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "hosted_app", "platform_app"]
+ },
+ // The default platform app CSP can only be overridden by whitelisted apps.
+ // This is a separate key from the top-level content_security_policy one since
+ // we can't combine type restrictions with whitelisted ID restrictions. If
+ // there is a need for additional whitelisted entries, the feature system
+ // should instead be extended to support OR-ing of restrictions.
+ "app.content_security_policy": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "min_manifest_version": 2,
+ "whitelist": [
+ "nckgahadagoaajjgafhacjanaoiihapd", // Google Talk prod
+ "eggnbpckecmjlblplehfpjjdhhidfdoj", // Google Talk beta
+ "ppleadejekpmccmnpjdimmlfljlkdfej", // Google Talk alpha
+ "ljclpkphhpbpinifbeabbhlfddcpfdde", // Google Talk debug
+ "lphgohfeebnhcpiohjndkgbhhkoapkjc" // Apps Debugger
+ ]
+ },
+ "app.background": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "min_manifest_version": 2
+ },
+ "app.isolation": {
+ "channel": "stable",
+ // Platform apps always have isolated storage, thus they cannot specify it
+ // via the manifest.
+ "extension_types": ["legacy_packaged_app", "hosted_app"]
+ },
+ "app.launch": {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "hosted_app"]
+ },
+ "author": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "background": {
+ "channel": "stable",
+ "extension_types": [
+ // Platform apps specify their background page via app.background.
+ "extension", "legacy_packaged_app", "hosted_app"
+ ]
+ },
+ "background.persistent": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app"
+ ],
+ "min_manifest_version": 2
+ },
+ "background_page": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app"
+ ],
+ "max_manifest_version": 1
+ },
+ "browser_action": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "chrome_settings_overrides": [{
+ "channel": "dev",
+ "extension_types": ["extension"]
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "CB2E4E7174A398FCB3AFA6840500C2E1D22DA7B2", // Bookmark Manager
+ "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
+ "D57DE394F36DC1C3220E7604C575D29C51A6C495" // http://crbug.com/319444
+ ]
+ }],
+ "chrome_url_overrides": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "commands": [
+ {
+ "channel": "dev",
+ "extension_types": ["platform_app"],
+ "min_manifest_version": 2
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "min_manifest_version": 2
+ }
+ ],
+ "commands.global": [
+ {
+ "channel": "dev",
+ "extension_types": ["extension", "platform_app"],
+ "min_manifest_version": 2
+ }
+ ],
+ "content_pack": {
+ "channel": "dev",
+ "extension_types": ["extension"]
+ },
+ "content_security_policy": {
+ "channel": "stable",
+ // Platform apps have a restricted content security policy that cannot be
+ // overriden (except for a whitelist of exceptions, see the
+ // app.content_security_policy whitelist).
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "content_scripts": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "converted_from_user_script": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app"
+ ],
+ "no_doc": true
+ },
+ "current_locale": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "default_locale": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "description": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "devtools_page": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "display_in_launcher": [
+ {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "platform_app"],
+ "location": "component"
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "nmmhkkegccagdldgiimedpiccmgmieda"
+ ]
+ }
+ ],
+ "display_in_new_tab_page": [
+ {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "platform_app"],
+ "location": "component"
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "nmmhkkegccagdldgiimedpiccmgmieda"
+ ]
+ }
+ ],
+ "export": [
+ {
+ "channel": "stable",
+ "extension_types": ["shared_module"],
+ "whitelist": [
+ "6EAED1924DB611B6EEF2A664BD077BE7EAD33B8F",
+ "4EB74897CB187C7633357C2FE832E0AD6A44883A"
+ ]
+ },
+ {
+ "channel": "dev",
+ "extension_types": ["shared_module"]
+ }
+ ],
+ "externally_connectable": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "hosted_app", "legacy_packaged_app", "platform_app"
+ ]
+ },
+ "file_browser_handlers": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "file_handlers": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "homepage_url": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "icons": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "import": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "incognito": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "input_components": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "key": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "kiosk_enabled": {
+ "channel": "stable",
+ "extension_types": [
+ "platform_app"
+ ]
+ },
+ "kiosk_only": {
+ "channel": "dev",
+ "extension_types": [
+ "platform_app"
+ ]
+ },
+ "manifest_version": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "media_galleries_handlers": {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ "mime_types": {
+ "channel": "stable",
+ "extension_types": [ "extension", "legacy_packaged_app", "platform_app" ],
+ "whitelist": [
+ "oickdpebdnfbgkcaoklfcdhjniefkcji", // browser_tests
+ "gbkeegbaiigmenfmjfclcdgdpimamgkj", // QuickOffice
+ "ionpfmkccalenbmnddpbmocokhaknphg", // QuickOffice Dev
+ "bpmcpldpdmajfigpchkicefoigmkfalc", // Quickoffice component extension
+ "ehibbfinohgbchlgdbfpikodjaojhccn", // Editor
+ "mhjfbmdgcfjbbpaeojofohoefgiehjai" // PDF
+ ]
+ },
+ "minimum_chrome_version": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "nacl_modules": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "name": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "oauth2": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "platform_app"
+ ]
+ },
+ "oauth2.auto_approve": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "platform_app"
+ ],
+ "whitelist": [
+ "mdbihdcgjmagbcapkhhkjbbdlkflmbfo", // unit_tests
+ "pafkbggdmjlpgkdkcbjmhmfcdpncadgh", // Google Now
+ "hkhhlkdconhgemhegnplaldnmnmkaemd", // Get Started App
+ "nmmhkkegccagdldgiimedpiccmgmieda", // In-app payments support app.
+ "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C",
+ "F7FA7ABC1ECB89BA8EE6656847EFABBF43BB9BCA",
+ "1A26E32DE447A17CBE5E9750CDBA78F58539B39C", // TODO(rockot): Kill these.
+ "E61F841D8210B6A9891E5384CB665FBED31FCD7B" // http://crbug.com/281715
+ ]
+ },
+ "offline_enabled": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "omnibox": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "optional_permissions": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "options_page": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app"
+ ]
+ },
+ "page_action": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "page_actions": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "max_manifest_version": 1
+ },
+ "permissions": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "platforms": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "plugins": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "hosted_app"]
+ },
+ "requirements": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "sandbox": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "platform_app", "legacy_packaged_app"
+ ],
+ "min_manifest_version": 2
+ },
+ "script_badge": {
+ "channel": "trunk",
+ "extension_types": ["extension"]
+ },
+ "short_name": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "signature": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "sockets": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "spellcheck": {
+ "channel": "dev",
+ "extension_types": ["extension"]
+ },
+ "storage": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "min_manifest_version": 2
+ },
+ "system_indicator": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "theme": {
+ "channel": "stable",
+ "extension_types": ["theme"]
+ },
+ "tts_engine": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "update_url": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "url_handlers": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "version": {
+ "channel": "stable",
+ "extension_types": "all"
+ },
+ "web_accessible_resources": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app"
+ ]
+ },
+ "webview": {
+ "channel": "dev",
+ "extension_types": ["platform_app"],
+ "min_manifest_version": 2
+ }
+}
diff --git a/chromium/chrome/common/extensions/api/_permission_features.json b/chromium/chrome/common/extensions/api/_permission_features.json
new file mode 100644
index 00000000000..05f5ad7b2a1
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/_permission_features.json
@@ -0,0 +1,937 @@
+// Copyright (c) 2012 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.
+
+// See c/c/e/features/* to understand this file, in particular feature.h,
+// simple_feature.h, and base_feature_provider.h.
+
+// To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash:
+//
+// $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \
+// sha1sum | tr '[:lower:]' '[:upper:]'
+// 9A0417016F345C934A1A88F55CA17C05014EEEBA -
+//
+// Google employees: please update http://go/chrome-api-whitelist to map
+// hashes back to ids.
+
+{
+ "activeTab": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "min_manifest_version": 2
+ },
+ "activityLogPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"],
+ "whitelist": [
+ "EE17C698905F7F2E6DDC87C9C30F11E164C829F4", // Watchdog release
+ "90113DA9516526D24DAF156C629CC41C049E8882", // Watchdog testing
+ "A9EFD71948A480C87D3B7C758FD938215F445F00" // Obsolete
+ ]
+ },
+ "adview": {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ "alarms": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "min_manifest_version": 2
+ },
+ "alwaysOnTopWindows": [
+ {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "0F42756099D914A026DADFA182871C015735DD95",
+ "2D22CDB6583FD0A13758AEBE8B15E45208B4E9A7"
+ ]
+ }
+ ],
+ "app.runtime": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "app.window": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "audio": [
+ {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",
+ "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB"
+ ]
+ }
+ ],
+ "autotestPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "audioCapture": [
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ // http://crbug.com/292856
+ "3F50C3A83839D9C76334BCE81CDEC06174F266AF",
+ "09FDCB5851B8F3378DB630D06E316076E89C95A6",
+ "39BE69F11F68E4EED080DA3DC2394F7885B7AFF9",
+ "FF78670081967CE21DB86A04AD94A0498F01E20A"
+ ]
+ }
+ ],
+ "background": [
+ {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app"
+ ]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "5B5DA6D054D10DB917AF7D9EAE3C56044D1B0B03", // http://crbug.com/286542
+ "2843C1E82A9B6C6FB49308FDDF4E157B6B44BC2B", // http://crbug.com/286542
+ "3F596D221126DCDFD115CFAA2E5A3141806358AD", // http://crbug.com/286542
+ "F7FA7ABC1ECB89BA8EE6656847EFABBF43BB9BCA", // http://crbug.com/320952
+ "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C", // http://crbug.com/320952
+ "4FE45FA56EF6A25FDE8C302C44045CA9CE8A605A" // http://crbug.com/320952
+ ]
+ }
+ ],
+ "bluetooth": {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ "bluetoothDevices": {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ "bookmarkManagerPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "whitelist": [
+ "CB2E4E7174A398FCB3AFA6840500C2E1D22DA7B2", // Bookmark Manager
+ "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
+ "D57DE394F36DC1C3220E7604C575D29C51A6C495" // http://crbug.com/319444
+ ]
+ },
+ "bookmarks": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "brailleDisplayPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "location": "component"
+ },
+ "browsingData": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "cast": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
+ "226CF815E39A363090A1E547D53063472B8279FA", // Trusted Tester
+ "FA01E0B81978950F2BC5A50512FD769725F57510", // Staging
+ "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
+ "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Trusted Tester (public)
+ "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Release
+ ]
+ },
+ "cast.streaming": {
+ "channel": "dev",
+ "extension_types": ["extension"]
+ },
+ "chromePrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "whitelist": [
+ "2462D64ACB971A7E708757159C2B17761D4FF54A", // Citrix Receiver
+ "3010EF507AFEF487EEA9CDE2930EC94867C60936", // Citrix Receiver Beta
+ "ABAABC5F49E022A76CBB12972A53B58354C04AC6" // Citrix Receiver Dev
+ ]
+ },
+ "chromeosInfoPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/293683
+ "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578", // http://crbug.com/234235
+ "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB", // http://crbug.com/234235
+ "314B0FC37CAE989AF42887E5303BD1E98BF12DDE", // http://crbug.com/329088
+ "D7986543275120831B39EF28D1327552FC343960" // http://crbug.com/329088
+ ]
+ },
+ "clipboardRead": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "clipboardWrite": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "cloudPrintPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ // CloudPrint
+ "whitelist": ["99060B01DE911EB85FD630C8BA6320C9186CA3AB"]
+ },
+ "commandLinePrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "location": "component"
+ },
+ "contentSettings": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "contextMenus": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "cookies": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "diagnostics": [
+ {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "7AE714FFD394E073F0294CFA134C9F91DB5FBAA4", // CCD Development
+ "C7DA3A55C2355F994D3FDDAD120B426A0DF63843", // CCD Testing
+ "75E3CFFFC530582C583E4690EF97C70B9C8423B7" // CCD Release
+ ]
+ }
+ ],
+ "debugger": [
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "AE27D69DBE571F4B1694F05C89B710C646792231", // Published ADT.
+ // TODO(grv): clean up once Apps developer tool is published.
+ "5107DE9024C329EEA9C9A72D94C16723790C6422" // Apps Developer Tool.
+ ]
+ }
+ ],
+ "developerPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "AE27D69DBE571F4B1694F05C89B710C646792231", // Published ADT.
+ // TODO(grv): clean up once Apps developer tool is published.
+ "5107DE9024C329EEA9C9A72D94C16723790C6422", // Apps Developer Tool.
+ "8C0B1873FFFB65E4D0F4D772879F7304CEF125C2", // Apps Editor old.
+ // TODO(grv) : clean up once after publish.
+ "FA0501B579070BB9CBD4FCAEC8CB0EDF22BA2F04", // Apps Editor published.
+ "4A4EA121622FCA3D78ED2AB534197F43D7189EE0", // Spark nightly build
+ "9FDE6E7F06FCFA11D9A05041C7FF6D8AE662F5D1" // Spark release
+ ]
+ },
+ "devtools": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "declarativeContent": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "declarativeWebRequest": [
+ {
+ "channel": "beta",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ // Legacy Browser Support (remove once this API hits stable).
+ "whitelist": ["BC3A0F8D5AE0DE6454D74AB376EBCC59E10CDD5A"]
+ }
+ ],
+ "desktopCapture": [
+ {
+ "channel": "beta",
+ "extension_types": ["extension", "platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"],
+ "whitelist": [
+ "80B9DC58E5210749F052F5B4DB239C50CF72AEB6",
+ // Hangout Services component extension.
+ "DF84F03F9B960409CCDE0D895B9650EBE81C0A8E"
+ ]
+ }
+ ],
+ "dns": [
+ {
+ "channel": "dev",
+ "extension_types": ["extension", "platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"],
+ "whitelist": [
+ "7AE714FFD394E073F0294CFA134C9F91DB5FBAA4", // CCD Development
+ "C7DA3A55C2355F994D3FDDAD120B426A0DF63843", // CCD Testing
+ "75E3CFFFC530582C583E4690EF97C70B9C8423B7" // CCD Release
+ ]
+ }
+ ],
+ "screenlockPrivate": {
+ "channel": "dev",
+ "extension_types":["platform_app"],
+ "whitelist": [
+ "lkegkdgachcnekllcdfkijonogckdnjo", // API test
+ "190C131D270994E7330E9A3CD48224061CB10E2D", // dogfood 1
+ "7FDDD1C0CB0052596657FDEC92841D509DC8D404" // dogfood 2
+ ]
+ },
+ "downloads": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "downloads.open": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "downloads.shelf": {
+ "channel": "stable",
+ "extension_types": ["extension"]
+ },
+ "dial": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "226CF815E39A363090A1E547D53063472B8279FA", // Trusted Tester
+ "FA01E0B81978950F2BC5A50512FD769725F57510", // Staging
+ "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
+ "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Trusted Tester (public)
+ "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Release
+ ]
+ },
+ "enterprise.platformKeysPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "whitelist": [
+ "657FEC7E77355CA205B0E226586621F86B33F611", // Dogfood
+ "5894126C625EF31852F215ED301A5FF1F9B7D026" // Test
+ ]
+ },
+ "experimental": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "feedbackPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"],
+ "whitelist": [
+ "7910EAFDAF64B947E1CB31B333A9BD14CA556B6C", // Feedback UI.
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/293683
+ "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578", // http://crbug.com/234235
+ "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB" // http://crbug.com/234235
+ ]
+ },
+ "fileBrowserHandler": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "fileBrowserPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "fileSystem": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },{
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [ "2FC374607C2DF285634B67C64A2E356C607091C3" ]
+ }],
+ "fileSystem.directory": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ }],
+ "fileSystem.retainEntries": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ }],
+ "fileSystem.write": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },{
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [ "2FC374607C2DF285634B67C64A2E356C607091C3" ]
+ }],
+ "fileSystemProvider": {
+ "channel": "trunk",
+ "extension_types": ["platform_app"]
+ },
+ "firstRunPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "location": "component"
+ },
+ "fontSettings": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "fullscreen": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "gcm": {
+ "channel": "dev",
+ "extension_types": ["extension", "platform_app"]
+ },
+ "geolocation": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "history": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "identity": {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"]
+ },
+ "identityPrivate": {
+ "channel": "stable",
+ "extension_types": [
+ "legacy_packaged_app"
+ ],
+ "location": "component"
+ },
+ "idltest": {
+ "channel": "trunk",
+ "extension_types": ["extension"]
+ },
+ "idle": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "infobars": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "input": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "inplies_full_url_access": true
+ },
+ "inputMethodPrivate": [{
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "2462D64ACB971A7E708757159C2B17761D4FF54A", // Citrix Receiver
+ "3010EF507AFEF487EEA9CDE2930EC94867C60936", // Citrix Receiver Beta
+ "ABAABC5F49E022A76CBB12972A53B58354C04AC6", // Citrix Receiver Dev
+ "0EA6B717932AD64C469C1CCB6911457733295907", // HTerm
+ "58B0C2968C335964D5433E89CA4D86628A0E3D4B" // HTerm dev
+ ]
+ },{
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "location": "component"
+ }],
+ "location": [
+ {
+ "channel": "dev",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "platform_app"
+ ]
+ },
+ {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ],
+ "location": "component"
+ }
+ ],
+ "logPrivate": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "management": [
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "AE27D69DBE571F4B1694F05C89B710C646792231", // Published ADT
+ // TODO(grv): clean up once Apps developer tool is published.
+ "5107DE9024C329EEA9C9A72D94C16723790C6422", // Apps Developer Tool.
+ "8C0B1873FFFB65E4D0F4D772879F7304CEF125C2", // Apps Editor old.
+ "FA0501B579070BB9CBD4FCAEC8CB0EDF22BA2F04", // Apps Editor published.
+ "EE17C698905F7F2E6DDC87C9C30F11E164C829F4", // Watchdog (Activity Log)
+ "90113DA9516526D24DAF156C629CC41C049E8882" // Watchdog Test Version
+ ]
+ }
+ ],
+ "mediaGalleries": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ]
+ },
+ "mediaGalleries.allAutoDetected": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ]
+ },
+ "mediaGalleries.read": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ]
+ },
+ "mediaGalleries.copyTo": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ]
+ },
+ "mediaGalleries.delete": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ]
+ },
+ // TODO(thestig) Remove this as part of http://crbug.com/144496
+ "mediaGalleriesPrivate": {
+ "channel": "stable",
+ "extension_types": [ "platform_app" ],
+ "whitelist": [
+ "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C",
+ "5B5DA6D054D10DB917AF7D9EAE3C56044D1B0B03", // http://crbug.com/286542
+ "2843C1E82A9B6C6FB49308FDDF4E157B6B44BC2B", // http://crbug.com/286542
+ "3F596D221126DCDFD115CFAA2E5A3141806358AD", // http://crbug.com/286542
+ "F7FA7ABC1ECB89BA8EE6656847EFABBF43BB9BCA",
+ "4FE45FA56EF6A25FDE8C302C44045CA9CE8A605A"
+ ]
+ },
+ "mediaPlayerPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "metricsPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ // The file manager and Google Now are component extensions, and they can
+ // currently use whitelisted interfaces without being on the corresponding
+ // whitelist.
+ // Adding it to this whitelist documents their dependency, however, and
+ // also doesn't hurt anything.
+ "A948368FC53BE437A55FEB414106E207925482F5", // File manager
+ "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice
+ "5D3851BEFF680AB6D954B76678EFCCE834465C23", // Quickoffice dev
+ "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension
+ "3727DD3E564B6055387425027AD74C58784ACC15", // Editor
+ "C41AD9DCD670210295614257EF8C9945AD68D86E", // Google Now
+ "6EEEA7775E79C735E4BA1F24DBB191BDACB1262C", // RU-NTP
+ "7AE714FFD394E073F0294CFA134C9F91DB5FBAA4", // CCD Development
+ "C7DA3A55C2355F994D3FDDAD120B426A0DF63843", // CCD Testing
+ "75E3CFFFC530582C583E4690EF97C70B9C8423B7", // CCD Release
+ "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900.
+ "D57DE394F36DC1C3220E7604C575D29C51A6C495" // http://crbug.com/319444.
+ ]
+ },
+ "mdns": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
+ "226CF815E39A363090A1E547D53063472B8279FA", // Trusted Tester
+ "FA01E0B81978950F2BC5A50512FD769725F57510", // Staging
+ "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
+ "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Trusted Tester (public)
+ "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Release
+ ]
+ },
+ "musicManagerPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C", // Music Manager
+ "B8F61FD1B25DE03706DBB8906A73261E4DBB992A", // Test
+ "F7FA7ABC1ECB89BA8EE6656847EFABBF43BB9BCA",
+ "4FE45FA56EF6A25FDE8C302C44045CA9CE8A605A"
+ ]
+ },
+ "nativeMessaging": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "platform_app"
+ ]
+ },
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/293683
+ "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578", // http://crbug.com/234235
+ "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB", // http://crbug.com/234235
+ "226CF815E39A363090A1E547D53063472B8279FA", // Trusted Tester
+ "FA01E0B81978950F2BC5A50512FD769725F57510", // Staging
+ "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
+ "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Trusted Tester (public)
+ "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Release
+ "7AE714FFD394E073F0294CFA134C9F91DB5FBAA4", // CCD Development
+ "C7DA3A55C2355F994D3FDDAD120B426A0DF63843", // CCD Testing
+ "75E3CFFFC530582C583E4690EF97C70B9C8423B7" // CCD Release
+ ]
+ },
+ "notifications": {
+ // The chrome.notifications functionality listed in notifications.idl is
+ // available only to extension/platform_app types. The implementation of
+ // that functionality enforces that restriction in
+ // NotificationsApiFunction::IsNotificationsApiAvailable(). This is more
+ // complicated than other namespaces because we are sharing the
+ // notifications permission with WebKit/Blink notifications.
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "overrideEscFullscreen": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "echoPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "pageCapture": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "pointerLock": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "plugin": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "power": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "platform_app"
+ ]
+ },
+ "preferencesPrivate": {
+ "channel": "dev",
+ "extension_types": [
+ "extension"
+ ],
+ "location": "component"
+ },
+ "principalsPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "2779FA8B45841D61A37207CCFAC9CB393964FE5B" // Login Proxy (prototype)
+ ]
+ },
+ "privacy": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "processes": {
+ "channel": "dev",
+ "extension_types": ["extension"]
+ },
+ "proxy": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "pushMessaging": {
+ "channel": "stable",
+ "extension_types": ["extension", "platform_app"]
+ },
+ "imageWriterPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "314B0FC37CAE989AF42887E5303BD1E98BF12DDE", // Chrome OS Recovery Tool Dev
+ "D7986543275120831B39EF28D1327552FC343960" // Chrome OS Recovery Tool
+ ]
+ },
+ "rtcPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "whitelist": [
+ "53041A2FA309EECED01FFC751E7399186E860B2C", // Google Talk prod
+ "A74A4D44C7CFCD8844830E6140C8D763E12DD8F3", // Google Talk beta
+ "E7E2461CE072DF036CF9592740196159E2D7C089", // Google Talk alpha
+ "312745D9BF916161191143F6490085EEA0434997" // Google Talk debug
+ ]
+ },
+ // Note: runtime is not actually a permission, but some systems check these
+ // values to verify restrictions.
+ "runtime": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "screensaver": {
+ "channel": "stable",
+ "extension_types": ["legacy_packaged_app", "hosted_app", "platform_app"]
+ },
+ "serial": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "sessions": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "signedInDevices": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "streamsPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "787000072C6FBB934AF5A42275CDE73FC977D995", // browser_tests
+ "2FC374607C2DF285634B67C64A2E356C607091C3", // QuickOffice
+ "5D3851BEFF680AB6D954B76678EFCCE834465C23", // QuickOffice Dev
+ "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension
+ "3727DD3E564B6055387425027AD74C58784ACC15", // Editor
+ "CBCC42ABED43A4B58FE3810E62AFFA010EB0349F" // PDF
+ ]
+ },
+ "socket": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ // The connectivity diagnostic utility is a component extension that is
+ // used to try to provide suggestions on how to fix connection issues. It
+ // should be the only non-app allowed to use the socket API.
+ "32A1BA997F8AB8DE29ED1BA94AAF00CF2A3FEFA7"
+ ]
+ }],
+ "syncFileSystem": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "systemIndicator": {
+ "channel": "dev",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "storage": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "min_manifest_version": 2
+ },
+ "system.cpu": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "system.memory": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "system.network": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "system.storage": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "system.display": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "systemPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "location": "component"
+ },
+ "tabs": [
+ {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "whitelist": [
+ "AE27D69DBE571F4B1694F05C89B710C646792231", // Published ADT.
+ // TODO(grv): clean up once Apps developer tool is published.
+ "5107DE9024C329EEA9C9A72D94C16723790C6422" // Apps Developer Tool.
+ ]
+ }
+ ],
+ "tabCapture": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "terminalPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+ "whitelist": [
+ "0EA6B717932AD64C469C1CCB6911457733295907", // HTerm
+ "58B0C2968C335964D5433E89CA4D86628A0E3D4B" // HTerm dev
+ ]
+ },
+ "topSites": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "tts": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
+ },
+ "ttsEngine": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "unlimitedStorage": {
+ "channel": "stable",
+ "extension_types": [
+ "extension", "legacy_packaged_app", "hosted_app", "platform_app"
+ ]
+ },
+ "usb": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "usbDevices": {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ "videoCapture": [
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ },
+ {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ // http://crbug.com/292856
+ "3F50C3A83839D9C76334BCE81CDEC06174F266AF",
+ "09FDCB5851B8F3378DB630D06E316076E89C95A6",
+ "A434B90223C3C52F2B69DB494736B63C612C774D"
+ ]
+ }
+ ],
+ "virtualKeyboardPrivate": {
+ "channel": "stable",
+ "whitelist": [
+ "3F50C3A83839D9C76334BCE81CDEC06174F266AF" // System-level virtual kbd
+ ],
+ "extension_types": ["extension"]
+ },
+ "wallpaper": {
+ "channel": "dev",
+ "extension_types": ["platform_app"]
+ },
+ "wallpaperPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+ "location": "component"
+ },
+ "webNavigation": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "webrtcAudioPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "80B9DC58E5210749F052F5B4DB239C50CF72AEB6",
+ // Hangout Services component extension.
+ "DF84F03F9B960409CCDE0D895B9650EBE81C0A8E",
+ // Extension used for API test.
+ "ADFA45434ABA2F1A4647E673F53FF37F8F6047A3"
+ ]
+ },
+ "webrtcLoggingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "whitelist": [
+ "80B9DC58E5210749F052F5B4DB239C50CF72AEB6",
+ // Hangout Services component extension.
+ "DF84F03F9B960409CCDE0D895B9650EBE81C0A8E"
+ ]
+ },
+ "webstorePrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"],
+ "whitelist": [
+ "B44D08FD98F1523ED5837D78D0A606EA9D6206E5", // Web Store
+ "2653F6F6C39BC6EEBD36A09AFB92A19782FF7EB4", // Enterprise Web Store
+ "2779FA8B45841D61A37207CCFAC9CB393964FE5B" // Login Proxy (prototype)
+ ]
+ },
+ "webRequest": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "webRequestBlocking": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app"]
+ },
+ "webview": [{
+ "channel": "stable",
+ "extension_types": ["platform_app"]
+ }, {
+ // General support for webview in component extensions still in progress.
+ // Only allowed for whitelisted extensions until all the caveats are
+ // addressed. Tracked in crbug/285151.
+ "channel": "stable",
+ "extension_types": ["extension"],
+ "location": "component",
+ "whitelist": [
+ "D519188F86D9ACCEE0412007B227D9936EB9676B" // GAIA Component Extension
+ ]
+ }]
+}
diff --git a/chromium/chrome/common/extensions/api/activity_log_private.json b/chromium/chrome/common/extensions/api/activity_log_private.json
new file mode 100644
index 00000000000..e912874bcaf
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/activity_log_private.json
@@ -0,0 +1,116 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "activityLogPrivate",
+ "description": "none",
+ "types": [
+ {
+ "id": "ExtensionActivity",
+ "type": "object",
+ "description": "This corresponds to a row from the ActivityLog database. Fields will be blank if they were specified precisely in a lookup filter.",
+ "properties": {
+ "extensionId": {"type": "string", "optional": true},
+ "activityType": {"type": "string", "enum": ["api_call", "api_event", "content_script", "dom_access", "dom_event", "web_request"]},
+ "time": {"type": "number", "optional": true},
+ "apiCall": {"type": "string", "optional": true},
+ "args": {"type": "string", "optional": true},
+ "count": {"type": "number", "optional": true},
+ "pageUrl": {"type": "string", "optional": true},
+ "pageTitle": {"type": "string", "optional": true},
+ "argUrl": {"type": "string", "optional": true},
+ "other": {
+ "type": "object",
+ "optional": true,
+ "properties": {
+ "prerender": {"type": "boolean", "optional": true},
+ "domVerb": {"type": "string", "enum": ["getter", "setter", "method", "inserted", "xhr", "webrequest", "modified"], "optional": true},
+ "webRequest": {"type": "string", "optional": true},
+ "extra": {"type": "string", "optional": true}
+ }
+ }
+ }
+ },
+ {
+ "id": "Filter",
+ "type": "object",
+ "description": "Used to specify values for a lookup.",
+ "properties": {
+ "extensionId": {"type": "string", "optional": true, "description": "Exact match"},
+ "activityType": {"type": "string", "enum": ["api_call", "api_event", "content_script", "dom_access", "dom_event", "web_request", "any"], "description": "Exact match or any"},
+ "apiCall": {"type": "string", "optional": true, "description": "Exact match"},
+ "pageUrl": {"type": "string", "optional": true, "description": "Treated as a prefix"},
+ "argUrl": {"type": "string", "optional": true, "description": "Treated as a prefix"},
+ "daysAgo": {"type": "integer", "optional": true, "description": "Used to lookup a precise day; today is 0"}
+ }
+ },
+ {
+ "id": "ActivityResultSet",
+ "type": "object",
+ "description": "This holds the results of a lookup, the filter of the lookup, the time of the lookup, and whether there are more results that match.",
+ "properties": {
+ "activities": {"type": "array", "items": {"$ref": "ExtensionActivity"}}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getExtensionActivities",
+ "type": "function",
+ "description": "Retrieves activity from the ActivityLog that matches the specified filter.",
+ "parameters": [
+ {
+ "name": "filter",
+ "$ref": "Filter",
+ "description": "Fill out the fields that you want to search for in the database."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "ActivityResultSet"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "deleteDatabase",
+ "type": "function",
+ "description": "Deletes the entire ActivityLog database.",
+ "parameters": []
+ },
+ {
+ "name": "deleteUrls",
+ "type": "function",
+ "description": "Delete URLs in the ActivityLog database.",
+ "parameters": [
+ {
+ "name": "urls",
+ "type": "array",
+ "items": { "type": "string" },
+ "description": "Erases only the URLs listed; if empty, erases all URLs.",
+ "optional": true
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onExtensionActivity",
+ "type": "function",
+ "description": "Fired when a given extension performs another activity.",
+ "parameters": [
+ {
+ "name": "activity",
+ "$ref": "ExtensionActivity"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/adview.json b/chromium/chrome/common/extensions/api/adview.json
new file mode 100644
index 00000000000..68d88022b60
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/adview.json
@@ -0,0 +1,12 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "adview",
+ "description": "none",
+ "nodoc": true
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/api.gyp b/chromium/chrome/common/extensions/api/api.gyp
index 7fddbf97e90..0724879d8e7 100644
--- a/chromium/chrome/common/extensions/api/api.gyp
+++ b/chromium/chrome/common/extensions/api/api.gyp
@@ -18,103 +18,160 @@
],
'variables': {
'chromium_code': 1,
- 'schema_files': [
- 'alarms.idl',
- 'activity_log_private.json',
+ # Disable schema compiler to generate model extension API code.
+ # Only register the extension functions in extension system.
+ 'non_compiled_schema_files': [
'adview.json',
- 'app_current_window_internal.idl',
- 'app_runtime.idl',
- 'app_window.idl',
- 'audio.idl',
- 'autotest_private.idl',
- 'bluetooth.idl',
- 'bookmark_manager_private.json',
- 'bookmarks.json',
- 'braille_display_private.idl',
'browsing_data.json',
'chromeos_info_private.json',
- 'cloud_print_private.json',
- 'command_line_private.json',
- 'content_settings.json',
- 'context_menus.json',
- 'cookies.json',
- 'debugger.json',
- 'developer_private.idl',
- 'desktop_capture.idl',
- 'diagnostics.idl',
- 'dial.idl',
- 'dns.idl',
- 'downloads.idl',
- 'echo_private.json',
- 'downloads_internal.idl',
- 'enterprise_platform_keys_private.json',
- 'events.json',
- 'experimental_accessibility.json',
- 'experimental_discovery.idl',
- 'experimental_history.json',
- 'experimental_identity.idl',
- 'file_browser_private.json',
- 'location.idl',
- 'system_memory.idl',
'extension.json',
- 'feedback_private.idl',
- 'file_browser_handler_internal.json',
- 'file_system.idl',
- 'font_settings.json',
- 'history.json',
- 'i18n.json',
- 'identity.idl',
- 'identity_private.idl',
- 'idle.json',
'idltest.idl',
'infobars.json',
- 'input_ime.json',
- 'log_private.idl',
- 'management.json',
- 'manifest_types.json',
- 'mdns.idl',
- 'media_galleries.idl',
- 'media_galleries_private.idl',
'media_player_private.json',
- 'metrics_private.json',
'music_manager_private.idl',
- 'networking_private.json',
- 'notifications.idl',
- 'omnibox.json',
- 'page_capture.json',
- 'permissions.json',
'preferences_private.json',
- 'power.idl',
- 'push_messaging.idl',
- 'image_writer_private.idl',
- 'rtc_private.idl',
- 'runtime.json',
- 'serial.idl',
- 'sessions.json',
- 'signed_in_devices.idl',
- 'socket.idl',
- 'sockets_udp.idl',
- 'storage.json',
- 'sync_file_system.idl',
- 'system_indicator.idl',
- 'system_cpu.idl',
- 'system_display.idl',
- 'system_storage.idl',
- 'system_private.json',
- 'tab_capture.idl',
- 'tabs.json',
- 'terminal_private.json',
- 'test.json',
+ 'principals_private.idl',
'top_sites.json',
- 'usb.idl',
- 'virtual_keyboard_private.json',
- 'wallpaper.json',
- 'wallpaper_private.json',
- 'web_navigation.json',
- 'web_request.json',
- 'webstore_private.json',
- 'webview.json',
- 'windows.json',
+ ],
+ 'conditions': [
+ ['OS!="android"', {
+ 'schema_files': [
+ 'activity_log_private.json',
+ 'alarms.idl',
+ 'app_current_window_internal.idl',
+ 'app_runtime.idl',
+ 'app_window.idl',
+ 'audio.idl',
+ 'autotest_private.idl',
+ 'bluetooth.idl',
+ 'bookmark_manager_private.json',
+ 'bookmarks.json',
+ 'braille_display_private.idl',
+ 'cast_channel.idl',
+ 'cloud_print_private.json',
+ 'command_line_private.json',
+ 'content_settings.json',
+ 'context_menus.json',
+ 'cookies.json',
+ 'debugger.json',
+ 'desktop_capture.json',
+ 'developer_private.idl',
+ 'dial.idl',
+ 'dns.idl',
+ 'downloads.idl',
+ 'downloads_internal.idl',
+ 'echo_private.json',
+ 'enterprise_platform_keys_private.json',
+ 'events.json',
+ 'experimental_accessibility.json',
+ 'experimental_discovery.idl',
+ 'feedback_private.idl',
+ 'file_browser_private.idl',
+ 'file_system.idl',
+ 'file_system_provider.idl',
+ 'font_settings.json',
+ 'gcm.json',
+ 'hangouts_private.idl',
+ 'history.json',
+ 'i18n.json',
+ 'identity.idl',
+ 'identity_private.idl',
+ 'idle.json',
+ 'image_writer_private.idl',
+ 'input_ime.json',
+ 'location.idl',
+ 'management.json',
+ 'manifest_types.json',
+ 'mdns.idl',
+ 'media_galleries.idl',
+ 'media_galleries_private.idl',
+ 'metrics_private.json',
+ 'networking_private.json',
+ 'notifications.idl',
+ 'omnibox.json',
+ 'page_capture.json',
+ 'permissions.json',
+ 'power.idl',
+ 'push_messaging.idl',
+ 'runtime.json',
+ 'serial.idl',
+ 'sessions.json',
+ 'signed_in_devices.idl',
+ 'socket.idl',
+ 'sockets_tcp.idl',
+ 'sockets_tcp_server.idl',
+ 'sockets_udp.idl',
+ 'storage.json',
+ 'sync_file_system.idl',
+ 'system_cpu.idl',
+ 'system_display.idl',
+ 'system_indicator.idl',
+ 'system_memory.idl',
+ 'system_network.idl',
+ 'system_private.json',
+ 'system_storage.idl',
+ 'tab_capture.idl',
+ 'tabs.json',
+ 'terminal_private.json',
+ 'test.json',
+ 'types.json',
+ 'usb.idl',
+ 'virtual_keyboard_private.json',
+ 'web_navigation.json',
+ 'web_request.json',
+ # Despite the name, this API does not rely on any
+ # WebRTC-specific bits and as such does not belong in
+ # the enable_webrtc=0 section below.
+ 'webrtc_audio_private.idl',
+ 'webstore_private.json',
+ 'webview.json',
+ 'windows.json',
+ ],
+ }, { # OS=="android"
+ 'schema_files': [
+ # These should be eliminated. See crbug.com/305852.
+ 'activity_log_private.json',
+ 'alarms.idl',
+ 'app_runtime.idl',
+ 'app_window.idl',
+ 'context_menus.json',
+ 'downloads.idl',
+ 'events.json',
+ 'feedback_private.idl',
+ 'file_system.idl',
+ 'manifest_types.json',
+ 'omnibox.json',
+ 'permissions.json',
+ 'runtime.json',
+ 'storage.json',
+ 'sync_file_system.idl',
+ 'tab_capture.idl',
+ 'tabs.json',
+ 'types.json',
+ 'web_navigation.json',
+ 'web_request.json',
+ 'windows.json',
+ ],
+ }],
+ ['chromeos==1', {
+ 'schema_files': [
+ 'diagnostics.idl',
+ 'file_browser_handler_internal.json',
+ 'first_run_private.json',
+ 'log_private.idl',
+ 'screenlock_private.idl',
+ 'wallpaper.json',
+ 'wallpaper_private.json',
+ ],
+ }],
+ ['enable_webrtc==1', {
+ 'schema_files': [
+ 'cast_streaming_rtp_stream.idl',
+ 'cast_streaming_session.idl',
+ 'cast_streaming_udp_transport.idl',
+ 'webrtc_logging_private.idl',
+ ],
+ }],
],
'cc_dir': 'chrome/common/extensions/api',
'root_namespace': 'extensions::api',
@@ -124,54 +181,9 @@
'<(DEPTH)/sync/sync.gyp:sync',
],
'conditions': [
- ['OS=="android"', {
- 'sources!': [
- 'autotest_private.idl',
- 'bookmark_manager_private.json',
- 'browsing_data.json',
- 'chromeos_info_private.json',
- 'command_line_private.json',
- 'developer_private.idl',
- 'dial.idl',
- 'downloads_internal.idl',
- 'echo_private.json',
- 'enterprise_platform_keys_private.json',
- 'experimental_accessibility.json',
- 'experimental_discovery.idl',
- 'experimental_dns.idl',
- 'experimental_history.json',
- 'experimental_identity.idl',
- 'experimental_idltest.idl',
- 'extension.json',
- 'file_browser_handler_internal.json',
- 'font_settings.json',
- 'i18n.json',
- 'identity.idl',
- 'identity_private.idl',
- 'idle.json',
- 'infobars.json',
- 'input_ime.json',
- 'media_player_private.json',
- 'music_manager_private.idl',
- 'networking_private.json',
- 'power.idl',
- 'rtc_private.idl',
- 'system_indicator.idl',
- 'system_private.json',
- 'terminal_private.json',
- 'test.json',
- 'top_sites.json',
- 'webview.json',
- ],
- }],
- ['OS!="chromeos"', {
- 'schema_files!': [
- 'file_browser_handler_internal.json',
- 'log_private.idl',
- 'rtc_private.idl',
- 'virtual_keyboard_private.json',
- 'wallpaper.json',
- 'wallpaper_private.json',
+ ['chromeos==1', {
+ 'dependencies': [
+ '<(DEPTH)/chrome/chrome.gyp:drive_proto',
],
}],
],
diff --git a/chromium/chrome/common/extensions/api/app.json b/chromium/chrome/common/extensions/api/app.json
new file mode 100644
index 00000000000..d9bffa7b533
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/app.json
@@ -0,0 +1,94 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "app",
+ "description": "none",
+ "types": [
+ {
+ "id": "Details",
+ "description": "TODO (it's a manifest)",
+ "type": "object",
+ "properties": {},
+ "additionalProperties": { "type": "any" }
+ },
+ {
+ "id": "DOMWindow",
+ "type": "object",
+ "properties": {},
+ "additionalProperties": { "type": "any" }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getIsInstalled",
+ "description": "TODO",
+ "type": "function",
+ "parameters": [],
+ "returns": {
+ "name": "isInstalled",
+ "description": "TODO",
+ "type": "boolean"
+ }
+ },
+ {
+ "name": "installState",
+ "description": "TODO",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "state",
+ "enum": [ "not_installed", "installed", "disabled" ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "runningState",
+ "description": "TODO",
+ "type": "function",
+ "parameters": [],
+ "returns": {
+ "type": "string",
+ "enum": [ "running", "cannot_run", "ready_to_run" ]
+ }
+ },
+ {
+ "name": "getDetails",
+ "description": "TODO",
+ "type": "function",
+ "parameters": [],
+ "returns": {
+ "$ref": "Details",
+ "optional": true,
+ "description": "TODO"
+ }
+ },
+ {
+ "name": "getDetailsForFrame",
+ "description": "TODO",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "frame",
+ "description": "TODO",
+ "$ref": "DOMWindow"
+ }
+ ],
+ "returns": {
+ "$ref": "Details",
+ "optional": true,
+ "description": "TODO"
+ }
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/bookmark_manager_private.json b/chromium/chrome/common/extensions/api/bookmark_manager_private.json
new file mode 100644
index 00000000000..992c63f1416
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/bookmark_manager_private.json
@@ -0,0 +1,334 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "bookmarkManagerPrivate",
+ "description": "none",
+ "nodoc": true,
+ "types": [
+ {
+ "id": "BookmarkNodeDataElement",
+ "nodoc": true,
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "optional": true,
+ "description": "The ID of the bookmark. This is only provided if the data is from the same profile."
+ },
+ "parentId": {
+ "type": "string",
+ "optional": true,
+ "description": "The ID of the parent of the bookmark. This is only provided if the data is from the same profile."
+ },
+ "title": {"type": "string"},
+ "url": {
+ "type": "string",
+ "optional": true
+ },
+ "children": {
+ "type": "array",
+ "items": {"$ref": "BookmarkNodeDataElement"}
+ }
+ }
+ },
+ {
+ "id": "BookmarkNodeData",
+ "nodoc": true,
+ "type": "object",
+ "description": "Information about the drag and drop data for use with drag and drop events.",
+ "properties": {
+ "sameProfile": {"type": "boolean"},
+ "elements": {
+ "type": "array",
+ "items": {"$ref": "BookmarkNodeDataElement"}
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "copy",
+ "type": "function",
+ "description": "Copies the given bookmarks into the clipboard",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "idList",
+ "description": "An array of string-valued ids",
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 1
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "cut",
+ "type": "function",
+ "description": "Cuts the given bookmarks into the clipboard",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "idList",
+ "description": "An array of string-valued ids",
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 1
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "paste",
+ "type": "function",
+ "description": "Pastes bookmarks from the clipboard into the parent folder after the last selected node",
+ "nodoc": "true",
+ "parameters": [
+ {"type": "string", "name": "parentId"},
+ {
+ "name": "selectedIdList",
+ "description": "An array of string-valued ids for selected bookmarks",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 0
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "canPaste",
+ "type": "function",
+ "description": "Whether there are any bookmarks that can be pasted",
+ "nodoc": "true",
+ "parameters": [
+ {"type": "string", "name": "parentId", "description": "The ID of the folder to paste into"},
+ {"type": "function", "name": "callback", "parameters": [
+ {"name": "result", "type": "boolean"}
+ ]}
+ ]
+ },
+ {
+ "name": "sortChildren",
+ "type": "function",
+ "description": "Sorts the children of a given folder",
+ "nodoc": "true",
+ "parameters": [
+ {"type": "string", "name": "parentId", "description": "The ID of the folder to sort the children of"}
+ ]
+ },
+ {
+ "name": "getStrings",
+ "type": "function",
+ "description": "Gets the i18n strings for the bookmark manager",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "additionalProperties": {"type": "string"}
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "startDrag",
+ "type": "function",
+ "description": "Begins dragging a set of bookmarks",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "idList",
+ "description": "An array of string-valued ids",
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 1
+ }
+ ]
+ },
+ {
+ "name": "drop",
+ "type": "function",
+ "description": "Performs the drop action of the drag and drop session",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "parentId",
+ "description": "The ID of the folder that the drop was made",
+ "type": "string"
+ },
+ {
+ "name": "index",
+ "description": "The index of the position to drop at. If left out the dropped items will be placed at the end of the existing children",
+ "type": "integer",
+ "minimum": 0,
+ "optional": true
+ }
+ ]
+ },
+ {
+ "name": "getSubtree",
+ "type": "function",
+ "description": "Retrieves a bookmark hierarchy from the given node. If the node id is empty, it is the full tree. If foldersOnly is true, it will only return folders, not actual bookmarks.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "ID of the root of the tree to pull. If empty, the entire tree will be returned."
+ },
+ {
+ "name": "foldersOnly",
+ "type": "boolean",
+ "description": "Pass true to only return folders."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {"name": "results", "type": "array", "items": { "$ref": "bookmarks.BookmarkTreeNode"} }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "canEdit",
+ "type": "function",
+ "description": "Whether bookmarks can be modified",
+ "nodoc": "true",
+ "parameters": [
+ {"type": "function", "name": "callback", "parameters": [
+ {"name": "result", "type": "boolean"}
+ ]}
+ ]
+ },
+ {
+ "name": "canOpenNewWindows",
+ "type": "function",
+ "description": "Whether bookmarks can be opened in new windows",
+ "nodoc": "true",
+ "parameters": [
+ {"type": "function", "name": "callback", "parameters": [
+ {"name": "result", "type": "boolean"}
+ ]}
+ ]
+ },
+ {
+ "name": "removeTrees",
+ "type": "function",
+ "description": "Recursively removes list of bookmarks nodes.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "idList",
+ "description": "An array of string-valued ids",
+ "type": "array",
+ "items": {"type": "string"},
+ "minItems": 1
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "recordLaunch",
+ "type": "function",
+ "description": "",
+ "nodoc": "true",
+ "parameters": []
+ },
+ {
+ "name": "getMetaInfo",
+ "type": "function",
+ "description": "Gets a meta info field from a bookmark node",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "id",
+ "description": "The id of the bookmark to retrieve meta info from",
+ "type": "string"
+ },
+ {
+ "name": "key",
+ "description": "The key for the meta info to retrieve",
+ "type": "string"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "value",
+ "description": "The value of the meta info, if present",
+ "optional": true,
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setMetaInfo",
+ "type": "function",
+ "description": "Sets a meta info value for a bookmark node",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "id",
+ "description": "The id of the bookmark node to set the meta info on",
+ "type": "string"
+ },
+ {
+ "name": "key",
+ "description": "The key of the meta info to set",
+ "type": "string"
+ },
+ {
+ "name": "value",
+ "description": "The meta info to set",
+ "type": "string"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onDragEnter",
+ "type": "function",
+ "description": "Fired when dragging bookmarks over the document",
+ "parameters": [
+ {"name": "bookmarkNodeData", "$ref": "BookmarkNodeData"}
+ ]
+ },
+ {
+ "name": "onDragLeave",
+ "type": "function",
+ "description": "Fired when the drag and drop leaves the document",
+ "parameters": [
+ {"name": "bookmarkNodeData", "$ref": "BookmarkNodeData"}
+ ]
+ },
+ {
+ "name": "onDrop",
+ "type": "function",
+ "description": "Fired when the user drops bookmarks on the document",
+ "parameters": [
+ {"name": "bookmarkNodeData", "$ref": "BookmarkNodeData"}
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/bookmarks.json b/chromium/chrome/common/extensions/api/bookmarks.json
new file mode 100644
index 00000000000..e16836298db
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/bookmarks.json
@@ -0,0 +1,513 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "bookmarks",
+ "description": "Use the <code>chrome.bookmarks</code> API to create, organize, and otherwise manipulate bookmarks. Also see <a href='override.html'>Override Pages</a>, which you can use to create a custom Bookmark Manager page.",
+ "properties": {
+ "MAX_WRITE_OPERATIONS_PER_HOUR": {
+ "value": 100,
+ "description": "The maximum number of <code>move</code>, <code>update</code>, <code>create</code>, or <code>remove</code> operations that can be performed each hour. Updates that would cause this limit to be exceeded fail."
+ },
+ "MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE": {
+ "value": 2,
+ "description": "The maximum number of <code>move</code>, <code>update</code>, <code>create</code>, or <code>remove</code> operations that can be performed each minute, sustained over 10 minutes. Updates that would cause this limit to be exceeded fail."
+ }
+ },
+ "types": [
+ {
+ "id": "BookmarkTreeNode",
+ "type": "object",
+ "description": "A node (either a bookmark or a folder) in the bookmark tree. Child nodes are ordered within their parent folder.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "minimum": 0,
+ "description": "The unique identifier for the node. IDs are unique within the current profile, and they remain valid even after the browser is restarted."
+ },
+ "parentId": {
+ "type": "string",
+ "minimum": 0,
+ "optional": true,
+ "description": "The <code>id</code> of the parent folder. Omitted for the root node."
+ },
+ "index": {
+ "type": "integer",
+ "optional": true,
+ "description": "The 0-based position of this node within its parent folder."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "The URL navigated to when a user clicks the bookmark. Omitted for folders."
+ },
+ "title": {
+ "type": "string",
+ "description": "The text displayed for the node."
+ },
+ "dateAdded": {
+ "type": "number",
+ "optional": true,
+ "description": "When this node was created, in milliseconds since the epoch (<code>new Date(dateAdded)</code>)."
+ },
+ "dateGroupModified": {
+ "type": "number",
+ "optional": true,
+ "description": "When the contents of this folder last changed, in milliseconds since the epoch."
+ },
+ "children": {
+ "type": "array",
+ "optional": true,
+ "items": { "$ref": "BookmarkTreeNode" },
+ "description": "An ordered list of children of this node."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Retrieves the specified BookmarkTreeNode(s).",
+ "parameters": [
+ {
+ "name": "idOrIdList",
+ "description": "A single string-valued id, or an array of string-valued ids",
+ "choices": [
+ {
+ "type": "string",
+ "serialized_type": "int64"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "serialized_type": "int64"
+ },
+ "minItems": 1
+ }
+ ]
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getChildren",
+ "type": "function",
+ "description": "Retrieves the children of the specified BookmarkTreeNode id.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode"}
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getRecent",
+ "type": "function",
+ "description": "Retrieves the recently added bookmarks.",
+ "parameters": [
+ {
+ "type": "integer",
+ "minimum": 1,
+ "name": "numberOfItems",
+ "description": "The maximum number of items to return."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getTree",
+ "type": "function",
+ "description": "Retrieves the entire Bookmarks hierarchy.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getSubTree",
+ "type": "function",
+ "description": "Retrieves part of the Bookmarks hierarchy, starting at the specified node.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id",
+ "description": "The ID of the root of the subtree to retrieve."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "search",
+ "type": "function",
+ "description": "Searches for BookmarkTreeNodes matching the given query.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "query"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "BookmarkTreeNode" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates a bookmark or folder under the specified parentId. If url is NULL or missing, it will be a folder.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "bookmark",
+ "properties": {
+ "parentId": {
+ "type": "string",
+ "serialized_type": "int64",
+ "optional": true,
+ "description": "Defaults to the Other Bookmarks folder."
+ },
+ "index": {
+ "type": "integer",
+ "minimum": 0,
+ "optional": true
+ },
+ "title": {
+ "type": "string",
+ "optional": true
+ },
+ "url": {
+ "type": "string",
+ "optional": true
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "BookmarkTreeNode"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "move",
+ "type": "function",
+ "description": "Moves the specified BookmarkTreeNode to the provided location.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "destination",
+ "properties": {
+ "parentId": {
+ "type": "string",
+ "optional": true
+ },
+ "index": {
+ "type": "integer",
+ "minimum": 0,
+ "optional": true
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "BookmarkTreeNode"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "update",
+ "type": "function",
+ "description": "Updates the properties of a bookmark or folder. Specify only the properties that you want to change; unspecified properties will be left unchanged. <b>Note:</b> Currently, only 'title' and 'url' are supported.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "changes",
+ "properties": {
+ "title": {
+ "type": "string",
+ "optional": true
+ },
+ "url": {
+ "type": "string",
+ "optional": true
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "BookmarkTreeNode"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Removes a bookmark or an empty bookmark folder.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeTree",
+ "type": "function",
+ "description": "Recursively removes a bookmark folder.",
+ "parameters": [
+ {
+ "type": "string",
+ "serialized_type": "int64",
+ "name": "id"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "import",
+ "type": "function",
+ "description": "Imports bookmarks from a chrome html bookmark file",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "export",
+ "type": "function",
+ "description": "Exports bookmarks to a chrome html bookmark file",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onCreated",
+ "type": "function",
+ "description": "Fired when a bookmark or folder is created.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "id"
+ },
+ {
+ "$ref": "BookmarkTreeNode",
+ "name": "bookmark"
+ }
+ ]
+ },
+ {
+ "name": "onRemoved",
+ "type": "function",
+ "description": "Fired when a bookmark or folder is removed. When a folder is removed recursively, a single notification is fired for the folder, and none for its contents.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "removeInfo",
+ "properties": {
+ "parentId": { "type": "string" },
+ "index": { "type": "integer" }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onChanged",
+ "type": "function",
+ "description": "Fired when a bookmark or folder changes. <b>Note:</b> Currently, only title and url changes trigger this.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "changeInfo",
+ "properties": {
+ "title": { "type": "string" },
+ "url": {
+ "type": "string",
+ "optional": true
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onMoved",
+ "type": "function",
+ "description": "Fired when a bookmark or folder is moved to a different parent folder.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "moveInfo",
+ "properties": {
+ "parentId": { "type": "string" },
+ "index": { "type": "integer" },
+ "oldParentId": { "type": "string" },
+ "oldIndex": { "type": "integer" }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onChildrenReordered",
+ "type": "function",
+ "description": "Fired when the children of a folder have changed their order due to the order being sorted in the UI. This is not called as a result of a move().",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "id"
+ },
+ {
+ "type": "object",
+ "name": "reorderInfo",
+ "properties": {
+ "childIds": {
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onImportBegan",
+ "type": "function",
+ "description": "Fired when a bookmark import session is begun. Expensive observers should ignore onCreated updates until onImportEnded is fired. Observers should still handle other notifications immediately.",
+ "parameters": []
+ },
+ {
+ "name": "onImportEnded",
+ "type": "function",
+ "description": "Fired when a bookmark import session is ended.",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/browser_action.json b/chromium/chrome/common/extensions/api/browser_action.json
new file mode 100644
index 00000000000..e08851be3aa
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/browser_action.json
@@ -0,0 +1,350 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "browserAction",
+ "description": "Use browser actions to put icons in the main Google Chrome toolbar, to the right of the address bar. In addition to its <a href='#icon'>icon</a>, a browser action can also have a <a href='#tooltip'>tooltip</a>, a <a href='#badge'>badge</a>, and a <a href = '#popups'>popup</a>.",
+ "types": [
+ {
+ "id": "ColorArray",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 255
+ },
+ "minItems": 4,
+ "maxItems": 4
+ },
+ {
+ "id": "ImageDataType",
+ "type": "object",
+ "isInstanceOf": "ImageData",
+ "additionalProperties": { "type": "any" },
+ "description": "Pixel data for an image. Must be an ImageData object (for example, from a <code>canvas</code> element)."
+ }
+ ],
+ "functions": [
+ {
+ "name": "setTitle",
+ "type": "function",
+ "description": "Sets the title of the browser action. This shows up in the tooltip.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "The string the browser action should display when moused over."
+ },
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getTitle",
+ "type": "function",
+ "description": "Gets the title of the browser action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Specify the tab to get the title from. If no tab is specified, the non-tab-specific title is returned."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setIcon",
+ "type": "function",
+ "description": "Sets the icon for the browser action. The icon can be specified either as the path to an image file or as the pixel data from a canvas element, or as dictionary of either one of those. Either the <b>path</b> or the <b>imageData</b> property must be specified.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "imageData": {
+ "choices": [
+ { "$ref": "ImageDataType" },
+ {
+ "type": "object",
+ "properties": {
+ "19": {"$ref": "ImageDataType", "optional": true},
+ "38": {"$ref": "ImageDataType", "optional": true}
+ }
+ }
+ ],
+ "optional": true,
+ "description": "Either an ImageData object or a dictionary {size -> ImageData} representing icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}'"
+ },
+ "path": {
+ "choices": [
+ { "type": "string" },
+ {
+ "type": "object",
+ "properties": {
+ "19": {"type": "string", "optional": true},
+ "38": {"type": "string", "optional": true}
+ }
+ }
+ ],
+ "optional": true,
+ "description": "Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}'"
+ },
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "setPopup",
+ "type": "function",
+ "description": "Sets the html document to be opened as a popup when the user clicks on the browser action's icon.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "minimum": 0,
+ "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
+ },
+ "popup": {
+ "type": "string",
+ "description": "The html file to show in a popup. If set to the empty string (''), no popup is shown."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getPopup",
+ "type": "function",
+ "description": "Gets the html document set as the popup for this browser action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Specify the tab to get the popup from. If no tab is specified, the non-tab-specific popup is returned."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setBadgeText",
+ "type": "function",
+ "description": "Sets the badge text for the browser action. The badge is displayed on top of the icon.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "text": {
+ "type": "string",
+ "description": "Any number of characters can be passed, but only about four can fit in the space."
+ },
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getBadgeText",
+ "type": "function",
+ "description": "Gets the badge text of the browser action. If no tab is specified, the non-tab-specific badge text is returned.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Specify the tab to get the badge text from. If no tab is specified, the non-tab-specific badge text is returned."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setBadgeBackgroundColor",
+ "type": "function",
+ "description": "Sets the background color for the badge.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "color": {
+ "description": "An array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is <code>[255, 0, 0, 255]</code>. Can also be a string with a CSS value, with opaque red being <code>#FF0000</code> or <code>#F00</code>.",
+ "choices": [
+ {"type": "string"},
+ {"$ref": "ColorArray"}
+ ]
+ },
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Limits the change to when a particular tab is selected. Automatically resets when the tab is closed."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getBadgeBackgroundColor",
+ "type": "function",
+ "description": "Gets the background color of the browser action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "optional": true,
+ "description": "Specify the tab to get the badge background color from. If no tab is specified, the non-tab-specific badge background color is returned."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "ColorArray"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "enable",
+ "type": "function",
+ "description": "Enables the browser action for a tab. By default, browser actions are enabled.",
+ "parameters": [
+ {
+ "type": "integer",
+ "optional": true,
+ "name": "tabId",
+ "minimum": 0,
+ "description": "The id of the tab for which you want to modify the browser action."
+ }
+ ]
+ },
+ {
+ "name": "disable",
+ "type": "function",
+ "description": "Disables the browser action for a tab.",
+ "parameters": [
+ {
+ "type": "integer",
+ "optional": true,
+ "name": "tabId",
+ "minimum": 0,
+ "description": "The id of the tab for which you want to modify the browser action."
+ }
+ ]
+ },
+ {
+ "name": "openPopup",
+ "type": "function",
+ "description": "Opens the extension popup window in the active window but does not grant tab permissions.",
+ "nodoc": true,
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "popupView",
+ "type": "object",
+ "optional": true,
+ "description": "JavaScript 'window' object for the popup window if it was succesfully opened.",
+ "additionalProperties": { "type": "any" }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onClicked",
+ "type": "function",
+ "description": "Fired when a browser action icon is clicked. This event will not fire if the browser action has a popup.",
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "tabs.Tab"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/browsing_data.json b/chromium/chrome/common/extensions/api/browsing_data.json
new file mode 100644
index 00000000000..332186d2aef
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/browsing_data.json
@@ -0,0 +1,389 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "browsingData",
+ "description": "Use the <code>chrome.browsingData</code> API to remove browsing data from a user's local profile.",
+ "types": [
+ {
+ "id": "RemovalOptions",
+ "type": "object",
+ "description": "Options that determine exactly what data will be removed.",
+ "properties": {
+ "since": {
+ "type": "number",
+ "optional": true,
+ "description": "Remove data accumulated on or after this date, represented in milliseconds since the epoch (accessible via the <code>getTime</code> method of the JavaScript <code>Date</code> object). If absent, defaults to 0 (which would remove all browsing data)."
+ },
+ "originTypes": {
+ "type": "object",
+ "optional": true,
+ "description": "An object whose properties specify which origin types ought to be cleared. If this object isn't specified, it defaults to clearing only \"unprotected\" origins. Please ensure that you <em>really</em> want to remove application data before adding 'protectedWeb' or 'extensions'.",
+ "properties": {
+ "unprotectedWeb": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Normal websites."
+ },
+ "protectedWeb": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites that have been installed as hosted applications (be careful!)."
+ },
+ "extension": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Extensions and packaged applications a user has installed (be _really_ careful!)."
+ }
+ }
+ }
+ }
+ },
+ {
+ "id": "DataTypeSet",
+ "type": "object",
+ "description": "A set of data types. Missing data types are interpreted as <code>false</code>.",
+ "properties": {
+ "appcache": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' appcaches."
+ },
+ "cache": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's cache. Note: when removing data, this clears the <em>entire</em> cache: it is not limited to the range you specify."
+ },
+ "cookies": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's cookies."
+ },
+ "downloads": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's download list."
+ },
+ "fileSystems": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' file systems."
+ },
+ "formData": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's stored form data."
+ },
+ "history": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's history."
+ },
+ "indexedDB": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' IndexedDB data."
+ },
+ "localStorage": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' local storage data."
+ },
+ "serverBoundCertificates": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Server-bound certificates."
+ },
+ "pluginData": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Plugins' data."
+ },
+ "passwords": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Stored passwords."
+ },
+ "webSQL": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' WebSQL data."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "settings",
+ "description": "Reports which types of data are currently selected in the 'Clear browsing data' settings UI. Note: some of the data types included in this API are not available in the settings UI, and some UI settings control more than one data type listed here.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "properties": {
+ "options": {
+ "$ref": "RemovalOptions"
+ },
+ "dataToRemove": {
+ "$ref": "DataTypeSet",
+ "description": "All of the types will be present in the result, with values of <code>true</code> if they are both selected to be removed and permitted to be removed, otherwise <code>false</code>."
+ },
+ "dataRemovalPermitted": {
+ "$ref": "DataTypeSet",
+ "description": "All of the types will be present in the result, with values of <code>true</code> if they are permitted to be removed (e.g., by enterprise policy) and <code>false</code> if not."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "description": "Clears various types of browsing data stored in a user's profile.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "dataToRemove",
+ "$ref": "DataTypeSet",
+ "description": "The set of data types to remove."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when deletion has completed.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeAppcache",
+ "description": "Clears websites' appcache data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when websites' appcache data has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeCache",
+ "description": "Clears the browser's cache.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's cache has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeCookies",
+ "description": "Clears the browser's cookies and server-bound certificates modified within a particular timeframe.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's cookies and server-bound certificates have been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeDownloads",
+ "description": "Clears the browser's list of downloaded files (<em>not</em> the downloaded files themselves).",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's list of downloaded files has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeFileSystems",
+ "description": "Clears websites' file system data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when websites' file systems have been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeFormData",
+ "description": "Clears the browser's stored form data (autofill).",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's form data has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeHistory",
+ "description": "Clears the browser's history.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's history has cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeIndexedDB",
+ "description": "Clears websites' IndexedDB data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when websites' IndexedDB data has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeLocalStorage",
+ "description": "Clears websites' local storage data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when websites' local storage has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removePluginData",
+ "description": "Clears plugins' data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when plugins' data has been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removePasswords",
+ "description": "Clears the browser's stored passwords.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the browser's passwords have been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "removeWebSQL",
+ "description": "Clears websites' WebSQL data.",
+ "type": "function",
+ "parameters": [
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when websites' WebSQL databases have been cleared.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/chromeos_info_private.json b/chromium/chrome/common/extensions/api/chromeos_info_private.json
new file mode 100644
index 00000000000..f39c8973d4c
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/chromeos_info_private.json
@@ -0,0 +1,76 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "chromeosInfoPrivate",
+ "description": "none",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/info_private_api.h"
+ },
+ "platforms": ["chromeos"],
+ "nodoc": "true",
+ "functions": [
+ {
+ "name": "get",
+ "description": "Fetches customization values for the given property names. See property names in the declaration of the returned dictionary.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "propertyNames",
+ "type": "array",
+ "description": "Chrome OS Property names",
+ "items": {"type": "string"}
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "propertiesDictionary",
+ "type": "object",
+ "description": "Dictionary which contains all requested properties",
+ "properties": {
+ "board" : {"type": "string", "optional": "true", "description": "Board name"},
+ "homeProvider" : {"type": "string", "optional": "true", "description": "Home provider which is used by the cellular device"},
+ "hwid": {"type": "string", "optional": "true", "description": "Hardware ID"},
+ "initialLocale" : {"type": "string", "optional": "true", "description": "Initial locale for the device"},
+ "isOwner" : {"type": "boolean", "optional": "true", "description": "True if current logged in user is device owner"},
+ "timezone" : {"type": "string", "optional": "true", "description": "Timezone"},
+ "supportedTimezones" : {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "optional": "true",
+ "description": "List of supported timezones definitions."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "description": "Sets values for the given system property.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "propertyName",
+ "type": "string",
+ "enum": ["timezone"],
+ "description": "Chrome OS system property name"
+ },
+ {
+ "name": "propertyVame",
+ "type": "string",
+ "description": "Chrome OS system property value"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/cloud_print_private.json b/chromium/chrome/common/extensions/api/cloud_print_private.json
new file mode 100644
index 00000000000..edd3e023520
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/cloud_print_private.json
@@ -0,0 +1,132 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "cloudPrintPrivate",
+ "description": "none",
+ "types": [
+ {
+ "id": "PrinterSettings",
+ "type": "object",
+ "description": "Settings per printer.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Unique printer id."
+ },
+ "connect": {
+ "type": "boolean",
+ "description": "Whether printer is selected."
+ }
+ }
+ },
+ {
+ "id": "UserSettings",
+ "type": "object",
+ "description": "Settings set by user.",
+ "properties": {
+ "printers": {
+ "description": "Printer settings.",
+ "type": "array",
+ "items": {
+ "$ref": "PrinterSettings"
+ }
+ },
+ "connectNewPrinters": {
+ "type": "boolean",
+ "description": "Whether should printer be connected."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "setupConnector",
+ "description": "Setup Cloud Print Connector.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "userEmail",
+ "type": "string",
+ "description": "The email address of the user."
+ },
+ {
+ "name": "robotEmail",
+ "type": "string",
+ "description": "The email address of the robot account."
+ },
+ {
+ "name": "credentials",
+ "type": "string",
+ "description": "The login credentials(OAuth2 Auth code)."
+ },
+ {
+ "name": "userSettings",
+ "$ref": "UserSettings",
+ "description": "Options configured by user."
+ }
+ ]
+ },
+ {
+ "name": "getHostName",
+ "description": "Returns local hostname.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called to return host name.",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string",
+ "description": "Host name."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getPrinters",
+ "description": "Returns local printers.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called to return printers.",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "List of printer names."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getClientId",
+ "description": "Gets the Client ID used to access Google service APIs.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called to return the client ID.",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string",
+ "description": "Client ID."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/command_line_private.json b/chromium/chrome/common/extensions/api/command_line_private.json
new file mode 100644
index 00000000000..90c052d1455
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/command_line_private.json
@@ -0,0 +1,35 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "commandLinePrivate",
+ "description": "none",
+ "functions": [
+ {
+ "name": "hasSwitch",
+ "type": "function",
+ "description": "Returns whether a switch is specified on the command line when launching Chrome.",
+ "parameters": [
+ {
+ "name": "name",
+ "type": "string",
+ "description": "The name of a command line switch, without leading \"--\", such as \"enable-experimental-extension-apis\"."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "boolean",
+ "description": "Whether the switch is specified on the command line."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/commands.json b/chromium/chrome/common/extensions/api/commands.json
new file mode 100644
index 00000000000..c02008e75a8
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/commands.json
@@ -0,0 +1,70 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "commands",
+ "description": "Use the commands API to add keyboard shortcuts that trigger actions in your extension, for example, an action to open the browser action or send a command to the extension.",
+ "types": [
+ {
+ "id": "Command",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "optional": true,
+ "description": "The name of the Extension Command"
+ },
+ "description": {
+ "type": "string",
+ "optional": true,
+ "description": "The Extension Command description"
+ },
+ "shortcut": {
+ "type": "string",
+ "optional": true,
+ "description": "The shortcut active for this command, or blank if not active."
+ }
+ }
+ }
+ ],
+ "events": [
+ {
+ "name": "onCommand",
+ "description": "Fired when a registered command is activated using a keyboard shortcut.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "command",
+ "type": "string"
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getAll",
+ "type": "function",
+ "description": "Returns all the registered extension commands for this extension and their shortcut (if active).",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "commands",
+ "type": "array",
+ "items": {
+ "$ref": "Command"
+ }
+ }
+ ],
+ "description": "Called to return the registered commands."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/content_settings.json b/chromium/chrome/common/extensions/api/content_settings.json
new file mode 100644
index 00000000000..2a0b86a1d1b
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/content_settings.json
@@ -0,0 +1,226 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "contentSettings",
+ "description": "Use the <code>chrome.contentSettings</code> API to change settings that control whether websites can use features such as cookies, JavaScript, and plug-ins. More generally speaking, content settings allow you to customize Chrome's behavior on a per-site basis instead of globally.",
+ "compiler_options": {
+ "generate_type_functions": true
+ },
+ "types": [
+ {
+ "id": "ResourceIdentifier",
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The resource identifier for the given content type."
+ },
+ "description": {
+ "type": "string",
+ "optional": true,
+ "description": "A human readable description of the resource."
+ }
+ },
+ "description": "The only content type using resource identifiers is $ref:contentSettings.plugins. For more information, see <a href=\"contentSettings.html#resource-identifiers\">Resource Identifiers</a>."
+ },
+ {
+ "id": "ContentSetting",
+ "js_module": "ContentSetting",
+ "type": "object",
+ "functions": [
+ {
+ "name": "clear",
+ "type": "function",
+ "description": "Clear all content setting rules set by this extension.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to clear the setting (default: regular). One of<br><var>regular</var>: setting for regular profile (which is inherited by the incognito profile if not overridden elsewhere),<br><var>incognito_session_only</var>: setting for incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular settings)."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets the current content setting for a given pair of URLs.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "primaryUrl": {
+ "type": "string",
+ "description": "The primary URL for which the content setting should be retrieved. Note that the meaning of a primary URL depends on the content type."
+ },
+ "secondaryUrl": {
+ "type": "string",
+ "description": "The secondary URL for which the content setting should be retrieved. Defaults to the primary URL. Note that the meaning of a secondary URL depends on the content type, and not all content types use secondary URLs.",
+ "optional": true
+ },
+ "resourceIdentifier": {
+ "$ref": "ResourceIdentifier",
+ "optional": true,
+ "description": "A more specific identifier of the type of content for which the settings should be retrieved."
+ },
+ "incognito": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether to check the content settings for an incognito session. (default false)"
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "setting": {
+ "type": "any",
+ "description": "The content setting. See the description of the individual ContentSetting objects for the possible values."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "type": "function",
+ "description": "Applies a new content setting rule.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "primaryPattern": {
+ "type": "string",
+ "description": "The pattern for the primary URL. For details on the format of a pattern, see <a href='contentSettings.html#patterns'>Content Setting Patterns</a>."
+ },
+ "secondaryPattern": {
+ "type": "string",
+ "description": "The pattern for the secondary URL. Defaults to matching all URLs. For details on the format of a pattern, see <a href='contentSettings.html#patterns'>Content Setting Patterns</a>.",
+ "optional": true
+ },
+ "resourceIdentifier": {
+ "$ref": "ResourceIdentifier",
+ "optional": true,
+ "description": "The resource identifier for the content type."
+ },
+ "setting": {
+ "type": "any",
+ "description": "The setting applied by this rule. See the description of the individual ContentSetting objects for the possible values."
+ },
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to set the setting (default: regular). One of<br><var>regular</var>: setting for regular profile (which is inherited by the incognito profile if not overridden elsewhere),<br><var>incognito_session_only</var>: setting for incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular settings)."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getResourceIdentifiers",
+ "type": "function",
+ "description": "",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "resourceIdentifiers",
+ "type": "array",
+ "description": "A list of resource identifiers for this content type, or <var>undefined</var> if this content type does not use resource identifiers.",
+ "optional": true,
+ "items": {
+ "$ref": "ResourceIdentifier"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "cookies": {
+ "$ref": "ContentSetting",
+ "description": "Whether to allow cookies and other local data to be set by websites. One of<br><var>allow</var>: Accept cookies,<br><var>block</var>: Block cookies,<br><var>session_only</var>: Accept cookies only for the current session. <br>Default is <var>allow</var>.<br>The primary URL is the URL representing the cookie origin. The secondary URL is the URL of the top-level frame.",
+ "value": [
+ "cookies",
+ {"type":"string", "enum": ["allow", "block", "session_only"]}
+ ]
+ },
+ "images": {
+ "$ref": "ContentSetting",
+ "description": "Whether to show images. One of<br><var>allow</var>: Show images,<br><var>block</var>: Don't show images. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is the URL of the image.",
+ "value": [
+ "images",
+ {"type":"string", "enum": ["allow", "block"]}
+ ]
+ },
+ "javascript": {
+ "$ref": "ContentSetting",
+ "description": "Whether to run JavaScript. One of<br><var>allow</var>: Run JavaScript,<br><var>block</var>: Don't run JavaScript. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
+ "value": [
+ "javascript",
+ {"type":"string", "enum": ["allow", "block"]}
+ ]
+ },
+ "plugins": {
+ "$ref": "ContentSetting",
+ "description": "Whether to run plug-ins. One of<br><var>allow</var>: Run plug-ins automatically,<br><var>block</var>: Don't run plug-ins automatically. <br>Default is <var>allow</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
+ "value": [
+ "plugins",
+ {"type":"string", "enum": ["allow", "block"]}
+ ]
+ },
+ "popups": {
+ "$ref": "ContentSetting",
+ "description": "Whether to allow sites to show pop-ups. One of<br><var>allow</var>: Allow sites to show pop-ups,<br><var>block</var>: Don't allow sites to show pop-ups. <br>Default is <var>block</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
+ "value": [
+ "popups",
+ {"type":"string", "enum": ["allow", "block"]}
+ ]
+ },
+ "notifications": {
+ "$ref": "ContentSetting",
+ "description": "Whether to allow sites to show desktop notifications. One of<br><var>allow</var>: Allow sites to show desktop notifications,<br><var>block</var>: Don't allow sites to show desktop notifications,<br><var>ask</var>: Ask when a site wants to show desktop notifications. <br>Default is <var>ask</var>.<br>The primary URL is the main-frame URL. The secondary URL is not used.",
+ "value": [
+ "notifications",
+ {"type":"string", "enum": ["allow", "block", "ask"]}
+ ]
+ }
+ }
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/context_menus.json b/chromium/chrome/common/extensions/api/context_menus.json
new file mode 100644
index 00000000000..a96bbaeeff3
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/context_menus.json
@@ -0,0 +1,313 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "contextMenus",
+ "description": "Use the <code>chrome.contextMenus</code> API to add items to Google Chrome's context menu. You can choose what types of objects your context menu additions apply to, such as images, hyperlinks, and pages.",
+ "types": [
+ {
+ "id": "OnClickData",
+ "type": "object",
+ "description": "Information sent when a context menu item is clicked.",
+ "properties": {
+ "menuItemId": {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "description": "The ID of the menu item that was clicked."
+ },
+ "parentMenuItemId": {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "optional": true,
+ "description": "The parent ID, if any, for the item clicked."
+ },
+ "mediaType": {
+ "type": "string",
+ "optional": true,
+ "description": "One of 'image', 'video', or 'audio' if the context menu was activated on one of these types of elements."
+ },
+ "linkUrl": {
+ "type": "string",
+ "optional": true,
+ "description": "If the element is a link, the URL it points to."
+ },
+ "srcUrl": {
+ "type": "string",
+ "optional": true,
+ "description": "Will be present for elements with a 'src' URL."
+ },
+ "pageUrl": {
+ "type": "string",
+ "optional": true,
+ "description": "The URL of the page where the menu item was clicked. This property is not set if the click occured in a context where there is no current page, such as in a launcher context menu."
+ },
+ "frameUrl": {
+ "type": "string",
+ "optional": true,
+ "description": " The URL of the frame of the element where the context menu was clicked, if it was in a frame."
+ },
+ "selectionText": {
+ "type": "string",
+ "optional": true,
+ "description": "The text for the context selection, if any."
+ },
+ "editable": {
+ "type": "boolean",
+ "description": "A flag indicating whether the element is editable (text input, textarea, etc.)."
+ },
+ "wasChecked": {
+ "type": "boolean",
+ "optional": true,
+ "description": "A flag indicating the state of a checkbox or radio item before it was clicked."
+ },
+ "checked": {
+ "type": "boolean",
+ "optional": true,
+ "description": "A flag indicating the state of a checkbox or radio item after it is clicked."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates a new context menu item. Note that if an error occurs during creation, you may not find out until the creation callback fires (the details will be in chrome.runtime.lastError).",
+ "returns": {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "description": "The ID of the newly created item."
+ },
+ "parameters": [
+ {
+ "type": "object",
+ "name": "createProperties",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["normal", "checkbox", "radio", "separator"],
+ "optional": true,
+ "description": "The type of menu item. Defaults to 'normal' if not specified."
+ },
+ "id": {
+ "type": "string",
+ "optional": true,
+ "description": "The unique ID to assign to this item. Mandatory for event pages. Cannot be the same as another ID for this extension."
+ },
+ "title": {
+ "type": "string",
+ "optional": true,
+ "description": "The text to be displayed in the item; this is <em>required</em> unless <em>type</em> is 'separator'. When the context is 'selection', you can use <code>%s</code> within the string to show the selected text. For example, if this parameter's value is \"Translate '%s' to Pig Latin\" and the user selects the word \"cool\", the context menu item for the selection is \"Translate 'cool' to Pig Latin\"."
+ },
+ "checked": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The initial state of a checkbox or radio item: true for selected and false for unselected. Only one radio item can be selected at a time in a given group of radio items."
+ },
+ "contexts": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio", "launcher"]
+ },
+ "minItems": 1,
+ "optional": true,
+ "description": "List of contexts this menu item will appear in. Defaults to ['page'] if not specified. Specifying ['all'] is equivalent to the combination of all other contexts except for 'launcher'. The 'launcher' context is only supported by apps and is used to add menu items to the context menu that appears when clicking on the app icon in the launcher/taskbar/dock/etc. Different platforms might put limitations on what is actually supported in a launcher context menu."
+ },
+ "onclick": {
+ "type": "function",
+ "optional": true,
+ "description": "A function that will be called back when the menu item is clicked. Event pages cannot use this; instead, they should register a listener for chrome.contextMenus.onClicked.",
+ "parameters": [
+ {
+ "name": "info",
+ "$ref": "OnClickData",
+ "description": "Information about the item clicked and the context where the click happened."
+ },
+ {
+ "name": "tab",
+ "$ref": "tabs.Tab",
+ "description": "The details of the tab where the click took place."
+ }
+ ]
+ },
+ "parentId": {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "optional": true,
+ "description": "The ID of a parent menu item; this makes the item a child of a previously added item."
+ },
+ "documentUrlPatterns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "Lets you restrict the item to apply only to documents whose URL matches one of the given patterns. (This applies to frames as well.) For details on the format of a pattern, see <a href='match_patterns.html'>Match Patterns</a>."
+ },
+ "targetUrlPatterns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "Similar to documentUrlPatterns, but lets you filter based on the src attribute of img/audio/video tags and the href of anchor tags."
+ },
+ "enabled": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether this context menu item is enabled or disabled. Defaults to true."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the item has been created in the browser. If there were any problems creating the item, details will be available in chrome.runtime.lastError.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "update",
+ "type": "function",
+ "description": "Updates a previously created context menu item.",
+ "parameters": [
+ {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "name": "id",
+ "description": "The ID of the item to update."
+ },
+ {
+ "type": "object",
+ "name": "updateProperties",
+ "description": "The properties to update. Accepts the same values as the create function.",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["normal", "checkbox", "radio", "separator"],
+ "optional": true
+ },
+ "title": {
+ "type": "string",
+ "optional": true
+ },
+ "checked": {
+ "type": "boolean",
+ "optional": true
+ },
+ "contexts": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio", "launcher"]
+ },
+ "minItems": 1,
+ "optional": true
+ },
+ "onclick": {
+ "type": "function",
+ "optional": true
+ },
+ "parentId": {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "optional": true,
+ "description": "Note: You cannot change an item to be a child of one of its own descendants."
+ },
+ "documentUrlPatterns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true
+ },
+ "targetUrlPatterns": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true
+ },
+ "enabled": {
+ "type": "boolean",
+ "optional": true
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [],
+ "description": "Called when the context menu has been updated."
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Removes a context menu item.",
+ "parameters": [
+ {
+ "choices": [
+ { "type": "integer" },
+ { "type": "string" }
+ ],
+ "name": "menuItemId",
+ "description": "The ID of the context menu item to remove."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [],
+ "description": "Called when the context menu has been removed."
+ }
+ ]
+ },
+ {
+ "name": "removeAll",
+ "type": "function",
+ "description": "Removes all context menu items added by this extension.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [],
+ "description": "Called when removal is complete."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onClicked",
+ "type": "function",
+ "description": "Fired when a context menu item is clicked.",
+ "parameters": [
+ {
+ "name": "info",
+ "$ref": "OnClickData",
+ "description": "Information about the item clicked and the context where the click happened."
+ },
+ {
+ "name": "tab",
+ "$ref": "tabs.Tab",
+ "description": "The details of the tab where the click took place. If the click did not take place in a tab, this parameter will be missing.",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/cookies.json b/chromium/chrome/common/extensions/api/cookies.json
new file mode 100644
index 00000000000..8c083ac6d19
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/cookies.json
@@ -0,0 +1,200 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "cookies",
+ "description": "Use the <code>chrome.cookies</code> API to query and modify cookies, and to be notified when they change.",
+ "types": [
+ {
+ "id": "Cookie",
+ "type": "object",
+ "description": "Represents information about an HTTP cookie.",
+ "properties": {
+ "name": {"type": "string", "description": "The name of the cookie."},
+ "value": {"type": "string", "description": "The value of the cookie."},
+ "domain": {"type": "string", "description": "The domain of the cookie (e.g. \"www.google.com\", \"example.com\")."},
+ "hostOnly": {"type": "boolean", "description": "True if the cookie is a host-only cookie (i.e. a request's host must exactly match the domain of the cookie)."},
+ "path": {"type": "string", "description": "The path of the cookie."},
+ "secure": {"type": "boolean", "description": "True if the cookie is marked as Secure (i.e. its scope is limited to secure channels, typically HTTPS)."},
+ "httpOnly": {"type": "boolean", "description": "True if the cookie is marked as HttpOnly (i.e. the cookie is inaccessible to client-side scripts)."},
+ "session": {"type": "boolean", "description": "True if the cookie is a session cookie, as opposed to a persistent cookie with an expiration date."},
+ "expirationDate": {"type": "number", "optional": true, "description": "The expiration date of the cookie as the number of seconds since the UNIX epoch. Not provided for session cookies."},
+ "storeId": {"type": "string", "description": "The ID of the cookie store containing this cookie, as provided in getAllCookieStores()."}
+ }
+ },
+ {
+ "id": "CookieStore",
+ "type": "object",
+ "description": "Represents a cookie store in the browser. An incognito mode window, for instance, uses a separate cookie store from a non-incognito window.",
+ "properties": {
+ "id": {"type": "string", "description": "The unique identifier for the cookie store."},
+ "tabIds": {"type": "array", "items": {"type": "integer"}, "description": "Identifiers of all the browser tabs that share this cookie store."}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Retrieves information about a single cookie. If more than one cookie of the same name exists for the given URL, the one with the longest path will be returned. For cookies with the same path length, the cookie with the earliest creation time will be returned.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Details to identify the cookie being retrieved.",
+ "properties": {
+ "url": {"type": "string", "description": "The URL with which the cookie to retrieve is associated. This argument may be a full URL, in which case any data following the URL path (e.g. the query string) is simply ignored. If host permissions for this URL are not specified in the manifest file, the API call will fail."},
+ "name": {"type": "string", "description": "The name of the cookie to retrieve."},
+ "storeId": {"type": "string", "optional": true, "description": "The ID of the cookie store in which to look for the cookie. By default, the current execution context's cookie store will be used."}
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "cookie", "$ref": "Cookie", "optional": true, "description": "Contains details about the cookie. This parameter is null if no such cookie was found."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAll",
+ "type": "function",
+ "description": "Retrieves all cookies from a single cookie store that match the given information. The cookies returned will be sorted, with those with the longest path first. If multiple cookies have the same path length, those with the earliest creation time will be first.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Information to filter the cookies being retrieved.",
+ "properties": {
+ "url": {"type": "string", "optional": true, "description": "Restricts the retrieved cookies to those that would match the given URL."},
+ "name": {"type": "string", "optional": true, "description": "Filters the cookies by name."},
+ "domain": {"type": "string", "optional": true, "description": "Restricts the retrieved cookies to those whose domains match or are subdomains of this one."},
+ "path": {"type": "string", "optional": true, "description": "Restricts the retrieved cookies to those whose path exactly matches this string."},
+ "secure": {"type": "boolean", "optional": true, "description": "Filters the cookies by their Secure property."},
+ "session": {"type": "boolean", "optional": true, "description": "Filters out session vs. persistent cookies."},
+ "storeId": {"type": "string", "optional": true, "description": "The cookie store to retrieve cookies from. If omitted, the current execution context's cookie store will be used."}
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "cookies", "type": "array", "items": {"$ref": "Cookie"}, "description": "All the existing, unexpired cookies that match the given cookie info."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "type": "function",
+ "description": "Sets a cookie with the given cookie data; may overwrite equivalent cookies if they exist.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Details about the cookie being set.",
+ "properties": {
+ "url": {"type": "string", "description": "The request-URI to associate with the setting of the cookie. This value can affect the default domain and path values of the created cookie. If host permissions for this URL are not specified in the manifest file, the API call will fail."},
+ "name": {"type": "string", "optional": true, "description": "The name of the cookie. Empty by default if omitted."},
+ "value": {"type": "string", "optional": true, "description": "The value of the cookie. Empty by default if omitted."},
+ "domain": {"type": "string", "optional": true, "description": "The domain of the cookie. If omitted, the cookie becomes a host-only cookie."},
+ "path": {"type": "string", "optional": true, "description": "The path of the cookie. Defaults to the path portion of the url parameter."},
+ "secure": {"type": "boolean", "optional": true, "description": "Whether the cookie should be marked as Secure. Defaults to false."},
+ "httpOnly": {"type": "boolean", "optional": true, "description": "Whether the cookie should be marked as HttpOnly. Defaults to false."},
+ "expirationDate": {"type": "number", "optional": true, "description": "The expiration date of the cookie as the number of seconds since the UNIX epoch. If omitted, the cookie becomes a session cookie."},
+ "storeId": {"type": "string", "optional": true, "description": "The ID of the cookie store in which to set the cookie. By default, the cookie is set in the current execution context's cookie store."}
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "min_version": "11.0.674.0",
+ "parameters": [
+ {
+ "name": "cookie", "$ref": "Cookie", "optional": true, "description": "Contains details about the cookie that's been set. If setting failed for any reason, this will be \"null\", and \"chrome.runtime.lastError\" will be set."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Deletes a cookie by name.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Information to identify the cookie to remove.",
+ "properties": {
+ "url": {"type": "string", "description": "The URL associated with the cookie. If host permissions for this URL are not specified in the manifest file, the API call will fail."},
+ "name": {"type": "string", "description": "The name of the cookie to remove."},
+ "storeId": {"type": "string", "optional": true, "description": "The ID of the cookie store to look in for the cookie. If unspecified, the cookie is looked for by default in the current execution context's cookie store."}
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "min_version": "11.0.674.0",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Contains details about the cookie that's been removed. If removal failed for any reason, this will be \"null\", and \"chrome.runtime.lastError\" will be set.",
+ "optional": true,
+ "properties": {
+ "url": {"type": "string", "description": "The URL associated with the cookie that's been removed."},
+ "name": {"type": "string", "description": "The name of the cookie that's been removed."},
+ "storeId": {"type": "string", "description": "The ID of the cookie store from which the cookie was removed."}
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAllCookieStores",
+ "type": "function",
+ "description": "Lists all existing cookie stores.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "cookieStores", "type": "array", "items": {"$ref": "CookieStore"}, "description": "All the existing cookie stores."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onChanged",
+ "type": "function",
+ "description": "Fired when a cookie is set or removed. As a special case, note that updating a cookie's properties is implemented as a two step process: the cookie to be updated is first removed entirely, generating a notification with \"cause\" of \"overwrite\" . Afterwards, a new cookie is written with the updated values, generating a second notification with \"cause\" \"explicit\".",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "changeInfo",
+ "properties": {
+ "removed": {"type": "boolean", "description": "True if a cookie was removed."},
+ "cookie": {"$ref": "Cookie", "description": "Information about the cookie that was set or removed."},
+ "cause": {"min_version": "12.0.707.0", "type": "string", "enum": ["evicted", "expired", "explicit", "expired_overwrite", "overwrite"], "description": "The underlying reason behind the cookie's change. If a cookie was inserted, or removed via an explicit call to \"chrome.cookies.remove\", \"cause\" will be \"explicit\". If a cookie was automatically removed due to expiry, \"cause\" will be \"expired\". If a cookie was removed due to being overwritten with an already-expired expiration date, \"cause\" will be set to \"expired_overwrite\". If a cookie was automatically removed due to garbage collection, \"cause\" will be \"evicted\". If a cookie was automatically removed due to a \"set\" call that overwrote it, \"cause\" will be \"overwrite\". Plan your response accordingly."}
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/debugger.json b/chromium/chrome/common/extensions/api/debugger.json
new file mode 100644
index 00000000000..8b656ef5dc8
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/debugger.json
@@ -0,0 +1,188 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "debugger",
+ "description": "The <code>chrome.debugger</code> API serves as an alternate transport for Chrome's <a href='http://code.google.com/chrome/devtools/docs/remote-debugging.html'>remote debugging protocol</a>. Use <code>chrome.debugger</code> to attach to one or more tabs to instrument network interaction, debug JavaScript, mutate the DOM and CSS, etc. Use the Debuggee <code>tabId</code> to target tabs with sendCommand and route events by <code>tabId</code> from onEvent callbacks.",
+ "types": [
+ {
+ "id": "Debuggee",
+ "type": "object",
+ "description": "Debuggee identifier. Either tabId or extensionId must be specified",
+ "properties": {
+ "tabId": { "type": "integer", "optional": true, "description": "The id of the tab which you intend to debug." },
+ "extensionId": { "type": "string", "optional": true, "description": "The id of the extension which you intend to debug. Attaching to an extension background page is only possible when 'enable-silent-debugging' flag is enabled on the target browser." },
+ "targetId": { "type": "string", "optional": true, "description": "The opaque id of the debug target." }
+ }
+ },
+ {
+ "id": "TargetInfo",
+ "type": "object",
+ "description": "Debug target information",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "Target type.",
+ "enum" : ["page", "background_page", "worker", "other" ]
+ },
+ "id": { "type": "string", "description": "Target id." },
+ "tabId": { "type": "integer", "optional": true, "description": "The tab id, defined if type == 'page'." },
+ "extensionId": { "type": "string", "optional": true, "description": "The extension id, defined if type = 'background_page'." },
+ "attached": { "type": "boolean", "description": "True if debugger is already attached." },
+ "title": { "type": "string", "description": "Target page title." },
+ "url": { "type": "string", "description": "Target URL." },
+ "faviconUrl": { "type": "string", "optional": true, "description": "Target favicon URL." }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "attach",
+ "type": "function",
+ "description": "Attaches debugger to the given target.",
+ "parameters": [
+ {
+ "$ref": "Debuggee",
+ "name": "target",
+ "description": "Debugging target to which you want to attach."
+ },
+ {
+ "type": "string",
+ "name": "requiredVersion",
+ "description": "Required debugging protocol version (\"0.1\"). One can only attach to the debuggee with matching major version and greater or equal minor version. List of the protocol versions can be obtained <a href='http://code.google.com/chrome/devtools/docs/remote-debugging.html'>here</a>."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [],
+ "description": "Called once the attach operation succeeds or fails. Callback receives no arguments. If the attach fails, $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ },
+ {
+ "name": "detach",
+ "type": "function",
+ "description": "Detaches debugger from the given target.",
+ "parameters": [
+ {
+ "$ref": "Debuggee",
+ "name": "target",
+ "description": "Debugging target from which you want to detach."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [],
+ "description": "Called once the detach operation succeeds or fails. Callback receives no arguments. If the detach fails, $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ },
+ {
+ "name": "sendCommand",
+ "type": "function",
+ "description": "Sends given command to the debugging target.",
+ "parameters": [
+ {
+ "$ref": "Debuggee",
+ "name": "target",
+ "description": "Debugging target to which you want to send the command."
+ },
+ {
+ "type": "string",
+ "name": "method",
+ "description": "Method name. Should be one of the methods defined by the <a href='http://code.google.com/chrome/devtools/docs/remote-debugging.html'>remote debugging protocol</a>."
+ },
+ {
+ "type": "object",
+ "name": "commandParams",
+ "optional": true,
+ "additionalProperties": { "type": "any" },
+ "description": "JSON object with request parameters. This object must conform to the remote debugging params scheme for given method."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "object",
+ "name": "result",
+ "optional": true,
+ "additionalProperties": { "type": "any" },
+ "description": "JSON object with the response. Structure of the response varies depending on the method and is defined by the remote debugging protocol."
+ }
+ ],
+ "description": "Response body. If an error occurs while posting the message, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ },
+ {
+ "name": "getTargets",
+ "type": "function",
+ "description": "Returns the list of available debug targets.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "array",
+ "name": "result",
+ "items": {"$ref": "TargetInfo"},
+ "description": "Array of TargetInfo objects corresponding to the available debug targets."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onEvent",
+ "type": "function",
+ "description": "Fired whenever debugging target issues instrumentation event.",
+ "parameters": [
+ {
+ "$ref": "Debuggee",
+ "name": "source",
+ "description": "The debuggee that generated this event."
+ },
+ {
+ "type": "string",
+ "name": "method",
+ "description": "Method name. Should be one of the notifications defined by the <a href='http://code.google.com/chrome/devtools/docs/remote-debugging.html'>remote debugging protocol</a>."
+ },
+ {
+ "type": "object",
+ "name": "params",
+ "optional": true,
+ "additionalProperties": { "type": "any" },
+ "description": "JSON object with the response. Structure of the response varies depending on the method and is defined by the remote debugging protocol."
+ }
+ ]
+ },
+ {
+ "name": "onDetach",
+ "type": "function",
+ "description": "Fired when browser terminates debugging session for the tab. This happens when either the tab is being closed or Chrome DevTools is being invoked for the attached tab.",
+ "parameters": [
+ {
+ "$ref": "Debuggee",
+ "name": "source",
+ "description": "The debuggee that was detached."
+ },
+ {
+ "type": "string",
+ "name": "reason",
+ "description": "Connection termination reason.",
+ "enum": [ "target_closed", "canceled_by_user", "replaced_with_devtools" ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/declarative_content.json b/chromium/chrome/common/extensions/api/declarative_content.json
new file mode 100644
index 00000000000..7d227ec4a6a
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/declarative_content.json
@@ -0,0 +1,69 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "declarativeContent",
+ "description": "Use the <code>chrome.declarativeContent</code> API to take actions depending on the content of a page, without requiring permission to read the page's content.",
+ "types": [
+ {
+ "id": "PageStateMatcher",
+ "type": "object",
+ "description": "Matches the state of a web page by various criteria.",
+ "properties": {
+ "pageUrl": {
+ "$ref": "events.UrlFilter",
+ "description": "Matches if the condition of the UrlFilter are fulfilled for the top-level URL of the page.",
+ "optional": true
+ },
+ "css": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if all of the CSS selectors in the array match displayed elements in a frame with the same origin as the page's main frame. All selectors in this array must be <a href=\"http://www.w3.org/TR/selectors4/#compound\">compound selectors</a> to speed up matching. Note that listing hundreds of CSS selectors or CSS selectors that match hundreds of times per page can still slow down web sites.",
+ // TODO(jyasskin): Figure out if we want to require all
+ // the selectors to match in the same frame, or allow several
+ // frames to contribute to a match.
+ "items": { "type": "string" }
+// },
+// TODO: "text": {
+// "type": "array",
+// "optional": true,
+// "description": "Matches if all of the regular expressions in the array match text in the page. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.",
+// "items": { "type": "string" }
+ },
+ "instanceType": {
+ "type": "string", "enum": ["declarativeContent.PageStateMatcher"],
+ "nodoc": true
+ }
+ }
+ },
+ {
+ "id": "ShowPageAction",
+ "description": "Declarative event action that shows the extension's $ref:[pageAction page action] while the corresponding conditions are met. This action can be used without <a href=\"declare_permissions.html#host-permissions\">host permissions</a>, but the extension must have a page action. If the extension takes the <a href=\"activeTab.html\">activeTab</a> permission, a click on the page action will grant access to the active tab.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeContent.ShowPageAction"],
+ "nodoc": true
+ }
+ }
+ }
+ ],
+ "functions": [
+ ],
+ "events": [
+ {
+ "name": "onPageChanged",
+ "options": {
+ "supportsListeners": false,
+ "supportsRules": true,
+ "conditions": ["declarativeContent.PageStateMatcher"],
+ "actions": [
+ "declarativeContent.ShowPageAction"
+ ]
+ }
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/declarative_web_request.json b/chromium/chrome/common/extensions/api/declarative_web_request.json
new file mode 100644
index 00000000000..2c37c74eb2d
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/declarative_web_request.json
@@ -0,0 +1,597 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "declarativeWebRequest",
+ "description": "Use the <code>chrome.declarativeWebRequest</code> API to intercept, block, or modify requests in-flight. It is significantly faster than the <a href='webRequest.html'><code>chrome.webRequest</code> API</a> because you can register rules that are evaluated in the browser rather than the JavaScript engine with reduces roundtrip latencies and allows higher efficiency.",
+ "types": [
+ {
+ "id": "HeaderFilter",
+ "type": "object",
+ "description": "Filters request headers for various criteria. Multiple criteria are evaluated as a conjunction.",
+ "properties": {
+ "namePrefix": {
+ "description" : "Matches if the header name starts with the specified string.",
+ "type": "string",
+ "optional": true
+ },
+ "nameSuffix": {
+ "type": "string",
+ "optional": true,
+ "description" : "Matches if the header name ends with the specified string."
+ },
+ "nameContains": {
+ "choices": [
+ {"type": "array", "items": {"type": "string"}},
+ {"type": "string"}
+ ],
+ "optional": true,
+ "description" : "Matches if the header name contains all of the specified strings."
+ },
+ "nameEquals": {
+ "type": "string",
+ "optional": true,
+ "description" : "Matches if the header name is equal to the specified string."
+ },
+ "valuePrefix": {
+ "type": "string",
+ "optional": true,
+ "description" : "Matches if the header value starts with the specified string."
+ },
+ "valueSuffix": {
+ "type": "string",
+ "optional": true,
+ "description" : "Matches if the header value ends with the specified string."
+ },
+ "valueContains": {
+ "choices": [
+ {"type": "array", "items": {"type": "string"}},
+ {"type": "string"}
+ ],
+ "optional": true,
+ "description" : "Matches if the header value contains all of the specified strings."
+ },
+ "valueEquals": {
+ "type": "string",
+ "optional": true,
+ "description" : "Matches if the header value is equal to the specified string."
+ }
+ }
+ },
+ {
+ "id": "RequestMatcher",
+ "type": "object",
+ "description": "Matches network events by various criteria.",
+ "properties": {
+ "url": {
+ "$ref": "events.UrlFilter",
+ "description": "Matches if the conditions of the UrlFilter are fulfilled for the URL of the request.",
+ "optional": true
+ },
+ "firstPartyForCookiesUrl": {
+ "$ref": "events.UrlFilter",
+ "description": "Matches if the conditions of the UrlFilter are fulfilled for the 'first party' URL of the request. The 'first party' URL of a request, when present, can be different from the request's target URL, and describes what is considered 'first party' for the sake of third-party checks for cookies.",
+ "optional": true
+ },
+ "resourceType": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if the request type of a request is contained in the list. Requests that cannot match any of the types will be filtered out.",
+ "items": { "type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] }
+ },
+ "contentType": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if the MIME media type of a response (from the HTTP Content-Type header) is contained in the list.",
+ "items": { "type": "string" }
+ },
+ "excludeContentType": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if the MIME media type of a response (from the HTTP Content-Type header) is <em>not</em> contained in the list.",
+ "items": { "type": "string" }
+ },
+ "requestHeaders": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if some of the request headers is matched by one of the HeaderFilters.",
+ "items": { "$ref": "HeaderFilter" }
+ },
+ "excludeRequestHeaders": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if none of the request headers is matched by any of the HeaderFilters.",
+ "items": { "$ref": "HeaderFilter" }
+ },
+ "responseHeaders": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if some of the response headers is matched by one of the HeaderFilters.",
+ "items": { "$ref": "HeaderFilter" }
+ },
+ "excludeResponseHeaders": {
+ "type": "array",
+ "optional": true,
+ "description": "Matches if none of the response headers is matched by any of the HeaderFilters.",
+ "items": { "$ref": "HeaderFilter" }
+ },
+ "thirdPartyForCookies": {
+ "type": "boolean",
+ "optional": true,
+ "description": "If set to true, matches requests that are subject to third-party cookie policies. If set to false, matches all other requests."
+ },
+ "stages": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["onBeforeRequest", "onBeforeSendHeaders", "onHeadersReceived", "onAuthRequired"]
+ },
+ "optional": true,
+ "description": "Contains a list of strings describing stages. Allowed values are 'onBeforeRequest', 'onBeforeSendHeaders', 'onHeadersReceived', 'onAuthRequired'. If this attribute is present, then it limits the applicable stages to those listed. Note that the whole condition is only applicable in stages compatible with all attributes."
+ },
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RequestMatcher"],
+ "nodoc": true
+ }
+ }
+ },
+ {
+ "id": "CancelRequest",
+ "description": "Declarative event action that cancels a network request.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.CancelRequest"],
+ "nodoc": true
+ }
+ }
+ },
+ {
+ "id": "RedirectRequest",
+ "description": "Declarative event action that redirects a network request.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RedirectRequest"],
+ "nodoc": true
+ },
+ "redirectUrl": { "type": "string", "description": "Destination to where the request is redirected."}
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RedirectToTransparentImage",
+ "description": "Declarative event action that redirects a network request to a transparent image.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RedirectToTransparentImage"],
+ "nodoc": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RedirectToEmptyDocument",
+ "description": "Declarative event action that redirects a network request to an empty document.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RedirectToEmptyDocument"],
+ "nodoc": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RedirectByRegEx",
+ "description": "Redirects a request by applying a regular expression on the URL. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RedirectByRegEx"],
+ "nodoc": true
+ },
+ "from": {
+ "type": "string",
+ "description": "A match pattern that may contain capture groups. Capture groups are referenced in the Perl syntax ($1, $2, ...) instead of the RE2 syntax (\\1, \\2, ...) in order to be closer to JavaScript Regular Expressions."
+ },
+ "to": {
+ "type": "string",
+ "description": "Destination pattern."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.SetRequestHeader",
+ "description": "Sets the request header of the specified name to the specified value. If a header with the specified name did not exist before, a new one is created. Header name comparison is always case-insensitive. Each request header name occurs only once in each request.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.SetRequestHeader"],
+ "nodoc": true
+ },
+ "name": {
+ "type": "string",
+ "description": "HTTP request header name."
+ },
+ "value": {
+ "type": "string",
+ "description": "HTTP request header value."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RemoveRequestHeader",
+ "description": "Removes the request header of the specified name. Do not use SetRequestHeader and RemoveRequestHeader with the same header name on the same request. Each request header name occurs only once in each request.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RemoveRequestHeader"],
+ "nodoc": true
+ },
+ "name": {
+ "type": "string",
+ "description": "HTTP request header name (case-insensitive)."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.AddResponseHeader",
+ "description": "Adds the response header to the response of this web request. As multiple response headers may share the same name, you need to first remove and then add a new response header in order to replace one.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.AddResponseHeader"],
+ "nodoc": true
+ },
+ "name": {
+ "type": "string",
+ "description": "HTTP response header name."
+ },
+ "value": {
+ "type": "string",
+ "description": "HTTP response header value."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RemoveResponseHeader",
+ "description": "Removes all response headers of the specified names and values.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RemoveResponseHeader"],
+ "nodoc": true
+ },
+ "name": {
+ "type": "string",
+ "description": "HTTP request header name (case-insensitive)."
+ },
+ "value": {
+ "type": "string",
+ "description": "HTTP request header value (case-insensitive).",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.IgnoreRules",
+ "description": "Masks all rules that match the specified criteria.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.IgnoreRules"],
+ "nodoc": true
+ },
+ "lowerPriorityThan": {
+ "type": "integer",
+ "description": "If set, rules with a lower priority than the specified value are ignored. This boundary is not persisted, it affects only rules and their actions of the same network request stage.",
+ "optional": true
+ },
+ "hasTag": {
+ "type": "string",
+ "description": "If set, rules with the specified tag are ignored. This ignoring is not persisted, it affects only rules and their actions of the same network request stage. Note that rules are executed in descending order of their priorities. This action affects rules of lower priority than the current rule. Rules with the same priority may or may not be ignored.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.SendMessageToExtension",
+ "description": "Triggers the $ref:declarativeWebRequest.onMessage event.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.SendMessageToExtension"],
+ "nodoc": true
+ },
+ "message": {
+ "type": "string",
+ "description": "The value that will be passed in the <code>message</code> attribute of the dictionary that is passed to the event handler."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RequestCookie",
+ "description": "A filter or specification of a cookie in HTTP Requests.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of a cookie.",
+ "optional": true
+ },
+ "value": {
+ "type": "string",
+ "description": "Value of a cookie, may be padded in double-quotes.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.ResponseCookie",
+ "description": "A specification of a cookie in HTTP Responses.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of a cookie.",
+ "optional": true
+ },
+ "value": {
+ "type": "string",
+ "description": "Value of a cookie, may be padded in double-quotes.",
+ "optional": true
+ },
+ "expires": {
+ "type": "string",
+ "description": "Value of the Expires cookie attribute.",
+ "optional": true
+ },
+ "maxAge": {
+ "type": "number",
+ "description": "Value of the Max-Age cookie attribute",
+ "optional": true
+ },
+ "domain": {
+ "type": "string",
+ "description": "Value of the Domain cookie attribute.",
+ "optional": true
+ },
+ "path": {
+ "type": "string",
+ "description": "Value of the Path cookie attribute.",
+ "optional": true
+ },
+ "secure": {
+ "type": "string",
+ "description": "Existence of the Secure cookie attribute.",
+ "optional": true
+ },
+ "httpOnly": {
+ "type": "string",
+ "description": "Existence of the HttpOnly cookie attribute.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.FilterResponseCookie",
+ "description": "A filter of a cookie in HTTP Responses.",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of a cookie.",
+ "optional": true
+ },
+ "value": {
+ "type": "string",
+ "description": "Value of a cookie, may be padded in double-quotes.",
+ "optional": true
+ },
+ "expires": {
+ "type": "string",
+ "description": "Value of the Expires cookie attribute.",
+ "optional": true
+ },
+ "maxAge": {
+ "type": "number",
+ "description": "Value of the Max-Age cookie attribute",
+ "optional": true
+ },
+ "domain": {
+ "type": "string",
+ "description": "Value of the Domain cookie attribute.",
+ "optional": true
+ },
+ "path": {
+ "type": "string",
+ "description": "Value of the Path cookie attribute.",
+ "optional": true
+ },
+ "secure": {
+ "type": "string",
+ "description": "Existence of the Secure cookie attribute.",
+ "optional": true
+ },
+ "httpOnly": {
+ "type": "string",
+ "description": "Existence of the HttpOnly cookie attribute.",
+ "optional": true
+ },
+ "ageUpperBound": {
+ "type": "integer",
+ "description": "Inclusive upper bound on the cookie lifetime (specified in seconds after current time). Only cookies whose expiration date-time is in the interval [now, now + ageUpperBound] fulfill this criterion. Session cookies and cookies whose expiration date-time is in the past do not meet the criterion of this filter. The cookie lifetime is calculated from either 'max-age' or 'expires' cookie attributes. If both are specified, 'max-age' is used to calculate the cookie lifetime.",
+ "minimum": 0,
+ "optional": true
+ },
+ "ageLowerBound": {
+ "type": "integer",
+ "description": "Inclusive lower bound on the cookie lifetime (specified in seconds after current time). Only cookies whose expiration date-time is set to 'now + ageLowerBound' or later fulfill this criterion. Session cookies do not meet the criterion of this filter. The cookie lifetime is calculated from either 'max-age' or 'expires' cookie attributes. If both are specified, 'max-age' is used to calculate the cookie lifetime.",
+ "minimum": 0,
+ "optional": true
+ },
+ "sessionCookie": {
+ "type": "boolean",
+ "description": "Filters session cookies. Session cookies have no lifetime specified in any of 'max-age' or 'expires' attributes.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.AddRequestCookie",
+ "description": "Adds a cookie to the request or overrides a cookie, in case another cookie of the same name exists already. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.AddRequestCookie"],
+ "nodoc": true
+ },
+ "cookie": {
+ "$ref": "declarativeWebRequest.RequestCookie",
+ "description": "Cookie to be added to the request. No field may be undefined."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.AddResponseCookie",
+ "description": "Adds a cookie to the response or overrides a cookie, in case another cookie of the same name exists already. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.AddResponseCookie"],
+ "nodoc": true
+ },
+ "cookie": {
+ "$ref": "declarativeWebRequest.ResponseCookie",
+ "description": "Cookie to be added to the response. The name and value need to be specified."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.EditRequestCookie",
+ "description": "Edits one or more cookies of request. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.EditRequestCookie"],
+ "nodoc": true
+ },
+ "filter": {
+ "$ref": "declarativeWebRequest.RequestCookie",
+ "description": "Filter for cookies that will be modified. All empty entries are ignored."
+ },
+ "modification": {
+ "$ref": "declarativeWebRequest.RequestCookie",
+ "description": "Attributes that shall be overridden in cookies that machted the filter. Attributes that are set to an empty string are removed."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.EditResponseCookie",
+ "description": "Edits one or more cookies of response. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.EditResponseCookie"],
+ "nodoc": true
+ },
+ "filter": {
+ "$ref": "declarativeWebRequest.FilterResponseCookie",
+ "description": "Filter for cookies that will be modified. All empty entries are ignored."
+ },
+ "modification": {
+ "$ref": "declarativeWebRequest.ResponseCookie",
+ "description": "Attributes that shall be overridden in cookies that machted the filter. Attributes that are set to an empty string are removed."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RemoveRequestCookie",
+ "description": "Removes one or more cookies of request. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RemoveRequestCookie"],
+ "nodoc": true
+ },
+ "filter": {
+ "$ref": "declarativeWebRequest.RequestCookie",
+ "description": "Filter for cookies that will be removed. All empty entries are ignored."
+ }
+ }
+ },
+ {
+ "id": "declarativeWebRequest.RemoveResponseCookie",
+ "description": "Removes one or more cookies of response. Note that it is preferred to use the Cookies API because this is computationally less expensive.",
+ "type": "object",
+ "properties": {
+ "instanceType": {
+ "type": "string", "enum": ["declarativeWebRequest.RemoveResponseCookie"],
+ "nodoc": true
+ },
+ "filter": {
+ "$ref": "declarativeWebRequest.FilterResponseCookie",
+ "description": "Filter for cookies that will be removed. All empty entries are ignored."
+ }
+ }
+ }
+ ],
+ "functions": [
+ ],
+ "events": [
+ {
+ "name": "onRequest",
+ "options": {
+ "supportsListeners": false,
+ "supportsRules": true,
+ "conditions": ["declarativeWebRequest.RequestMatcher"],
+ "actions": [
+ "declarativeWebRequest.AddRequestCookie",
+ "declarativeWebRequest.AddResponseCookie",
+ "declarativeWebRequest.AddResponseHeader",
+ "declarativeWebRequest.CancelRequest",
+ "declarativeWebRequest.EditRequestCookie",
+ "declarativeWebRequest.EditResponseCookie",
+ "declarativeWebRequest.RedirectRequest",
+ "declarativeWebRequest.RedirectToTransparentImage",
+ "declarativeWebRequest.RedirectToEmptyDocument",
+ "declarativeWebRequest.RedirectByRegEx",
+ "declarativeWebRequest.RemoveRequestCookie",
+ "declarativeWebRequest.RemoveResponseCookie",
+ "declarativeWebRequest.RemoveRequestHeader",
+ "declarativeWebRequest.RemoveResponseHeader",
+ "declarativeWebRequest.SetRequestHeader",
+ "declarativeWebRequest.SendMessageToExtension",
+ "declarativeWebRequest.IgnoreRules"
+ ]
+ }
+ },
+ {
+ "name": "onMessage",
+ "type": "function",
+ "description": "Fired when a message is sent via $ref:declarativeWebRequest.SendMessageToExtension from an action of the declarative web request API.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "message": {"type": "string", "description": "The message sent by the calling script."},
+ "stage": {"type": "string",
+ "enum": ["onBeforeRequest", "onBeforeSendHeaders", "onHeadersReceived", "onAuthRequired"],
+ "description": "The stage of the network request during which the event was triggered."},
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/desktop_capture.json b/chromium/chrome/common/extensions/api/desktop_capture.json
new file mode 100644
index 00000000000..8359a7bd3b8
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/desktop_capture.json
@@ -0,0 +1,66 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "desktopCapture",
+ "description": "Desktop Capture API that can be used to capture content of screen, individual windows or tabs.",
+ "types": [
+ {
+ "id": "DesktopCaptureSourceType",
+ "type": "string",
+ "enum": ["screen", "window", "tab"],
+ "description": "Enum used to define set of desktop media sources used in chooseDesktopMedia()."
+ }
+ ],
+ "functions": [
+ {
+ "name": "chooseDesktopMedia",
+ "type": "function",
+ "description": "Shows desktop media picker UI with the specified set of sources.",
+ "parameters": [
+ {
+ "type": "array",
+ "items": { "$ref": "DesktopCaptureSourceType" },
+ "name": "sources",
+ "description": "Set of sources that should be shown to the user."
+ },
+ {
+ "$ref": "tabs.Tab",
+ "name": "targetTab",
+ "optional": true,
+ "description": "Optional tab for which the stream is created. If not specified then the resulting stream can be used only by the calling extension, otherwise the stream can be used only by the specified tab. If the tab's security origin changes before this function returns, the call may fail."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "streamId",
+ "type": "string",
+ "description": "An opaque string that can be passed to <code>getUserMedia()</code> API to generate media stream that corresponds to the source selected by the user. If user didn't select any source (i.e. canceled the prompt) then the callback is called with an empty <code>streamId</code>"
+ }
+ ]
+ }
+ ],
+ "returns": {
+ "type": "integer",
+ "description": "An id that can be passed to cancelChooseDesktopMedia() in case the prompt need to be canceled."
+ }
+ },
+ {
+ "name": "cancelChooseDesktopMedia",
+ "type": "function",
+ "description": "Hides desktop media picker dialog shown by chooseDesktopMedia().",
+ "parameters": [
+ {
+ "name": "desktopMediaRequestId",
+ "type": "integer",
+ "description": "Id returned by chooseDesktopMedia()"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/devtools/experimental_audits.json b/chromium/chrome/common/extensions/api/devtools/experimental_audits.json
new file mode 100644
index 00000000000..d359496fa02
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/devtools/experimental_audits.json
@@ -0,0 +1,191 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "experimental.devtools.audits",
+ "description": "Use the <code>chrome.experimental.devtools.audits</code> API to add new audit categories to the Developer Tools' Audit panel.",
+ "nocompile": true,
+ "functions": [
+ {
+ "name": "addCategory",
+ "type": "function",
+ "description": "Adds an audit category.",
+ "parameters": [
+ { "name": "displayName", "type": "string", "description": "A display name for the category." },
+ { "name": "resultCount", "type": "number", "description": "The expected number of audit results in the category." }
+ ],
+ "returns": {
+ "$ref": "AuditCategory"
+ }
+ }
+ ],
+ "types": [
+ {
+ "id": "AuditCategory",
+ "type": "object",
+ "description": "A group of logically related audit checks.",
+ "events": [
+ {
+ "name": "onAuditStarted",
+ "type": "function",
+ "description": "If the category is enabled, this event is fired when the audit is started. The event handler is expected to initiate execution of the audit logic that will populate the <code>results</code> collection.",
+ "parameters": [
+ { "name": "results", "$ref": "AuditResults" }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "FormattedValue",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "description": "A value returned from one of the formatters (a URL, code snippet etc), to be passed to <code>createResult()</code> or <code>addChild()</code>. See $ref:AuditResults.createSnippet and $ref:AuditResults.createURL."
+ },
+ {
+ "id": "AuditResults",
+ "type": "object",
+ "description": "A collection of audit results for the current run of the audit category.",
+ "functions": [
+ {
+ "name": "addResult",
+ "type": "function",
+ "description": "Adds an audit result. The results are rendered as bulleted items under the audit category assoicated with the <code>AuditResults</code> object.",
+ "parameters": [
+ {
+ "name": "displayName",
+ "type": "string",
+ "description": "A concise, high-level description of the result."
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "description": "A detailed description of what the displayName means."
+ },
+ {
+ "name": "severity",
+ "$ref": "AuditResultSeverity"
+ },
+ {
+ "name": "details",
+ "$ref": "AuditResultNode",
+ "optional": true,
+ "description": "A subtree that appears under the added result that may provide additional details on the violations found."
+ }
+ ]
+ },
+ {
+ "name": "createResult",
+ "type": "function",
+ "description": "Creates a result node that may be used as the <code>details</code> parameters to the <code>addResult()</code> method.",
+ "parameters": [
+ {
+ "name": "content",
+ "choices": [
+ { "type": "string" },
+ { "$ref": "FormattedValue" }
+ ],
+ "description": "Either string or formatted values returned by one of the AuditResult formatters (a URL, a snippet etc). If multiple arguments are passed, these will be concatenated into a single node."
+ }
+ ],
+ "returns": {
+ "$ref": "AuditResultNode"
+ }
+ },
+ {
+ "name": "done",
+ "type": "function",
+ "description": "Signals the DevTools Audits panel that the run of this category is over. The audit run also completes automatically when the number of added top-level results is equal to that declared when AuditCategory was created."
+ },
+ {
+ "name": "createURL",
+ "type": "function",
+ "description": "Render passed value as a URL in the Audits panel.",
+ "parameters": [
+ { "name": "href", "type": "string", "description": "A URL that appears as the href value on the resulting link." },
+ { "name": "displayText", "type": "string", "description": "Text that appears to the user.", "optional": true }
+ ],
+ "returns": { "$ref": "FormattedValue" }
+ },
+ {
+ "name": "createSnippet",
+ "type": "function",
+ "description": "Render passed text as a code snippet in the Audits panel.",
+ "parameters": [
+ { "name": "text", "type": "string", "description": "Snippet text." }
+ ],
+ "returns": { "$ref": "FormattedValue" }
+ }
+ ],
+ "properties": {
+ "Severity": {
+ "$ref": "AuditResultSeverity",
+ "description": "A class that contains possible values for the audit result severities."
+ },
+ "text": {
+ "type": "string",
+ "description": "The contents of the node."
+ },
+ "children": {
+ "optional": true,
+ "type": "array",
+ "items": { "$ref": "AuditResultNode" },
+ "description": "Children of this node."
+ },
+ "expanded": {
+ "optional": "true",
+ "type": "boolean",
+ "description": "Whether the node is expanded by default."
+ }
+ }
+ },
+ {
+ "id": "AuditResultNode",
+ "type": "object",
+ "description": "A node in the audit result tree. Displays content and may optionally have children nodes.",
+ "functions": [
+ {
+ "name": "addChild",
+ "description": "Adds a child node to this node.",
+ "parameters": [
+ {
+ "name": "content",
+ "choices": [
+ { "type": "string" },
+ { "$ref": "FormattedValue" }
+ ],
+ "description": "Either string or formatted values returned by one of the AuditResult formatters (URL, snippet etc). If multiple arguments are passed, these will be concatenated into a single node."
+ }
+ ],
+ "returns": {
+ "$ref": "AuditResultNode"
+ }
+ }
+ ],
+ "properties": {
+ "expanded": {
+ "type": "boolean",
+ "description": "If set, the subtree will always be expanded."
+ }
+ }
+ },
+ {
+ "id": "AuditResultSeverity",
+ "type": "object",
+ "description": "This type contains possible values for a result severity. The results of different severities are distinguished by colored bullets near the result's display name.",
+ "properties": {
+ "Info": {
+ "type": "string"
+ },
+ "Warning": {
+ "type": "string"
+ },
+ "Severe": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/devtools/experimental_console.json b/chromium/chrome/common/extensions/api/devtools/experimental_console.json
new file mode 100644
index 00000000000..42fe4c7a2e8
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/devtools/experimental_console.json
@@ -0,0 +1,100 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "experimental.devtools.console",
+ "description": "Use the <code>chrome.experimental.devtools.console</code> API to retrieve messages from the inspected page console and post messages there.",
+ "nocompile": true,
+ "functions": [
+ {
+ "name": "addMessage",
+ "type": "function",
+ "description": "Adds a message to the console.",
+ "parameters": [
+ { "name": "severity", "$ref": "Severity", "description": "The severity of the message." },
+ { "name": "text", "type": "string", "description": "The text of the message." }
+ ]
+ },
+ {
+ "name": "getMessages",
+ "type": "function",
+ "description": "Retrieves console messages.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that receives console messages when the request completes.",
+ "parameters": [
+ {
+ "name": "messages",
+ "type": "array",
+ "items": { "$ref": "ConsoleMessage" },
+ "description": "Console messages."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "types": [
+ {
+ "id": "ConsoleMessage",
+ "type": "object",
+ "description": "A console message.",
+ "properties": {
+ "severity": {
+ "$ref": "Severity",
+ "description": "Message severity."
+ },
+ "text": {
+ "type": "string",
+ "description": "The text of the console message, as represented by the first argument to the console.log() or a similar method (no parameter substitution performed)."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "The URL of the script that originated the message, if available."
+ },
+ "line": {
+ "type": "number",
+ "optional": true,
+ "description": "The number of the line where the message originated, if available."
+ }
+ }
+ },
+ {
+ "id": "Severity",
+ "type": "object",
+ "properties": {
+ "Tip": {
+ "type": "string"
+ },
+ "Debug": {
+ "type": "string"
+ },
+ "Log": {
+ "type": "string"
+ },
+ "Warning": {
+ "type": "string"
+ },
+ "Error": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "events": [
+ {
+ "name": "onMessageAdded",
+ "type": "function",
+ "description": "Fired when a new message is added to the console.",
+ "parameters": [
+ { "name": "message", "$ref": "ConsoleMessage" }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/devtools/inspected_window.json b/chromium/chrome/common/extensions/api/devtools/inspected_window.json
new file mode 100644
index 00000000000..bd5b764a8c6
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/devtools/inspected_window.json
@@ -0,0 +1,197 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "devtools.inspectedWindow",
+ "description": "Use the <code>chrome.devtools.inspectedWindow</code> API to interact with the inspected window: obtain the tab ID for the inspected page, evaluate the code in the context of the inspected window, reload the page, or obtain the list of resources within the page.",
+ "nocompile": true,
+ "types": [
+ {
+ "id": "Resource",
+ "type": "object",
+ "description": "A resource within the inspected page, such as a document, a script, or an image.",
+ "properties": {
+ "url": {
+ "type": "string",
+ "description": "The URL of the resource."
+ }
+ },
+ "functions": [
+ {
+ "name": "getContent",
+ "type": "function",
+ "description": "Gets the content of the resource.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that receives resource content when the request completes.",
+ "parameters": [
+ {
+ "name": "content",
+ "type": "string",
+ "description": "Content of the resource (potentially encoded)."
+ },
+ {
+ "name": "encoding",
+ "type": "string",
+ "description": "Empty if content is not encoded, encoding name otherwise. Currently, only base64 is supported."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setContent",
+ "type": "function",
+ "description": "Sets the content of the resource.",
+ "parameters": [
+ {
+ "name": "content",
+ "type": "string",
+ "description": "New content of the resource. Only resources with the text type are currently supported."
+ },
+ {
+ "name": "commit",
+ "type": "boolean",
+ "description": "True if the user has finished editing the resource, and the new content of the resource should be persisted; false if this is a minor change sent in progress of the user editing the resource."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function called upon request completion.",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "error",
+ "type": "object",
+ "additionalProperties": {"type": "any"},
+ "optional": true,
+ "description": "Set to undefined if the resource content was set successfully; describes error otherwise."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "tabId": {
+ "description": "The ID of the tab being inspected. This ID may be used with chrome.tabs.* API.",
+ "type": "integer"
+ }
+ },
+ "functions": [
+ {
+ "name": "eval",
+ "type": "function",
+ "description": "Evaluates a JavaScript expression in the context of the main frame of the inspected page. The expression must evaluate to a JSON-compliant object, otherwise an exception is thrown.",
+ "parameters": [
+ {
+ "name": "expression",
+ "type": "string",
+ "description": "An expression to evaluate."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function called when evaluation completes.",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "additionalProperties": {"type": "any"},
+ "description": "The result of evaluation."
+ },
+ {
+ "name": "isException",
+ "type": "boolean",
+ "description": "Set if an exception was caught while evaluating the expression."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "reload",
+ "type": "function",
+ "description": "Reloads the inspected page.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "reloadOptions",
+ "optional": true,
+ "properties": {
+ "ignoreCache": {
+ "type": "boolean",
+ "optional": true,
+ "description": "When true, the loader will ignore the cache for all inspected page resources loaded before the <code>load</code> event is fired. The effect is similar to pressing Ctrl+Shift+R in the inspected window or within the Developer Tools window."
+ },
+ "userAgent": {
+ "type": "string",
+ "optional": true,
+ "description": "If specified, the string will override the value of the <code>User-Agent</code> HTTP header that's sent while loading the resources of the inspected page. The string will also override the value of the <code>navigator.userAgent</code> property that's returned to any scripts that are running within the inspected page."
+ },
+ "injectedScript": {
+ "type": "string",
+ "optional": true,
+ "description": "If specified, the script will be injected into every frame of the inspected page immediately upon load, before any of the frame's scripts. The script will not be injected after subsequent reloads&mdash;for example, if the user presses Ctrl+R."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getResources",
+ "type": "function",
+ "description": "Retrieves the list of resources from the inspected page.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that receives the list of resources when the request completes.",
+ "parameters": [
+ {
+ "name": "resources",
+ "type": "array",
+ "items": { "$ref": "Resource" },
+ "description": "The resources within the page."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onResourceAdded",
+ "description": "Fired when a new resource is added to the inspected page.",
+ "parameters": [
+ {
+ "name": "resource",
+ "$ref": "Resource"
+ }
+ ]
+ },
+ {
+ "name": "onResourceContentCommitted",
+ "description": "Fired when a new revision of the resource is committed (e.g. user saves an edited version of the resource in the Developer Tools).",
+ "parameters": [
+ {
+ "name": "resource",
+ "$ref": "Resource"
+ },
+ {
+ "name": "content",
+ "type": "string",
+ "description": "New content of the resource."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/devtools/network.json b/chromium/chrome/common/extensions/api/devtools/network.json
new file mode 100644
index 00000000000..3bb6e0b6ce2
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/devtools/network.json
@@ -0,0 +1,88 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "devtools.network",
+ "description": "Use the <code>chrome.devtools.network</code> API to retrieve the information about network requests displayed by the Developer Tools in the Network panel.",
+ "nocompile": true,
+ "types": [
+ {
+ "id": "Request",
+ "type": "object",
+ "description": "Represents a network request for a document resource (script, image and so on). See HAR Specification for reference.",
+ "functions": [
+ {
+ "name": "getContent",
+ "type": "function",
+ "description": "Returns content of the response body.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that receives the response body when the request completes.",
+ "parameters": [
+ {
+ "name": "content",
+ "type": "string",
+ "description": "Content of the response body (potentially encoded)."
+ },
+ {
+ "name": "encoding",
+ "type": "string",
+ "description": "Empty if content is not encoded, encoding name otherwise. Currently, only base64 is supported."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getHAR",
+ "type": "function",
+ "description": "Returns HAR log that contains all known network requests.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function that receives the HAR log when the request completes.",
+ "parameters": [
+ {
+ "name": "harLog",
+ "type": "object",
+ "additionalProperties": {"type": "any"},
+ "description": "A HAR log. See HAR specification for details."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onRequestFinished",
+ "type": "function",
+ "description": "Fired when a network request is finished and all request data are available.",
+ "parameters": [
+ { "name": "request", "$ref": "Request", "description": "Description of a network request in the form of a HAR entry. See HAR specification for details." }
+ ]
+ },
+ {
+ "name": "onNavigated",
+ "type": "function",
+ "description": "Fired when the inspected window navigates to a new page.",
+ "parameters": [
+ {
+ "name": "url",
+ "type": "string",
+ "description": "URL of the new page."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/devtools/panels.json b/chromium/chrome/common/extensions/api/devtools/panels.json
new file mode 100644
index 00000000000..31ee936d3d0
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/devtools/panels.json
@@ -0,0 +1,316 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "devtools.panels",
+ "description": "Use the <code>chrome.devtools.panels</code> API to integrate your extension into Developer Tools window UI: create your own panels, access existing panels, and add sidebars.",
+ "nocompile": true,
+ "types": [
+ {
+ "id": "ElementsPanel",
+ "type": "object",
+ "description": "Represents the Elements panel.",
+ "events": [
+ {
+ "name": "onSelectionChanged",
+ "description": "Fired when an object is selected in the panel."
+ }
+ ],
+ "functions": [
+ {
+ "name": "createSidebarPane",
+ "type": "function",
+ "description": "Creates a pane within panel's sidebar.",
+ "parameters": [
+ {
+ "name": "title",
+ "type": "string",
+ "description": "Text that is displayed in sidebar caption."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A callback invoked when the sidebar is created.",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "description": "An ExtensionSidebarPane object for created sidebar pane.",
+ "$ref": "ExtensionSidebarPane"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ExtensionPanel",
+ "type": "object",
+ "description": "Represents a panel created by extension.",
+ "functions": [
+ {
+ "name": "createStatusBarButton",
+ "description": "Appends a button to the status bar of the panel.",
+ "parameters": [
+ {
+ "name": "iconPath",
+ "type": "string",
+ "description": "Path to the icon of the button. The file should contain a 64x24-pixel image composed of two 32x24 icons. The left icon is used when the button is inactive; the right icon is displayed when the button is pressed."
+ },
+ {
+ "name": "tooltipText",
+ "type": "string",
+ "description": "Text shown as a tooltip when user hovers the mouse over the button."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "description": "Whether the button is disabled."
+ }
+ ],
+ "returns": { "$ref": "Button" }
+ }
+ ],
+ "events": [
+ {
+ "name": "onSearch",
+ "description": "Fired upon a search action (start of a new search, search result navigation, or search being canceled).",
+ "parameters": [
+ {
+ "name": "action",
+ "type": "string",
+ "description": "Type of search action being performed."
+ },
+ {
+ "name": "queryString",
+ "type": "string",
+ "optional": true,
+ "description": "Query string (only for 'performSearch')."
+ }
+ ]
+ },
+ {
+ "name": "onShown",
+ "type": "function",
+ "description": "Fired when the user switches to the panel.",
+ "parameters": [
+ {
+ "name": "window",
+ "$ref": "windows.Window",
+ "description": "The <code>window</code> object of panel's page."
+ }
+ ]
+ },
+ {
+ "name": "onHidden",
+ "type": "function",
+ "description": "Fired when the user switches away from the panel."
+ }
+ ]
+ },
+ {
+ "id": "ExtensionSidebarPane",
+ "type": "object",
+ "description": "A sidebar created by the extension.",
+ "functions": [
+ {
+ "name": "setHeight",
+ "type": "function",
+ "description": "Sets the height of the sidebar.",
+ "parameters": [
+ {
+ "name": "height",
+ "type": "string",
+ "description": "A CSS-like size specification, such as <code>'100px'</code> or <code>'12ex'</code>."
+ }
+ ]
+ },
+ {
+ "name": "setExpression",
+ "type": "function",
+ "description": "Sets an expression that is evaluated within the inspected page. The result is displayed in the sidebar pane.",
+ "parameters": [
+ {
+ "name": "expression",
+ "type": "string",
+ "description": "An expression to be evaluated in context of the inspected page. JavaScript objects and DOM nodes are displayed in an expandable tree similar to the console/watch."
+ },
+ {
+ "name": "rootTitle",
+ "type": "string",
+ "optional": true,
+ "description": "An optional title for the root of the expression tree."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "A callback invoked after the sidebar pane is updated with the expression evaluation results."
+ }
+ ]
+ },
+ {
+ "name": "setObject",
+ "type": "function",
+ "description": "Sets a JSON-compliant object to be displayed in the sidebar pane.",
+ "parameters": [
+ {
+ "name": "jsonObject",
+ "type": "string",
+ "description": "An object to be displayed in context of the inspected page. Evaluated in the context of the caller (API client)."
+ },
+ {
+ "name": "rootTitle",
+ "type": "string",
+ "optional": true,
+ "description": "An optional title for the root of the expression tree."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "A callback invoked after the sidebar is updated with the object."
+ }
+ ]
+ },
+ {
+ "name": "setPage",
+ "type": "function",
+ "description": "Sets an HTML page to be displayed in the sidebar pane.",
+ "parameters": [
+ {
+ "name": "path",
+ "type": "string",
+ "description": "Relative path of an extension page to display within the sidebar."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onShown",
+ "type": "function",
+ "description": "Fired when the sidebar pane becomes visible as a result of user switching to the panel that hosts it.",
+ "parameters": [
+ {
+ "name": "window",
+ "$ref": "windows.Window",
+ "optional": true,
+ "description": "The <code>window</code> object of the sidebar page, if one was set with the <code>setPage()</code> method."
+ }
+ ]
+ },
+ {
+ "name": "onHidden",
+ "type": "function",
+ "description": "Fired when the sidebar pane becomes hidden as a result of the user switching away from the panel that hosts the sidebar pane."
+ }
+ ]
+ },
+ {
+ "id": "Button",
+ "type": "object",
+ "description": "A button created by the extension.",
+ "functions": [
+ {
+ "name": "update",
+ "description": "Updates the attributes of the button. If some of the arguments are omitted or <code>null</code>, the corresponding attributes are not updated.",
+ "parameters": [
+ {
+ "name": "iconPath",
+ "type": "string",
+ "optional": true,
+ "description": "Path to the new icon of the button."
+ },
+ {
+ "name": "tooltipText",
+ "type": "string",
+ "optional": true,
+ "description": "Text shown as a tooltip when user hovers the mouse over the button."
+ },
+ {
+ "name": "disabled",
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the button is disabled."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onClicked",
+ "type": "function",
+ "description": "Fired when the button is clicked."
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "elements": {
+ "$ref": "ElementsPanel",
+ "description": "Elements panel."
+ }
+ },
+ "functions": [
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates an extension panel.",
+ "parameters": [
+ {
+ "name": "title",
+ "type": "string",
+ "description": "Title that is displayed next to the extension icon in the Developer Tools toolbar."
+ },
+ {
+ "name": "iconPath",
+ "type": "string",
+ "description": "Path of the panel's icon relative to the extension directory."
+ },
+ {
+ "name": "pagePath",
+ "type": "string",
+ "description": "Path of the panel's HTML page relative to the extension directory."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "A function that is called when the panel is created.",
+ "parameters": [
+ {
+ "name": "panel",
+ "description": "An ExtensionPanel object representing the created panel.",
+ "$ref": "ExtensionPanel"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setOpenResourceHandler",
+ "type": "function",
+ "description": "Specifies the function to be called when the user clicks a resource link in the Developer Tools window. To unset the handler, either call the method with no parameters or pass null as the parameter.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "A function that is called when the user clicks on a valid resource link in Developer Tools window. Note that if the user clicks an invalid URL or an XHR, this function is not called.",
+ "parameters": [
+ {
+ "name": "resource",
+ "$ref": "devtools.inspectedWindow.Resource",
+ "description": "A $ref:devtools.inspectedWindow.Resource object for the resource that was clicked."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/echo_private.json b/chromium/chrome/common/extensions/api/echo_private.json
new file mode 100644
index 00000000000..c904d69387d
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/echo_private.json
@@ -0,0 +1,133 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "echoPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/echo_private_api.h"
+ },
+ "description": "none",
+ "platforms": ["chromeos"],
+ "functions": [
+ {
+ "name": "setOfferInfo",
+ "description": "Sets the offer info in Local State.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "The service id of the echo offer."
+ },
+ {
+ "name": "offerInfo",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "description": "The offer info."
+ }
+ ]
+ },
+ {
+ "name": "getOfferInfo",
+ "description": "Check in Local State for the offer info.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "The service id of the offer eligibility check."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "description": "The returned offer info. If the offer info is not available, api will raise error."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getRegistrationCode",
+ "description": "Get the group or coupon code from underlying storage.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "type",
+ "type": "string",
+ "description": "Type of coupon code requested to be read (coupon or group)."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string",
+ "description" : "The coupon code."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getOobeTimestamp",
+ "description": "Get the OOBE timestamp.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string",
+ "description" : "The OOBE timestamp."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getUserConsent",
+ "description": "If device policy allows user to redeem offer, displays a native dialog asking user for a consent to verify device's eligibility for the offer. If the device policy forbids user to redeem offers, displays a native dialog informing user the offer redeeming is disabled.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "consentRequester",
+ "description": "Information about the service requesting user consent.",
+ "type": "object",
+ "properties": {
+ "serviceName": {
+ "type": "string",
+ "minLength": 1,
+ "description": "User friendly name of the service that is requesting the consent."
+ },
+ "origin": {
+ "type": "string",
+ "description": "URL origin of the service requesting the consent."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "boolean",
+ "description": "Whether the user consent was given."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/enterprise_platform_keys_private.json b/chromium/chrome/common/extensions/api/enterprise_platform_keys_private.json
new file mode 100644
index 00000000000..8c66814cc34
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/enterprise_platform_keys_private.json
@@ -0,0 +1,66 @@
+// Copyright (c) 2013 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.
+
+[
+ {
+ "namespace": "enterprise.platformKeysPrivate",
+ "description": "none",
+ "platforms": ["chromeos"],
+ "functions": [
+ {
+ "name": "challengeMachineKey",
+ "type": "function",
+ "description": "Challenge a machine key.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "challenge",
+ "description": "Challenge to be signed in base64."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Callback function.",
+ "parameters": [
+ {
+ "name": "response",
+ "description": "Response in base64.",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "challengeUserKey",
+ "type": "function",
+ "description": "Challenge an user key.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "challenge",
+ "description": "Challenge to be signed in base64."
+ },
+ {
+ "type": "boolean",
+ "name": "registerKey",
+ "description": "If true, the key will be registered."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Callback function.",
+ "parameters": [
+ {
+ "name": "response",
+ "description": "Response in base64.",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/events.json b/chromium/chrome/common/extensions/api/events.json
new file mode 100644
index 00000000000..ac11987c8ee
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/events.json
@@ -0,0 +1,335 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "events",
+ "description": "Use the <code>chrome.events</code> API to notify you when something interesting happens.",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/declarative/declarative_api.h"
+ },
+ "types": [
+ {
+ "id": "Rule",
+ "type": "object",
+ "description": "Description of a declarative rule for handling events.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "optional": true,
+ "description": "Optional identifier that allows referencing this rule."
+ },
+ "tags": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "Tags can be used to annotate rules and perform operations on sets of rules."
+ },
+ "conditions": {
+ "type": "array",
+ "items": {"type": "any"},
+ "description": "List of conditions that can trigger the actions."
+ },
+ "actions": {
+ "type": "array",
+ "items": {"type": "any"},
+ "description": "List of actions that are triggered if one of the condtions is fulfilled."
+ },
+ "priority": {
+ "type": "integer",
+ "optional": true,
+ "description": "Optional priority of this rule. Defaults to 100."
+ }
+ }
+ },
+ {
+ "id": "Event",
+ "type": "object",
+ "description": "An object which allows the addition and removal of listeners for a Chrome event.",
+ "additionalProperties": { "type": "any"},
+ "functions": [
+ {
+ "name": "addListener",
+ "nocompile": true,
+ "type": "function",
+ "description": "Registers an event listener <em>callback</em> to an event.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when an event occurs. The parameters of this function depend on the type of event."
+ }
+ ]
+ },
+ {
+ "name": "removeListener",
+ "nocompile": true,
+ "type": "function",
+ "description": "Deregisters an event listener <em>callback</em> from an event.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Listener that shall be unregistered."
+ }
+ ]
+ },
+ {
+ "name": "hasListener",
+ "nocompile": true,
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Listener whose registration status shall be tested."
+ }
+ ],
+ "returns": {
+ "type": "boolean",
+ "description": "True if <em>callback</em> is registered to the event."
+ }
+ },
+ {
+ "name": "hasListeners",
+ "nocompile": true,
+ "type": "function",
+ "parameters": [],
+ "returns": {
+ "type": "boolean",
+ "description": "True if any event listeners are registered to the event."
+ }
+ },
+ {
+ "name": "addRules",
+ "type": "function",
+ "description": "Registers rules to handle events.",
+ "parameters": [
+ {
+ "nodoc": "true",
+ "name": "eventName",
+ "type": "string",
+ "description": "Name of the event this function affects."
+ },
+ {
+ "name": "webViewInstanceId",
+ "type": "integer",
+ "nodoc": true,
+ "description": "If provided, this is an integer that uniquely identfies the <webview> associated with this function call."
+ },
+ {
+ "name": "rules",
+ "type": "array",
+ "items": {"$ref": "Rule"},
+ "description": "Rules to be registered. These do not replace previously registered rules."
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "type": "function",
+ "parameters": [
+ {
+ "name": "rules",
+ "type": "array",
+ "items": {"$ref": "Rule"},
+ "description": "Rules that were registered, the optional parameters are filled with values."
+ }
+ ],
+ "description": "Called with registered rules."
+ }
+ ]
+ },
+ {
+ "name": "getRules",
+ "type": "function",
+ "description": "Returns currently registered rules.",
+ "parameters": [
+ {
+ "nodoc": "true",
+ "name": "eventName",
+ "type": "string",
+ "description": "Name of the event this function affects."
+ },
+ {
+ "name": "webViewInstanceId",
+ "type": "integer",
+ "nodoc": true,
+ "description": "If provided, this is an integer that uniquely identfies the <webview> associated with this function call."
+ },
+ {
+ "name": "ruleIdentifiers",
+ "optional": "true",
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "If an array is passed, only rules with identifiers contained in this array are returned."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "rules",
+ "type": "array",
+ "items": {"$ref": "Rule"},
+ "description": "Rules that were registered, the optional parameters are filled with values."
+ }
+ ],
+ "description": "Called with registered rules."
+ }
+ ]
+ },
+ {
+ "name": "removeRules",
+ "type": "function",
+ "description": "Unregisters currently registered rules.",
+ "parameters": [
+ {
+ "nodoc": "true",
+ "name": "eventName",
+ "type": "string",
+ "description": "Name of the event this function affects."
+ },
+ {
+ "name": "webViewInstanceId",
+ "type": "integer",
+ "nodoc": true,
+ "description": "If provided, this is an integer that uniquely identfies the <webview> associated with this function call."
+ },
+ {
+ "name": "ruleIdentifiers",
+ "optional": "true",
+ "type": "array",
+ "items": {"type": "string"},
+ "description": "If an array is passed, only rules with identifiers contained in this array are unregistered."
+ },
+ {
+ "name": "callback",
+ "optional": true,
+ "type": "function",
+ "parameters": [],
+ "description": "Called when rules were unregistered."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "UrlFilter",
+ "type": "object",
+ "description": "Filters URLs for various criteria. See <a href='#filtered'>event filtering</a>. All criteria are case sensitive.",
+ "nocompile": true,
+ "properties": {
+ "hostContains": {
+ "type": "string",
+ "description": "Matches if the host name of the URL contains a specified string. To test whether a host name component has a prefix 'foo', use hostContains: '.foo'. This matches 'www.foobar.com' and 'foo.com', because an implicit dot is added at the beginning of the host name. Similarly, hostContains can be used to match against component suffix ('foo.') and to exactly match against components ('.foo.'). Suffix- and exact-matching for the last components need to be done separately using hostSuffix, because no implicit dot is added at the end of the host name.",
+ "optional": true
+ },
+ "hostEquals": {
+ "type": "string",
+ "description": "Matches if the host name of the URL is equal to a specified string.",
+ "optional": true
+ },
+ "hostPrefix": {
+ "type": "string",
+ "description": "Matches if the host name of the URL starts with a specified string.",
+ "optional": true
+ },
+ "hostSuffix": {
+ "type": "string",
+ "description": "Matches if the host name of the URL ends with a specified string.",
+ "optional": true
+ },
+ "pathContains": {
+ "type": "string",
+ "description": "Matches if the path segment of the URL contains a specified string.",
+ "optional": true
+ },
+ "pathEquals": {
+ "type": "string",
+ "description": "Matches if the path segment of the URL is equal to a specified string.",
+ "optional": true
+ },
+ "pathPrefix": {
+ "type": "string",
+ "description": "Matches if the path segment of the URL starts with a specified string.",
+ "optional": true
+ },
+ "pathSuffix": {
+ "type": "string",
+ "description": "Matches if the path segment of the URL ends with a specified string.",
+ "optional": true
+ },
+ "queryContains": {
+ "type": "string",
+ "description": "Matches if the query segment of the URL contains a specified string.",
+ "optional": true
+ },
+ "queryEquals": {
+ "type": "string",
+ "description": "Matches if the query segment of the URL is equal to a specified string.",
+ "optional": true
+ },
+ "queryPrefix": {
+ "type": "string",
+ "description": "Matches if the query segment of the URL starts with a specified string.",
+ "optional": true
+ },
+ "querySuffix": {
+ "type": "string",
+ "description": "Matches if the query segment of the URL ends with a specified string.",
+ "optional": true
+ },
+ "urlContains": {
+ "type": "string",
+ "description": "Matches if the URL (without fragment identifier) contains a specified string. Port numbers are stripped from the URL if they match the default port number.",
+ "optional": true
+ },
+ "urlEquals": {
+ "type": "string",
+ "description": "Matches if the URL (without fragment identifier) is equal to a specified string. Port numbers are stripped from the URL if they match the default port number.",
+ "optional": true
+ },
+ "urlMatches": {
+ "type": "string",
+ "description": "Matches if the URL (without fragment identifier) matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.",
+ "optional": true
+ },
+ "originAndPathMatches": {
+ "type": "string",
+ "description": "Matches if the URL without query segment and fragment identifier matches a specified regular expression. Port numbers are stripped from the URL if they match the default port number. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.",
+ "optional": true
+ },
+ "urlPrefix": {
+ "type": "string",
+ "description": "Matches if the URL (without fragment identifier) starts with a specified string. Port numbers are stripped from the URL if they match the default port number.",
+ "optional": true
+ },
+ "urlSuffix": {
+ "type": "string",
+ "description": "Matches if the URL (without fragment identifier) ends with a specified string. Port numbers are stripped from the URL if they match the default port number.",
+ "optional": true
+ },
+ "schemes": {
+ "type": "array",
+ "description": "Matches if the scheme of the URL is equal to any of the schemes specified in the array.",
+ "optional": true,
+ "items": { "type": "string" }
+ },
+ "ports": {
+ "type": "array",
+ "description": "Matches if the port of the URL is contained in any of the specified port lists. For example <code>[80, 443, [1000, 1200]]</code> matches all requests on port 80, 443 and in the range 1000-1200.",
+ "optional": true,
+ "items": {
+ "choices": [
+ {"type": "integer", "description": "A specific port."},
+ {"type": "array", "items": {"type": "integer"}, "description": "A pair of integers identiying the start and end (both inclusive) of a port range."}
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/experimental_accessibility.json b/chromium/chrome/common/extensions/api/experimental_accessibility.json
new file mode 100644
index 00000000000..97bd69be478
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/experimental_accessibility.json
@@ -0,0 +1,337 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "experimental.accessibility",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/accessibility/accessibility_extension_api.h"
+ },
+ "description": "none",
+ "types": [
+ {
+ "id": "CheckboxDetails",
+ "type": "object",
+ "description": "Information about the state of a checkbox.",
+ "properties": {
+ "isChecked": {"type": "boolean", "description": "True if this checkbox is checked."}
+ }
+ },
+ {
+ "id": "ComboBoxDetails",
+ "type": "object",
+ "description": "Information about the state of a combo box.",
+ "properties": {
+ "value": {"type": "string", "description": "The value of the combo box."},
+ "itemCount": {"type": "integer", "description": "The number of items in the combo box's list."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of the current value, or -1 if the user entered a value not from the list."}
+ }
+ },
+ {
+ "id": "ListBoxDetails",
+ "type": "object",
+ "description": "Information about the state of a list box.",
+ "properties": {
+ "value": {"type": "string", "description": "The value of the list box."},
+ "itemCount": {"type": "integer", "description": "The number of items in the list."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of the selected value, or -1 if no items are selected."}
+ }
+ },
+ {
+ "id": "MenuDetails",
+ "type": "object",
+ "description": "Information about the state of a drop-down menu.",
+ "properties": {
+ }
+ },
+ {
+ "id": "MenuItemDetails",
+ "type": "object",
+ "description": "Information about a menu item.",
+ "properties": {
+ "hasSubmenu": {"type": "boolean", "description": "True if this item opens a submenu."},
+ "itemCount": {"type": "integer", "description": "The number of items in the menu."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of this menu item."}
+ }
+ },
+ {
+ "id": "RadioButtonDetails",
+ "type": "object",
+ "description": "Information about the state of a radio button.",
+ "properties": {
+ "isChecked": {"type": "boolean", "description": "True if this radio button is checked."},
+ "itemCount": {"type": "integer", "description": "The number of radio buttons in this group."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of this radio button in this group."}
+ }
+ },
+ {
+ "id": "SliderDetails",
+ "type": "object",
+ "description": "Information about the state of a slider.",
+ "properties": {
+ "stringValue": {"type": "string", "description": "The value of the slider as a string."}
+ }
+ },
+ {
+ "id": "TabDetails",
+ "type": "object",
+ "description": "Additional accessibility information about a tab.",
+ "properties": {
+ "itemCount": {"type": "integer", "description": "The number of tabs in this group."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of this tab in this group."}
+ }
+ },
+ {
+ "id": "TextBoxDetails",
+ "type": "object",
+ "description": "Information about the state of a text box.",
+ "properties": {
+ "value": {"type": "string", "description": "The value of the text box - the entered text."},
+ "isPassword": {"type": "boolean", "description": "True if this control contains password text whose contents should be obscured."},
+ "selectionStart": {"type": "integer", "description": "The index of the character where the selection starts, if this control contains editable text."},
+ "selectionEnd": {"type": "integer", "description": "The index of the character where the selection ends, if this control contains editable text."}
+ }
+ },
+ {
+ "id": "TreeDetails",
+ "type": "object",
+ "description": "Information about the state of a tree control.",
+ "properties": {
+ }
+ },
+ {
+ "id": "TreeItemDetails",
+ "type": "object",
+ "description": "Information about a selected tree control item.",
+ "properties": {
+ "itemDepth": {"type": "integer", "description": "The 0-based depth of this tree item."},
+ "itemCount": {"type": "integer", "description": "The number of items in the current depth."},
+ "itemIndex": {"type": "integer", "description": "The 0-based index of this tree item at the current tree depth."},
+ "childrenCount": {"type": "integer", "description": "The number of children of the current tree item."},
+ "isItemExpanded": {"type": "boolean", "description": "True if this if this tree item is expanded."}
+ }
+ },
+ {
+ "id": "AlertInfo",
+ "type": "object",
+ "description": "Information about an alert",
+ "properties": {
+ "message": {
+ "type": "string",
+ "description": "The message the alert is showing."
+ }
+ }
+ },
+ {
+ "id": "AccessibilityObject",
+ "type": "object",
+ "description": "Parent class for accessibility information about an object.",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "The type of this object, which determines the contents of 'details'.",
+ "enum": ["alert", "button", "checkbox", "combobox", "link", "menu", "menuitem", "radiobutton", "slider", "tab", "textbox", "tree", "treeitem", "window"]
+ },
+ "name": {
+ "type": "string",
+ "description": "The localized name of the object, like OK or Password. Do not rely on an exact string match because the text will be in the user's language and may change in the future."
+ },
+ "context": {
+ "type": "string",
+ "description": "The localized name of the context for the object, like the name of the surrounding toolbar or group of controls.",
+ "optional": true
+ },
+ "details": {
+ "description": "Other details like the state, depending on the type of object.",
+ "optional": true,
+ "choices": [
+ { "$ref": "CheckboxDetails" },
+ { "$ref": "ComboBoxDetails" },
+ { "$ref": "MenuDetails" },
+ { "$ref": "MenuItemDetails" },
+ { "$ref": "RadioButtonDetails" },
+ { "$ref": "SliderDetails" },
+ { "$ref": "TabDetails" },
+ { "$ref": "TextBoxDetails" },
+ { "$ref": "TreeDetails" },
+ { "$ref": "TreeItemDetails" }
+ ]
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "setAccessibilityEnabled",
+ "type": "function",
+ "description": "Enables or disables the accessibility extension api. This must be set to true before event listeners or getFocusedControl will work.",
+ "parameters": [
+ {
+ "type": "boolean",
+ "name": "enabled",
+ "description": "True if accessibility support should be enabled."
+ }
+ ]
+ },
+ {
+ "name": "setNativeAccessibilityEnabled",
+ "type": "function",
+ "description": "Enables or disables native accessibility support. Once disabled, it is up to the calling extension to provide accessibility for web contents.",
+ "parameters": [
+ {
+ "type": "boolean",
+ "name": "enabled",
+ "description": "True if native accessibility support should be enabled."
+ }
+ ]
+ },
+ {
+ "name": "getFocusedControl",
+ "type": "function",
+ "description": "Gets information about the currently focused control.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "control",
+ "description": "Details of the currently focused control, or null if nothing is focused.",
+ "$ref": "AccessibilityObject",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAlertsForTab",
+ "type": "function",
+ "description": "Gets alerts being shown on the given tab.",
+ "parameters": [
+ {
+ "name": "tabId",
+ "type": "integer",
+ "minimum": 0
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "alerts",
+ "type": "array",
+ "items": { "$ref": "AlertInfo" },
+ "description": "Alerts being shown on the given tab."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onWindowOpened",
+ "type": "function",
+ "description": "Fired when a window is opened.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "window",
+ "description": "Information about the window that was opened."
+ }
+ ]
+ },
+ {
+ "name": "onWindowClosed",
+ "type": "function",
+ "description": "Fired when a window is closed.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "window",
+ "description": "Information about the window that was closed."
+ }
+ ]
+ },
+ {
+ "name": "onControlFocused",
+ "type": "function",
+ "description": "Fired when a control is focused.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "control",
+ "description": "Details of the control that was focused."
+ }
+ ]
+ },
+ {
+ "name": "onControlAction",
+ "type": "function",
+ "description": "Fired when a control's action is taken, like pressing a button or toggling a checkbox.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "control",
+ "description": "Details of the control whose action was taken."
+ }
+ ]
+ },
+ {
+ "name": "onTextChanged",
+ "type": "function",
+ "description": "Fired when text changes in an editable text control.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "control",
+ "description": "Details of the control where the text changed."
+ }
+ ]
+ },
+ {
+ "name": "onMenuOpened",
+ "type": "function",
+ "description": "Fired when a menu is opened.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "menu",
+ "description": "Information about the menu that was opened."
+ }
+ ]
+ },
+ {
+ "name": "onMenuClosed",
+ "type": "function",
+ "description": "Fired when a menu is closed.",
+ "parameters": [
+ {
+ "$ref": "AccessibilityObject",
+ "name": "menu",
+ "description": "Information about the menu that was closed."
+ }
+ ]
+ },
+ {
+ "name": "onChromeVoxLoadStateChanged",
+ "type": "function",
+ "description": "Fired ChromeVox load state changes.",
+ "parameters": [
+ {
+ "type": "boolean",
+ "name": "loading",
+ "description": "True if ChromeVox is loading; false if ChromeVox is unloading."
+ },
+ {
+ "type": "boolean",
+ "name": "makeAnnouncements",
+ "description": "Whether to make introductory announcements."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/extension.json b/chromium/chrome/common/extensions/api/extension.json
new file mode 100644
index 00000000000..e12c87e4c04
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/extension.json
@@ -0,0 +1,218 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "extension",
+ "description": "The <code>chrome.extension</code> API has utilities that can be used by any extension page. It includes support for exchanging messages between an extension and its content scripts or between extensions, as described in detail in <a href='messaging.html'>Message Passing</a>.",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/module/module.h"
+ },
+ "properties": {
+ "lastError": {
+ "type": "object",
+ "optional": true,
+ "description": "Set for the lifetime of a callback if an ansychronous extension api has resulted in an error. If no error has occured lastError will be <var>undefined</var>.",
+ "properties": {
+ "message": { "type": "string", "description": "Description of the error that has taken place." }
+ }
+ },
+ "inIncognitoContext": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True for content scripts running inside incognito tabs, and for extension pages running inside an incognito process. The latter only applies to extensions with 'split' incognito_behavior."
+ }
+ },
+ "functions": [
+ {
+ "name": "sendRequest",
+ "nocompile": true,
+ "deprecated": "Please use $ref:runtime.sendMessage.",
+ "type": "function",
+ "allowAmbiguousOptionalArguments": true,
+ "description": "Sends a single request to other listeners within the extension. Similar to $ref:runtime.connect, but only sends a single request with an optional response. The $ref:onRequest event is fired in each page of the extension.",
+ "parameters": [
+ {"type": "string", "name": "extensionId", "optional": true, "description": "The extension ID of the extension you want to connect to. If omitted, default is your own extension."},
+ { "type": "any", "name": "request" },
+ {
+ "type": "function",
+ "name": "responseCallback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "response",
+ "type": "any",
+ "description": "The JSON response object sent by the handler of the request. If an error occurs while connecting to the extension, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getURL",
+ "nocompile": true,
+ "type": "function",
+ "description": "Converts a relative path within an extension install directory to a fully-qualified URL.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "path",
+ "description": "A path to a resource within an extension expressed relative to its install directory."
+ }
+ ],
+ "returns": {
+ "type": "string",
+ "description": "The fully-qualified URL to the resource."
+ }
+ },
+ {
+ "name": "getViews",
+ "nocompile": true,
+ "type": "function",
+ "description": "Returns an array of the JavaScript 'window' objects for each of the pages running inside the current extension.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "fetchProperties",
+ "optional": true,
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["tab", "infobar", "notification", "popup"],
+ "optional": true,
+ "description": "The type of view to get. If omitted, returns all views (including background pages and tabs). Valid values: 'tab', 'infobar', 'notification', 'popup'."
+ },
+ "windowId": {
+ "type": "integer",
+ "optional": true,
+ "description": "The window to restrict the search to. If omitted, returns all views."
+ }
+ }
+ }
+ ],
+ "returns": {
+ "type": "array",
+ "description": "Array of global objects",
+ "items": {
+ "name": "viewGlobals",
+ "type": "object",
+ "isInstanceOf": "Window",
+ "additionalProperties": { "type": "any" }
+ }
+ }
+ },
+ {
+ "name": "getBackgroundPage",
+ "nocompile": true,
+ "type": "function",
+ "description": "Returns the JavaScript 'window' object for the background page running inside the current extension. Returns null if the extension has no background page.",
+ "parameters": [],
+ "returns": {
+ "type": "object",
+ "optional": true,
+ "name": "backgroundPageGlobal",
+ "isInstanceOf": "Window",
+ "additionalProperties": { "type": "any" }
+ }
+ },
+ {
+ "name": "getExtensionTabs",
+ "nocompile": true,
+ "deprecated": "Please use $ref:getViews <code>{type: \"tab\"}</code>.",
+ "type": "function",
+ "maximumManifestVersion": 1,
+ "description": "Returns an array of the JavaScript 'window' objects for each of the tabs running inside the current extension. If <code>windowId</code> is specified, returns only the 'window' objects of tabs attached to the specified window.",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "optional": true}
+ ],
+ "returns": {
+ "type": "array",
+ "description": "Array of global window objects",
+ "items": {
+ "type": "object",
+ "name": "tabGlobals",
+ "isInstanceOf": "Window",
+ "additionalProperties": { "type": "any" }
+ }
+ }
+ },
+ {
+ "name": "isAllowedIncognitoAccess",
+ "type": "function",
+ "description": "Retrieves the state of the extension's access to Incognito-mode (as determined by the user-controlled 'Allowed in Incognito' checkbox.",
+ "min_version": "12.0.706.0",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "isAllowedAccess",
+ "type": "boolean",
+ "description": "True if the extension has access to Incognito mode, false otherwise."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "isAllowedFileSchemeAccess",
+ "type": "function",
+ "description": "Retrieves the state of the extension's access to the 'file://' scheme (as determined by the user-controlled 'Allow access to File URLs' checkbox.",
+ "min_version": "12.0.706.0",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "isAllowedAccess",
+ "type": "boolean",
+ "description": "True if the extension can access the 'file://' scheme, false otherwise."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setUpdateUrlData",
+ "type": "function",
+ "description": "Sets the value of the ap CGI parameter used in the extension's update URL. This value is ignored for extensions that are hosted in the Chrome Extension Gallery.",
+ "parameters": [
+ {"type": "string", "name": "data", "maxLength": 1024}
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onRequest",
+ "deprecated": "Please use $ref:runtime.onMessage.",
+ "type": "function",
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a request is sent from either an extension process or a content script.",
+ "parameters": [
+ {"name": "request", "type": "any", "optional": true, "description": "The request sent by the calling script."},
+ {"name": "sender", "$ref": "runtime.MessageSender" },
+ {"name": "sendResponse", "type": "function", "description": "Function to call (at most once) when you have a response. The argument should be any JSON-ifiable object, or undefined if there is no response. If you have more than one <code>onRequest</code> listener in the same document, then only one may send a response." }
+ ]
+ },
+ {
+ "name": "onRequestExternal",
+ "deprecated": "Please use $ref:runtime.onMessageExternal.",
+ "type": "function",
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a request is sent from another extension.",
+ "parameters": [
+ {"name": "request", "type": "any", "optional": true, "description": "The request sent by the calling script."},
+ {"name": "sender", "$ref": "runtime.MessageSender" },
+ {"name": "sendResponse", "type": "function", "description": "Function to call when you have a response. The argument should be any JSON-ifiable object, or undefined if there is no response." }
+ ]
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/api/file_browser_handler.json b/chromium/chrome/common/extensions/api/file_browser_handler.json
new file mode 100644
index 00000000000..ed05911b5b9
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/file_browser_handler.json
@@ -0,0 +1,102 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace":"fileBrowserHandler",
+ "description": "Use the <code>chrome.fileBrowserHandler</code> API to extend the Chrome OS file browser. For example, you can use this API to enable users to upload files to your website.",
+ "platforms": ["chromeos"],
+ "types": [
+ {
+ "id": "FileHandlerExecuteEventDetails",
+ "type": "object",
+ "description": "Event details payload for fileBrowserHandler.onExecute event.",
+ "properties": {
+ "entries": {
+ "type": "array",
+ "items": { "type": "any" },
+ "description": "Array of Entry instances representing files that are targets of this action (selected in ChromeOS file browser)."
+ },
+ "tab_id" : {
+ "type": "integer",
+ "optional": true,
+ "description": "The ID of the tab that raised this event. Tab IDs are unique within a browser session."
+ }
+ }
+ }
+ ],
+
+ "events": [
+ {
+ "name": "onExecute",
+ "type": "function",
+ "description": "Fired when file system action is executed from ChromeOS file browser.",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "File browser action id as specified in the listener component's manifest."
+ },
+ {
+ "name": "details",
+ "$ref": "FileHandlerExecuteEventDetails",
+ "description": "File handler execute event details."
+ }
+ ]
+ }
+ ],
+
+ "functions": [
+ {
+ "name": "selectFile",
+ "type": "function",
+ "description": "Prompts user to select file path under which file should be saved. When the file is selected, file access permission required to use the file (read, write and create) are granted to the caller. The file will not actually get created during the function call, so function caller must ensure its existence before using it. The function has to be invoked with a user gesture.",
+ "parameters": [
+ {
+ "name": "selectionParams",
+ "type": "object",
+ "description": "Parameters that will be used while selecting the file.",
+ "properties": {
+ "suggestedName": {
+ "type": "string",
+ "description": "Suggested name for the file."
+ },
+ "allowedFileExtensions": {
+ "type": "array",
+ "items": { "type": "string" },
+ "optional": true,
+ "description": "List of file extensions that the selected file can have. The list is also used to specify what files to be shown in the select file dialog. Files with the listed extensions are only shown in the dialog. Extensions should not include the leading '.'. Example: ['jpg', 'png']"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Function called upon completion.",
+ "parameters": [
+ {
+ "name": "result",
+ "description": "Result of the method.",
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "description": "Whether the file has been selected."
+ },
+ "entry": {
+ "type": "object",
+ "constructor": "Entry",
+ "additionalProperties": { "type": "any" },
+ "optional": true,
+ "description": "Selected file entry. It will be null if a file hasn't been selected."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/file_browser_handler_internal.json b/chromium/chrome/common/extensions/api/file_browser_handler_internal.json
new file mode 100644
index 00000000000..af426113c5e
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/file_browser_handler_internal.json
@@ -0,0 +1,85 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "fileBrowserHandlerInternal",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api.h"
+ },
+ "description": "none",
+ "platforms": ["chromeos"],
+ "types": [
+ {
+ "id": "FileEntryInfo",
+ "type": "object",
+ "description": "Information needed to build a file entry that will be returned through the API.",
+ "properties": {
+ "fileSystemName": {
+ "type": "string"
+ },
+ "fileSystemRoot": {
+ "type": "string"
+ },
+ "fileFullPath": {
+ "type": "string"
+ },
+ "fileIsDirectory": {
+ "type": "boolean"
+ }
+ }
+ }
+ ],
+
+ "functions": [
+ {
+ "name": "selectFile",
+ "type": "function",
+ "description": "Prompts user to select file path under which a new file will be created. If the user selects file, the file gets created or, if it already exists, truncated. The function has to be called with user gesture.",
+ "parameters": [
+ {
+ "name": "selectionParams",
+ "type": "object",
+ "description": "Parameters that will be used to create new file.",
+ "properties": {
+ "suggestedName": {
+ "type": "string",
+ "description": "Suggested name for the new file."
+ },
+ "allowedFileExtensions": {
+ "type": "array",
+ "items": { "type": "string" },
+ "optional": true,
+ "description": "List of file extensions that the selected file can have. The list is also used to specify what files to be shown in the select file dialog. Files with the listed extensions are only shown in the dialog. Extensions should not include the leading '.'. Example: ['jpg', 'png']"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Function called upon completion.",
+ "parameters": [
+ {
+ "name": "result",
+ "description": "Result of the method.",
+ "type": "object",
+ "properties": {
+ "success": {
+ "type": "boolean",
+ "description": "Has the file been selected."
+ },
+ "entry": {
+ "$ref": "FileEntryInfo",
+ "optional": true,
+ "description": "Selected file entry."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/first_run_private.json b/chromium/chrome/common/extensions/api/first_run_private.json
new file mode 100644
index 00000000000..e577bbd7a7f
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/first_run_private.json
@@ -0,0 +1,42 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "firstRunPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/first_run_private_api.h"
+ },
+ "platforms": ["chromeos"],
+ "description": "none",
+ "functions": [
+ {
+ "name": "getLocalizedStrings",
+ "type": "function",
+ "description": "Gets translated strings and initialization data.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "additionalProperties": {"type": "any"}
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "launchTutorial",
+ "type": "function",
+ "description": "Launches overlay tutorial.",
+ "nodoc": "true",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/font_settings.json b/chromium/chrome/common/extensions/api/font_settings.json
new file mode 100644
index 00000000000..fa14ef3668a
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/font_settings.json
@@ -0,0 +1,496 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "fontSettings",
+ "description": "Use the <code>chrome.fontSettings</code> API to manage Chrome's font settings.",
+ "types": [
+ {
+ "id": "FontName",
+ "type": "object",
+ "description": "Represents a font name.",
+ "properties": {
+ "fontId": {
+ "type": "string",
+ "description": "The font ID."
+ },
+ "displayName": {
+ "type": "string",
+ "description": "The display name of the font."
+ }
+ }
+ },
+ {
+ "id": "ScriptCode",
+ "type": "string",
+ "enum": [ "Afak", "Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Bass", "Batk",
+ "Beng", "Blis", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans",
+ "Cari", "Cham", "Cher", "Cirt", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva",
+ "Dsrt", "Dupl", "Egyd", "Egyh", "Egyp", "Elba", "Ethi", "Geor", "Geok",
+ "Glag", "Goth", "Gran", "Grek", "Gujr", "Guru", "Hang", "Hani", "Hano",
+ "Hans", "Hant", "Hebr", "Hluw", "Hmng", "Hung", "Inds", "Ital", "Java",
+ "Jpan", "Jurc", "Kali", "Khar", "Khmr", "Khoj", "Knda", "Kpel", "Kthi",
+ "Lana", "Laoo", "Latf", "Latg", "Latn", "Lepc", "Limb", "Lina", "Linb",
+ "Lisu", "Loma", "Lyci", "Lydi", "Mand", "Mani", "Maya", "Mend", "Merc",
+ "Mero", "Mlym", "Moon", "Mong", "Mroo", "Mtei", "Mymr", "Narb", "Nbat",
+ "Nkgb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Palm",
+ "Perm", "Phag", "Phli", "Phlp", "Phlv", "Phnx", "Plrd", "Prti", "Rjng",
+ "Roro", "Runr", "Samr", "Sara", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd",
+ "Sind", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Syre", "Syrj", "Syrn",
+ "Tagb", "Takr", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Teng",
+ "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Tirh", "Ugar", "Vaii", "Visp",
+ "Wara", "Wole", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Zyyy" ],
+ "description": "An ISO 15924 script code. The default, or global, script is represented by script code \"Zyyy\"."
+ },
+ {
+ "id": "GenericFamily",
+ "type": "string",
+ "enum": ["standard", "sansserif", "serif", "fixed", "cursive", "fantasy"],
+ "description": "A CSS generic font family."
+ },
+ {
+ "id": "LevelOfControl",
+ "description": "One of<br><var>not_controllable</var>: cannot be controlled by any extension<br><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence<br><var>controllable_by_this_extension</var>: can be controlled by this extension<br><var>controlled_by_this_extension</var>: controlled by this extension",
+ "type": "string",
+ "enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]
+ }
+ ],
+ "functions": [
+ {
+ "name": "clearFont",
+ "description": "Clears the font set by this extension, if any.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "script": {
+ "$ref": "ScriptCode",
+ "description": "The script for which the font should be cleared. If omitted, the global script font setting is cleared.",
+ "optional": true
+ },
+ "genericFamily": {
+ "$ref": "GenericFamily",
+ "description": "The generic font family for which the font should be cleared."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getFont",
+ "description": "Gets the font for a given script and generic font family.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "script": {
+ "$ref": "ScriptCode",
+ "description": "The script for which the font should be retrieved. If omitted, the font setting for the global script (script code \"Zyyy\") is retrieved.",
+ "optional": true
+ },
+ "genericFamily": {
+ "$ref": "GenericFamily",
+ "description": "The generic font family for which the font should be retrieved."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "fontId": {
+ "type": "string",
+ "description": "The font ID. Rather than the literal font ID preference value, this may be the ID of the font that the system resolves the preference value to. So, <var>fontId</var> can differ from the font passed to <code>setFont</code>, if, for example, the font is not available on the system. The empty string signifies fallback to the global script font setting."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setFont",
+ "description": "Sets the font for a given script and generic font family.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "script": {
+ "$ref": "ScriptCode",
+ "description": "The script code which the font should be set. If omitted, the font setting for the global script (script code \"Zyyy\") is set.",
+ "optional": true
+ },
+ "genericFamily": {
+ "$ref": "GenericFamily",
+ "description": "The generic font family for which the font should be set."
+ },
+ "fontId": {
+ "type": "string",
+ "description": "The font ID. The empty string means to fallback to the global script font setting."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getFontList",
+ "description": "Gets a list of fonts on the system.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "results",
+ "type": "array",
+ "items": { "$ref": "FontName" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "clearDefaultFontSize",
+ "description": "Clears the default font size set by this extension, if any.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getDefaultFontSize",
+ "description": "Gets the default font size.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setDefaultFontSize",
+ "description": "Sets the default font size.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "clearDefaultFixedFontSize",
+ "description": "Clears the default fixed font size set by this extension, if any.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getDefaultFixedFontSize",
+ "description": "Gets the default size for fixed width fonts.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setDefaultFixedFontSize",
+ "description": "Sets the default size for fixed width fonts.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "clearMinimumFontSize",
+ "description": "Clears the minimum font size set by this extension, if any.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getMinimumFontSize",
+ "description": "Gets the minimum font size.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "description": "This parameter is currently unused.",
+ "properties": {}
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setMinimumFontSize",
+ "description": "Sets the minimum font size.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onFontChanged",
+ "description": "Fired when a font setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "fontId": {
+ "type": "string",
+ "description": "The font ID. See the description in <code>getFont</code>."
+ },
+ "script": {
+ "$ref": "ScriptCode",
+ "description": "The script code for which the font setting has changed.",
+ "optional": true
+ },
+ "genericFamily": {
+ "$ref": "GenericFamily",
+ "description": "The generic font family for which the font setting has changed."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onDefaultFontSizeChanged",
+ "description": "Fired when the default font size setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onDefaultFixedFontSizeChanged",
+ "description": "Fired when the default fixed font size setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onMinimumFontSizeChanged",
+ "description": "Fired when the minimum font size setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "pixelSize": {
+ "type": "integer",
+ "description": "The font size in pixels."
+ },
+ "levelOfControl": {
+ "$ref": "LevelOfControl",
+ "description": "The level of control this extension has over the setting."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/gcm.json b/chromium/chrome/common/extensions/api/gcm.json
new file mode 100644
index 00000000000..cd814128ef6
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/gcm.json
@@ -0,0 +1,161 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "gcm",
+ "description": "Use <code>chrome.gcm</code> to enable apps and extensions to send and receive messages through <a href='http://developer.android.com/google/gcm/index.html'>Google Cloud Messaging for Android</a>.",
+ "properties": {
+ "MAX_MESSAGE_SIZE": {
+ "value": 4096,
+ "description": "The maximum size (in bytes) of all key/value pairs in a message."
+ }
+ },
+ "functions": [
+ {
+ "name": "register",
+ "type": "function",
+ "description": "Registers the application with GCM. The registration ID will be returned by the <code>callback</code>. If <code>register</code> is called again with the same list of <code>senderIds</code>, the same registration ID will be returned.",
+ "parameters": [
+ {
+ "name": "senderIds",
+ "type": "array",
+ "items": {
+ "type": "string",
+ "minLength": 1
+ },
+ "minItems": 1,
+ "maxItems": 100,
+ "description": "A list of server IDs that are allowed to send messages to the application. It should contain at least one and no more than 100 sender IDs."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Function called when registration completes. It should check $ref:runtime.lastError for error when <code>registrationId</code> is empty.",
+ "parameters": [
+ {
+ "name": "registrationId",
+ "type": "string",
+ "description": "A registration ID assigned to the application by the GCM."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "send",
+ "type": "function",
+ "description": "Sends a message according to its contents.",
+ "parameters": [
+ {
+ "name": "message",
+ "type": "object",
+ "description": "A message to send to the other party via GCM.",
+ "properties": {
+ "destinationId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "The ID of the server to send the message to as assigned by <a href='https://code.google.com/apis/console'>Google API Console</a>."
+ },
+ "messageId": {
+ "type": "string",
+ "minLength": 1,
+ "description": "The ID of the message. It must be unique for each message."
+ },
+ "timeToLive": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 2419200,
+ "optional": true,
+ "description": "Time-to-live of the message in seconds. If it is not possible to send the message wihtin that time an error will be raised. A time-to-live of 0 indicates that the message should be sent immediately or fail if it's not possible. The maximum and a default value of time-to-live is 2419200 seconds (4 weeks)."
+ },
+ "data": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": {
+ "type": "string",
+ "minLength": 1
+ },
+ "description": "Message data to send to the server. <code>goog.</code> and <code>google</code> are disallowed as key prefixes. Sum of all key/value pairs should not exceed $ref:MAX_MESSAGE_SIZE."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "A function called after the message is successfully queued for sending. $ref:runtime.lastError should be checked, to ensure a message was sent without problems.",
+ "parameters": [
+ {
+ "name": "messageId",
+ "type": "string",
+ "description": "The ID of the message that the callback was issued for."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onMessage",
+ "type": "function",
+ "description": "Fired when a message is received through GCM.",
+ "parameters": [
+ {
+ "name": "message",
+ "type": "object",
+ "description": "A message received from another party via GCM.",
+ "properties": {
+ "data": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The message data."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onMessagesDeleted",
+ "type": "function",
+ "description": "Fired when a GCM server had to delete messages to the application from its queue in order to manage its size. The app is expected to handle that case gracefully, e.g. by running a full sync with its server."
+ },
+ {
+ "name": "onSendError",
+ "type": "function",
+ "description": "Fired when it was not possible to send a message to the GCM server.",
+ "parameters": [
+ {
+ "name": "error",
+ "type": "object",
+ "description": "An error related to sending a message raised by GCM.",
+ "properties": {
+ "errorMessage": {
+ "type": "string",
+ "description": "The error message describing the problem."
+ },
+ "messageId": {
+ "type": "string",
+ "optional": true,
+ "description": "The ID of the message with this error, if error is related to a specific message."
+ },
+ "details": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Additional details related to the error, when available."
+ }
+ },
+ "description": "An error that occured while trying to send the message either in Chrome or on the GCM server. Application can retry sending the message with a reasonable backoff and possibly longer time-to-live."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/history.json b/chromium/chrome/common/extensions/api/history.json
new file mode 100644
index 00000000000..b73e3e32d50
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/history.json
@@ -0,0 +1,181 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "history",
+ "description": "Use the <code>chrome.history</code> API to interact with the browser's record of visited pages. You can add, remove, and query for URLs in the browser's history. To override the history page with your own version, see <a href='override.html'>Override Pages</a>.",
+ "types": [
+ {
+ "id": "HistoryItem",
+ "type": "object",
+ "description": "An object encapsulating one result of a history query.",
+ "properties": {
+ "id": {"type": "string", "minimum": 0, "description": "The unique identifier for the item."},
+ "url": {"type": "string", "optional": true, "description": "The URL navigated to by a user."},
+ "title": {"type": "string", "optional": true, "description": "The title of the page when it was last loaded."},
+ "lastVisitTime": {"type": "number", "optional": true, "description": "When this page was last loaded, represented in milliseconds since the epoch."},
+ "visitCount": {"type": "integer", "optional": true, "description": "The number of times the user has navigated to this page."},
+ "typedCount": {"type": "integer", "optional": true, "description": "The number of times the user has navigated to this page by typing in the address."}
+ }
+ },
+ {
+ "id": "VisitItem",
+ "type": "object",
+ "description": "An object encapsulating one visit to a URL.",
+ "properties": {
+ "id": {"type": "string", "minimum": 0, "description": "The unique identifier for the item."},
+ "visitId": {"type": "string", "description": "The unique identifier for this visit."},
+ "visitTime": {"type": "number", "optional": true, "description": "When this visit occurred, represented in milliseconds since the epoch."},
+ "referringVisitId": {"type": "string", "description": "The visit ID of the referrer."},
+ "transition": {
+ "type": "string",
+ "enum": ["link", "typed", "auto_bookmark", "auto_subframe", "manual_subframe", "generated", "auto_toplevel", "form_submit", "reload", "keyword", "keyword_generated"],
+ "description": "The <a href='#transition_types'>transition type</a> for this visit from its referrer."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "search",
+ "type": "function",
+ "description": "Searches the history for the last visit time of each page matching the query.",
+ "parameters": [
+ {
+ "name": "query",
+ "type": "object",
+ "properties": {
+ "text": {"type": "string", "description": "A free-text query to the history service. Leave empty to retrieve all pages."},
+ "startTime": {"type": "number", "optional": true, "description": "Limit results to those visited after this date, represented in milliseconds since the epoch."},
+ "endTime": {"type": "number", "optional": true, "description": "Limit results to those visited before this date, represented in milliseconds since the epoch."},
+ "maxResults": {"type": "integer", "optional": true, "minimum": 0, "description": "The maximum number of results to retrieve. Defaults to 100."}
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ { "name": "results", "type": "array", "items": { "$ref": "HistoryItem"} }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getVisits",
+ "type": "function",
+ "description": "Retrieves information about visits to a URL.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "url": {"type": "string", "description": "The URL for which to retrieve visit information. It must be in the format as returned from a call to history.search."}
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ { "name": "results", "type": "array", "items": { "$ref": "VisitItem"} }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "addUrl",
+ "type": "function",
+ "description": "Adds a URL to the history at the current time with a <a href='#transition_types'>transition type</a> of \"link\".",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "url": {"type": "string", "description": "The URL to add."}
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "deleteUrl",
+ "type": "function",
+ "description": "Removes all occurrences of the given URL from the history.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "url": {"type": "string", "description": "The URL to remove."}
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "deleteRange",
+ "type": "function",
+ "description": "Removes all items within the specified date range from the history. Pages will not be removed from the history unless all visits fall within the range.",
+ "parameters": [
+ {
+ "name": "range",
+ "type": "object",
+ "properties": {
+ "startTime": { "type": "number", "description": "Items added to history after this date, represented in milliseconds since the epoch." },
+ "endTime": { "type": "number", "description": "Items added to history before this date, represented in milliseconds since the epoch." }
+ }
+ },
+ {
+ "name": "callback", "type": "function", "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "deleteAll",
+ "type": "function",
+ "description": "Deletes all items from the history.",
+ "parameters": [
+ {
+ "name": "callback", "type": "function", "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onVisited",
+ "type": "function",
+ "description": "Fired when a URL is visited, providing the HistoryItem data for that URL. This event fires before the page has loaded.",
+ "parameters": [
+ { "name": "result", "$ref": "HistoryItem"}
+ ]
+ },
+ {
+ "name": "onVisitRemoved",
+ "type": "function",
+ "description": "Fired when one or more URLs are removed from the history service. When all visits have been removed the URL is purged from history.",
+ "parameters": [
+ {
+ "name": "removed",
+ "type": "object",
+ "properties": {
+ "allHistory": { "type": "boolean", "description": "True if all history was removed. If true, then urls will be empty." },
+ "urls": { "type": "array", "items": { "type": "string" }, "optional": true}
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/i18n.json b/chromium/chrome/common/extensions/api/i18n.json
new file mode 100644
index 00000000000..510256ce2a9
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/i18n.json
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "i18n",
+ "description": "Use the <code>chrome.i18n</code> infrastructure to implement internationalization across your whole app or extension.",
+ "types": [],
+ "functions": [
+ {
+ "name": "getAcceptLanguages",
+ "type": "function",
+ "description": "Gets the accept-languages of the browser. This is different from the locale used by the browser; to get the locale, use <code>window.navigator.language</code>.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {"name": "languages", "type": "array", "items": {"type": "string"}, "description": "Array of the accept languages of the browser, such as en-US,en,zh-CN"}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getMessage",
+ "nocompile": true,
+ "type": "function",
+ "description": "Gets the localized string for the specified message. If the message is missing, this method returns an empty string (''). If the format of the <code>getMessage()</code> call is wrong &mdash; for example, <em>messageName</em> is not a string or the <em>substitutions</em> array has more than 9 elements &mdash; this method returns <code>undefined</code>.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "messageName",
+ "description": "The name of the message, as specified in the <a href='i18n-messages.html'><code>messages.json</code></a> file."
+ },
+ {
+ "type": "any",
+ "name": "substitutions",
+ "optional": true,
+ "description": "Up to 9 substitution strings, if the message requires any."
+ }
+ ],
+ "returns": {
+ "type": "string",
+ "description": "Message localized for current locale."
+ }
+ }
+ ],
+ "events": []
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/idle.json b/chromium/chrome/common/extensions/api/idle.json
new file mode 100644
index 00000000000..153e931c4d0
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/idle.json
@@ -0,0 +1,64 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "idle",
+ "description": "Use the <code>chrome.idle</code> API to detect when the machine's idle state changes.",
+ "types": [],
+ "functions": [
+ {
+ "name": "queryState",
+ "type": "function",
+ "description": "Returns \"locked\" if the system is locked, \"idle\" if the user has not generated any input for a specified number of seconds, or \"active\" otherwise.",
+ "parameters": [
+ {
+ "name": "detectionIntervalInSeconds",
+ "type": "integer",
+ "minimum": 15,
+ "description": "The system is considered idle if detectionIntervalInSeconds seconds have elapsed since the last user input detected."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "newState",
+ "type": "string",
+ "enum": ["active", "idle", "locked"]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setDetectionInterval",
+ "type": "function",
+ "description": "Sets the interval, in seconds, used to determine when the system is in an idle state for onStateChanged events. The default interval is 60 seconds.",
+ "parameters": [
+ {
+ "name": "intervalInSeconds",
+ "type": "integer",
+ "minimum": 15,
+ "description": "Threshold, in seconds, used to determine when the system is in an idle state."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onStateChanged",
+ "type": "function",
+ "description": "Fired when the system changes to an active, idle or locked state. The event fires with \"locked\" if the screen is locked or the screensaver activates, \"idle\" if the system is unlocked and the user has not generated any input for a specified number of seconds, and \"active\" when the user generates input on an idle system.",
+ "parameters": [
+ {
+ "name": "newState",
+ "type": "string",
+ "enum": ["active", "idle", "locked"]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/infobars.json b/chromium/chrome/common/extensions/api/infobars.json
new file mode 100644
index 00000000000..4842fe4b6a4
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/infobars.json
@@ -0,0 +1,54 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "infobars",
+ "description": "Use the <code>chrome.infobars</code> API to add a horizontal panel just above a tab's contents. See the screenshot below.",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/infobars/infobar_extension_api.h"
+ },
+ "types": [],
+ "functions": [
+ {
+ "name": "show",
+ "type": "function",
+ "description": "Shows an infobar in the specified tab. The infobar will be closed automatically when the tab navigates. Use window.close() to close the infobar before then.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "description": "The tab id for the tab to display the infobar in."
+ },
+ "path": {
+ "type": "string",
+ "description": "The html file that contains the infobar."
+ },
+ "height": {
+ "type": "integer",
+ "description": "The height (in pixels) of the infobar to show. If omitted, the default infobar height will be used.",
+ "optional": true,
+ "minimum": 0,
+ "maximum": 72
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "window", "$ref": "windows.Window", "description": "Contains details about the window in which the infobar was created."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/input_ime.json b/chromium/chrome/common/extensions/api/input_ime.json
new file mode 100644
index 00000000000..7254776ece7
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/input_ime.json
@@ -0,0 +1,668 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "input.ime",
+ "description": "Use the <code>chrome.input.ime</code> API to implement a custom IME for Chrome OS. This allows your extension to handle keystrokes, set the composition, and manage the candidate window.",
+ "platforms": ["chromeos"],
+ "types": [
+ {
+ "id": "KeyboardEvent",
+ "type": "object",
+ "description": "See http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent",
+ "properties": {
+ "type": {"type": "string", "description": "One of keyup or keydown.", "enum": ["keyup", "keydown"]},
+ "requestId": {"type": "string", "description": "The ID of the request."},
+ "key": {"type": "string", "description": "Value of the key being pressed"},
+ "code": {"type": "string", "description": "Value of the physical key being pressed. The value is not affected by current keyboard layout or modifier state."},
+ "altKey": {"type": "boolean", "optional": true, "description": "Whether or not the ALT key is pressed."},
+ "ctrlKey": {"type": "boolean", "optional": true, "description": "Whether or not the CTRL key is pressed."},
+ "shiftKey": {"type": "boolean", "optional": true, "description": "Whether or not the SHIFT key is pressed."},
+ "capsLock": {"type": "boolean", "optional": true, "description": "Whether or not the CAPS_LOCK is enabled."}
+ }
+ },
+ {
+ "id": "InputContext",
+ "type": "object",
+ "description": "Describes an input Context",
+ "properties": {
+ "contextID": {"type": "integer", "description": "This is used to specify targets of text field operations. This ID becomes invalid as soon as onBlur is called."},
+ "type": {"type": "string", "description": "Type of value this text field edits, (Text, Number, URL, etc)", "enum": ["text", "search", "tel", "url", "email", "number"]}
+ }
+ },
+ {
+ "id": "MenuItem",
+ "type": "object",
+ "description": "A menu item used by an input method to interact with the user from the language menu.",
+ "properties": {
+ "id": {"type": "string", "description": "String that will be passed to callbacks referencing this MenuItem."},
+ "label": {"type": "string", "optional": true, "description": "Text displayed in the menu for this item."},
+ "style": {
+ "type": "string",
+ "optional": true,
+ "description": "Enum representing if this item is: check, radio, or a separator. Radio buttons between separators are considered grouped.",
+ "enum": ["check", "radio", "separator"]
+ },
+ "visible": {"type": "boolean", "optional": true, "description": "Indicates this item is visible."},
+ "checked": {"type": "boolean", "optional": true, "description": "Indicates this item should be drawn with a check."},
+ "enabled": {"type": "boolean", "optional": true, "description": "Indicates this item is enabled."}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "setComposition",
+ "type": "function",
+ "description": "Set the current composition. If this extension does not own the active IME, this fails.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context where the composition text will be set",
+ "type": "integer"
+ },
+ "text": {
+ "description": "Text to set",
+ "type": "string"
+ },
+ "selectionStart": {
+ "description": "Position in the text that the selection starts at.",
+ "optional": true,
+ "type": "integer"
+ },
+ "selectionEnd": {
+ "description": "Position in the text that the selection ends at.",
+ "optional": true,
+ "type": "integer"
+ },
+ "cursor": {
+ "description": "Position in the text of the cursor.",
+ "type": "integer"
+ },
+ "segments": {
+ "description": "List of segments and their associated types.",
+ "type": "array",
+ "optional": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "start": {
+ "description": "Index of the character to start this segment at",
+ "type": "integer"
+ },
+ "end": {
+ "description": "Index of the character to end this segment after.",
+ "type": "integer"
+ },
+ "style": {
+ "description": "How to render this segment",
+ "enum": ["underline", "doubleUnderline"],
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes with a boolean indicating if the text was accepted or not. On failure, chrome.runtime.lastError is set.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "clearComposition",
+ "type": "function",
+ "description": "Clear the current composition. If this extension does not own the active IME, this fails.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context where the composition will be cleared",
+ "type": "integer"
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes with a boolean indicating if the text was accepted or not. On failure, chrome.runtime.lastError is set.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "commitText",
+ "type": "function",
+ "description": "Commits the provided text to the current input.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context where the text will be committed",
+ "type": "integer"
+ },
+ "text": {
+ "description": "The text to commit",
+ "type": "string"
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes with a boolean indicating if the text was accepted or not. On failure, chrome.runtime.lastError is set.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sendKeyEvents",
+ "type": "function",
+ "description": "Sends the key events. This function is expected to be used by virtual keyboards. When key(s) on a virtual keyboard is pressed by a user, this function is used to propagate that event to the system.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context where the key events will be sent",
+ "type": "integer"
+ },
+ "keyData": {
+ "type": "array",
+ "description": "Data on the key event.",
+ "items": {
+ "$ref": "KeyboardEvent"
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "setCandidateWindowProperties",
+ "type": "function",
+ "description": "Sets the properties of the candidate window. This fails if the extension doesn't own the active IME",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "engineID": {
+ "description": "ID of the engine to set properties on.",
+ "type": "string"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "visible": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True to show the Candidate window, false to hide it."
+ },
+ "cursorVisible": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True to show the cursor, false to hide it."
+ },
+ "vertical": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True if the candidate window should be rendered vertical, false to make it horizontal."
+ },
+ "pageSize": {
+ "type": "integer",
+ "optional": true,
+ "description": "The number of candidates to display per page."
+ },
+ "auxiliaryText": {
+ "type": "string",
+ "optional": true,
+ "description": "Text that is shown at the bottom of the candidate window."
+ },
+ "auxiliaryTextVisible": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True to display the auxiliary text, false to hide it."
+ },
+ "windowPosition": {
+ "type": "string",
+ "description": "Where to display the candidate window. If set to 'cursor', the window follows the cursor. If set to 'composition', the window is locked to the beginning of the composition.",
+ "enum": ["cursor", "composition"],
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setCandidates",
+ "type": "function",
+ "description": "Sets the current candidate list. This fails if this extension doesn't own the active IME",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context that owns the candidate window.",
+ "type": "integer"
+ },
+ "candidates": {
+ "description": "List of candidates to show in the candidate window",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "candidate": {"type": "string", "description": "The candidate"},
+ "id": {"type": "integer", "description": "The candidate's id"},
+ "parentId": {"type": "integer", "optional": true, "description": "The id to add these candidates under"},
+ "label": {"type": "string", "optional": true, "description": "Short string displayed to next to the candidate, often the shortcut key or index"},
+ "annotation": {"type": "string", "optional": true, "description": "Additional text describing the candidate"},
+ "usage": {
+ "type": "object",
+ "optional": true,
+ "description": "The usage or detail description of word.",
+ "properties": {
+ "title": { "type": "string", "description": "The title string of details description."},
+ "body": { "type": "string", "description": "The body string of detail description."}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setCursorPosition",
+ "type": "function",
+ "description": "Set the position of the cursor in the candidate window. This is a no-op if this extension does not own the active IME.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "contextID": {
+ "description": "ID of the context that owns the candidate window.",
+ "type": "integer"
+ },
+ "candidateID": {
+ "description": "ID of the candidate to select.",
+ "type": "integer"
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setMenuItems",
+ "type": "function",
+ "description": "Adds the provided menu items to the language menu when this IME is active.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "engineID": {
+ "description": "ID of the engine to use",
+ "type": "string"
+ },
+ "items": {
+ "description": "MenuItems to add. They will be added in the order they exist in the array.",
+ "type": "array",
+ "items": {
+ "$ref": "MenuItem"
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "updateMenuItems",
+ "type": "function",
+ "description": "Updates the state of the MenuItems specified",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "engineID": {
+ "description": "ID of the engine to use",
+ "type": "string"
+ },
+ "items": {
+ "description": "Array of MenuItems to update",
+ "type": "array",
+ "items": {
+ "$ref": "MenuItem"
+ }
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "deleteSurroundingText",
+ "type": "function",
+ "description": "Deletes the text around the caret.",
+ "parameters": [
+ {
+ "name": "parameters",
+ "type": "object",
+ "properties": {
+ "engineID": {
+ "type": "string",
+ "description": "ID of the engine receiving the event."
+ },
+ "contextID": {
+ "type": "integer",
+ "description": "ID of the context where the surrounding text will be deleted."
+ },
+ "offset": {
+ "type": "integer",
+ "description": "The offset from the caret position where deletion will start. This value can be negative."
+ },
+ "length": {
+ "type": "integer",
+ "description": "The number of characters to be deleted",
+ "minimum": 0
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the operation completes.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "keyEventHandled",
+ "type": "function",
+ "description": "Indicates that the key event received by onKeyEvent is handled. This should only be called if the onKeyEvent listener is asynchronous.",
+ "parameters": [
+ {"type": "string", "name": "requestId", "description": "Request id of the event that was handled. This should come from keyEvent.requestId"},
+ {"type": "boolean", "name": "response", "description": "True if the keystroke was handled, false if not"}
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onActivate",
+ "type": "function",
+ "description": "This event is sent when an IME is activated. It signals that the IME will be receiving onKeyPress events.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ }
+ ]
+ },
+ {
+ "name": "onDeactivated",
+ "type": "function",
+ "description": "This event is sent when an IME is deactivated. It signals that the IME will no longer be receiving onKeyPress events.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ }
+ ]
+ },
+ {
+ "name": "onFocus",
+ "type": "function",
+ "description": "This event is sent when focus enters a text box. It is sent to all extensions that are listening to this event, and enabled by the user.",
+ "parameters": [
+ {
+ "$ref": "InputContext",
+ "name": "context",
+ "description": "Describes the text field that has acquired focus."
+ }
+ ]
+ },
+ {
+ "name": "onBlur",
+ "type": "function",
+ "description": "This event is sent when focus leaves a text box. It is sent to all extensions that are listening to this event, and enabled by the user.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "contextID",
+ "description": "The ID of the text field that has lost focus. The ID is invalid after this call"
+ }
+ ]
+ },
+ {
+ "name": "onInputContextUpdate",
+ "type": "function",
+ "description": "This event is sent when the properties of the current InputContext change, such as the the type. It is sent to all extensions that are listening to this event, and enabled by the user.",
+ "parameters": [
+ {
+ "$ref": "InputContext",
+ "name": "context",
+ "description": "An InputContext object describing the text field that has changed."
+ }
+ ]
+ },
+ {
+ "name": "onKeyEvent",
+ "type": "function",
+ "description": "This event is sent if this extension owns the active IME.",
+ "options": {
+ "supportsFilters": false,
+ "supportsListeners": true,
+ "supportsRules": false,
+ "maxListeners": 1
+ },
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ },
+ {
+ "$ref": "KeyboardEvent",
+ "name": "keyData",
+ "description": "Data on the key event"
+ }
+ ],
+ "extraParameters": [
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that specifies how the callback is invoked.",
+ "items": {
+ "type": "string",
+ "enum": ["async"]
+ }
+ }
+ ],
+ "returns": {
+ "type": "boolean",
+ "description": "True if the keystroke was handled, false if not. This function should always return a value if |async| is not specified.",
+ "optional": true
+ }
+ },
+ {
+ "name": "onCandidateClicked",
+ "type": "function",
+ "description": "This event is sent if this extension owns the active IME.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ },
+ {
+ "type": "integer",
+ "name": "candidateID",
+ "description": "ID of the candidate that was clicked."
+ },
+ {
+ "type": "string",
+ "name": "button",
+ "description": "Which mouse buttons was clicked.",
+ "enum": ["left", "middle", "right"]
+ }
+ ]
+ },
+ {
+ "name": "onMenuItemActivated",
+ "type": "function",
+ "description": "Called when the user selects a menu item",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ },
+ {
+ "type": "string",
+ "name": "name",
+ "description": "Name of the MenuItem which was activated"
+ }
+ ]
+ },
+ {
+ "name": "onSurroundingTextChanged",
+ "type": "function",
+ "description": "Called when the editable string around caret is changed or when the caret position is moved. The text length is limited to 100 characters for each back and forth direction.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ },
+ {
+ "type": "object",
+ "name": "surroundingInfo",
+ "description": "The surrounding information.",
+ "properties": {
+ "text": {
+ "type": "string",
+ "description": "The text around cursor."
+ },
+ "focus": {
+ "type": "integer",
+ "description": "The ending position of the selection. This value indicates caret position if there is no selection."
+ },
+ "anchor": {
+ "type": "integer",
+ "description": "The beginning position of the selection. This value indicates caret position if is no selection."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onReset",
+ "type": "function",
+ "description": "This event is sent when chrome terminates ongoing text input session.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "engineID",
+ "description": "ID of the engine receiving the event"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/input_method_private.json b/chromium/chrome/common/extensions/api/input_method_private.json
new file mode 100644
index 00000000000..9b40b62abb9
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/input_method_private.json
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "inputMethodPrivate",
+ "platforms": ["chromeos"],
+ "description": "none",
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets the current input method.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": false,
+ "description": "Callback which is called with the current input method.",
+ "parameters": [
+ {
+ "name": "inputMethodId",
+ "type": "string",
+ "description": "Current input method."
+ }
+ ]
+ }
+ ]
+ }, {
+ "name": "startIme",
+ "type": "function",
+ "description": "Notify to input method engine to be ready to accept events.",
+ "parameters" : []
+ }
+ ],
+ "events": [
+ {
+ "name": "onChanged",
+ "type": "function",
+ "description": "Fired when the input method is changed.",
+ "parameters": [
+ {
+ "name": "newInputMethodId",
+ "type": "string",
+ "description": "New input method which is being used."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/management.json b/chromium/chrome/common/extensions/api/management.json
new file mode 100644
index 00000000000..f2a35d956d2
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/management.json
@@ -0,0 +1,335 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace":"management",
+ "description": "The <code>chrome.management</code> API provides ways to manage the list of extensions/apps that are installed and running. It is particularly useful for extensions that <a href='override.html'>override</a> the built-in New Tab page.",
+ "types": [
+ {
+ "id": "IconInfo",
+ "description": "Information about an icon belonging to an extension, app, or theme.",
+ "type": "object",
+ "properties": {
+ "size": { "type": "integer", "description": "A number representing the width and height of the icon. Likely values include (but are not limited to) 128, 48, 24, and 16." },
+ "url": { "type": "string", "description": "The URL for this icon image. To display a grayscale version of the icon (to indicate that an extension is disabled, for example), append <code>?grayscale=true</code> to the URL." }
+ }
+ },
+ {
+ "id": "ExtensionInfo",
+ "description": "Information about an installed extension, app, or theme.",
+ "type": "object",
+ "properties": {
+ "id": {
+ "description": "The extension's unique identifier.",
+ "type": "string"
+ },
+ "name": {
+ "description": "The name of this extension, app, or theme.",
+ "type": "string"
+ },
+ "shortName": {
+ "description": "A short version of the name of this extension, app, or theme.",
+ "type": "string"
+ },
+ "description": {
+ "description": "The description of this extension, app, or theme.",
+ "type": "string"
+ },
+ "version": {
+ "description": "The <a href='manifest/version.html'>version</a> of this extension, app, or theme.",
+ "type": "string"
+ },
+ "mayDisable": {
+ "description": "Whether this extension can be disabled or uninstalled by the user.",
+ "type": "boolean"
+ },
+ "enabled": {
+ "description": "Whether it is currently enabled or disabled.",
+ "type": "boolean"
+ },
+ "disabledReason": {
+ "description": "A reason the item is disabled.",
+ "type": "string",
+ "enum": ["unknown", "permissions_increase"],
+ "optional": true
+ },
+ "isApp": {
+ "description": "True if this is an app.",
+ "type": "boolean",
+ "deprecated": "Please use $ref:ExtensionInfo.type."
+ },
+ "type": {
+ "description": "The type of this extension, app, or theme.",
+ "type": "string",
+ "enum": ["extension", "hosted_app", "packaged_app", "legacy_packaged_app", "theme"]
+ },
+ "appLaunchUrl": {
+ "description": "The launch url (only present for apps).",
+ "type": "string",
+ "optional": true
+ },
+ "homepageUrl": {
+ "description": "The URL of the homepage of this extension, app, or theme.",
+ "type": "string",
+ "optional": true
+ },
+ "updateUrl": {
+ "description": "The update URL of this extension, app, or theme.",
+ "type": "string",
+ "optional": true
+ },
+ "offlineEnabled": {
+ "description": "Whether the extension, app, or theme declares that it supports offline.",
+ "type": "boolean"
+ },
+ "optionsUrl": {
+ "description": "The url for the item's options page, if it has one.",
+ "type": "string"
+ },
+ "icons": {
+ "description": "A list of icon information. Note that this just reflects what was declared in the manifest, and the actual image at that url may be larger or smaller than what was declared, so you might consider using explicit width and height attributes on img tags referencing these images. See the <a href='manifest/icons.html'>manifest documentation on icons</a> for more details.",
+ "type": "array",
+ "optional": true,
+ "items": {
+ "$ref": "IconInfo"
+ }
+ },
+ "permissions": {
+ "description": "Returns a list of API based permissions.",
+ "type": "array",
+ "items" : {
+ "type": "string"
+ }
+ },
+ "hostPermissions": {
+ "description": "Returns a list of host based permissions.",
+ "type": "array",
+ "items" : {
+ "type": "string"
+ }
+ },
+ "installType": {
+ "description": "How the extension was installed. One of<br><var>admin</var>: The extension was installed because of an administrative policy,<br><var>development</var>: The extension was loaded unpacked in developer mode,<br><var>normal</var>: The extension was installed normally via a .crx file,<br><var>sideload</var>: The extension was installed by other software on the machine,<br><var>other</var>: The extension was installed by other means.",
+ "type": "string",
+ "enum": ["admin", "development", "normal", "sideload", "other"]
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getAll",
+ "description": "Returns a list of information about installed extensions and apps.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "array",
+ "name": "result",
+ "items": {
+ "$ref": "ExtensionInfo"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "get",
+ "description": "Returns information about the installed extension, app, or theme that has the given ID.",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "The ID from an item of $ref:ExtensionInfo."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": "true",
+ "parameters": [
+ {
+ "name": "result",
+ "$ref": "ExtensionInfo"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getPermissionWarningsById",
+ "description": "Returns a list of <a href='permission_warnings.html'>permission warnings</a> for the given extension id.",
+ "parameters": [
+ { "name": "id",
+ "type": "string",
+ "description": "The ID of an already installed extension."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": [
+ {
+ "name": "permissionWarnings",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getPermissionWarningsByManifest",
+ "description": "Returns a list of <a href='permission_warnings.html'>permission warnings</a> for the given extension manifest string. Note: This function can be used without requesting the 'management' permission in the manifest.",
+ "parameters": [
+ {
+ "name": "manifestStr",
+ "type": "string",
+ "description": "Extension manifest JSON string."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": [
+ {
+ "name": "permissionWarnings",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setEnabled",
+ "description": "Enables or disables an app or extension.",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "This should be the id from an item of $ref:ExtensionInfo."
+ },
+ {
+ "name": "enabled",
+ "type": "boolean",
+ "description": "Whether this item should be enabled or disabled."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "uninstall",
+ "description": "Uninstalls a currently installed app or extension.",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "This should be the id from an item of $ref:ExtensionInfo."
+ },
+ {
+ "type": "object",
+ "name": "options",
+ "optional": "true",
+ "properties": {
+ "showConfirmDialog": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether or not a confirm-uninstall dialog should prompt the user. Defaults to false."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "uninstallSelf",
+ "description": "Uninstalls the calling extension. Note: This function can be used without requesting the 'management' permission in the manifest.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "options",
+ "optional": "true",
+ "properties": {
+ "showConfirmDialog": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether or not a confirm-uninstall dialog should prompt the user. Defaults to false."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "launchApp",
+ "description": "Launches an application.",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "The extension id of the application."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onInstalled",
+ "description": "Fired when an app or extension has been installed.",
+ "type": "function",
+ "parameters": [{"name": "info", "$ref":"ExtensionInfo"}]
+ },
+ {
+ "name": "onUninstalled",
+ "description": "Fired when an app or extension has been uninstalled.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "id",
+ "type": "string",
+ "description": "The id of the extension, app, or theme that was uninstalled."
+ }
+ ]
+ },
+ {
+ "name": "onEnabled",
+ "description": "Fired when an app or extension has been enabled.",
+ "type": "function",
+ "parameters": [{"name": "info", "$ref":"ExtensionInfo"}]
+ },
+ {
+ "name": "onDisabled",
+ "description": "Fired when an app or extension has been disabled.",
+ "type": "function",
+ "parameters": [{"name": "info", "$ref":"ExtensionInfo"}]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/manifest_types.json b/chromium/chrome/common/extensions/api/manifest_types.json
new file mode 100644
index 00000000000..a2cc9d3bda1
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/manifest_types.json
@@ -0,0 +1,206 @@
+// Copyright 2013 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.
+
+// The type schemas for structured manifest items. Not actually a callable API.
+
+[
+ {
+ "namespace": "manifestTypes",
+ "description": "Schemas for structured manifest entries",
+ "compiler_options": {
+ "generate_error_messages": true
+ },
+ "types": [
+ {
+ "id": "ExternallyConnectable",
+ "type": "object",
+ // Note: description commented out because externally_connectable.html
+ // already describes it, and the repetition looks odd.
+ // "description": "The <code>externally_connectable</code> manifest property declares which extensions, apps, and web pages can connect to your extension via $ref:runtime.connect and $ref:runtime.sendMessage.",
+ "properties": {
+ "ids": {
+ "description": "<p>The IDs of extensions or apps that are allowed to connect. If left empty or unspecified, no extensions or apps can connect.</p><p>The wildcard <code>\"*\"</code> will allow all extensions and apps to connect.</p>",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "matches": {
+ "description": "<p>The URL patterns for <em>web pages</em> that are allowed to connect. <em>This does not affect content scripts.</em> If left empty or unspecified, no web pages can connect.</p><p>Patterns cannot include wildcard domains nor subdomains of (effective) top level domains; <code>*://google.com/*</code> and <code>http://*.chromium.org/*</code> are valid, while <code>&lt;all_urls&gt;</code>, <code>http://*/*</code>, <code>*://*.com/*</code>, and even <code>http://*.appspot.com/*</code> are not.</p>",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "string"}
+ },
+ "accepts_tls_channel_id": {
+ "description": "If <code>true</code>, messages sent via $ref:runtime.connect or $ref:runtime.sendMessage will set $ref:runtime.MessageSender.tlsChannelId if those methods request it to be. If <code>false</code>, $ref:runtime.MessageSender.tlsChannelId will never be set under any circumstance.",
+ "optional": true,
+ "type": "boolean"
+ }
+ }
+ },
+ {
+ "id": "ChromeSettingsOverrides",
+ "type": "object",
+ "description": "Chrome settings which can be overriden by an extension.",
+ "properties": {
+ "bookmarks_ui": {
+ "type": "object",
+ "description": "Settings to permit bookmarks user interface customization by extensions.",
+ "optional": true,
+ "properties": {
+ "hide_bookmark_button": {
+ "type": "boolean",
+ "description": "If <code>true</code>, the built-in bookmark button will be hidden within the user interface.",
+ "optional": true
+ }
+ }
+ },
+ "homepage": {
+ "description": "New value for the homepage.",
+ "optional": true,
+ "type": "string"
+ },
+ "search_provider": {
+ "type": "object",
+ "description": "A search engine",
+ "optional": true,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name of the search engine displayed to user."
+ },
+ "keyword": {
+ "type": "string",
+ "description": "Omnibox keyword for the search engine."
+ },
+ "favicon_url": {
+ "type": "string",
+ "description": "An icon URL for the search engine."
+ },
+ "search_url": {
+ "type": "string",
+ "description": "An search URL used by the search engine."
+ },
+ "encoding": {
+ "type": "string",
+ "description": "Encoding of the search term."
+ },
+ "suggest_url": {
+ "type": "string",
+ "optional": true,
+ "description": "If omitted, this engine does not support suggestions."
+ },
+ "instant_url": {
+ "type": "string",
+ "optional": true,
+ "description": "If omitted, this engine does not support instant."
+ },
+ "image_url": {
+ "type": "string",
+ "optional": true,
+ "description": "If omitted, this engine does not support image search."
+ },
+ "search_url_post_params": {
+ "type": "string",
+ "optional": true,
+ "description": "The string of post parameters to search_url"
+ },
+ "suggest_url_post_params": {
+ "type": "string",
+ "optional": true,
+ "description": "The string of post parameters to suggest_url"
+ },
+ "instant_url_post_params": {
+ "type": "string",
+ "optional": true,
+ "description": "The string of post parameters to instant_url"
+ },
+ "image_url_post_params": {
+ "type": "string",
+ "optional": true,
+ "description": "The string of post parameters to image_url"
+ },
+ "alternate_urls": {
+ "type": "array",
+ "items": { "type": "string" },
+ "optional": true,
+ "description": "A list of URL patterns that can be used, in addition to |search_url|."
+ },
+ "is_default": {
+ "type": "boolean",
+ "description": "Specifies if the search provider should be default."
+ }
+ }
+ },
+ "startup_pages": {
+ "description": "A new startup page to be added to the list.",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "string"}
+ }
+ }
+ },
+ {
+ "id": "SocketHostPatterns",
+ "description": "<p>A single string or a list of strings representing host:port patterns.</p>",
+ "choices": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ]
+ },
+ {
+ "id": "sockets",
+ "type": "object",
+ "description": "The <code>sockets</code> manifest property declares which sockets operations an app can issue.",
+ "properties": {
+ "udp": {
+ "description": "The <code>udp</code> manifest property declares which sockets.udp operations an app can issue.",
+ "optional": true,
+ "type": "object",
+ "properties": {
+ "bind": {
+ "description": "<p>The host:port pattern for <code>bind</code> operations.</p>",
+ "optional": true,
+ "$ref": "SocketHostPatterns"
+ },
+ "send": {
+ "description": "<p>The host:port pattern for <code>send</code> operations.</p>",
+ "optional": true,
+ "$ref": "SocketHostPatterns"
+ },
+ "multicastMembership": {
+ "description": "<p>The host:port pattern for <code>joinGroup</code> operations.</p>",
+ "optional": true,
+ "$ref": "SocketHostPatterns"
+ }
+ }
+ },
+ "tcp": {
+ "description": "The <code>tcp</code> manifest property declares which sockets.tcp operations an app can issue.",
+ "optional": true,
+ "type": "object",
+ "properties": {
+ "connect": {
+ "description": "<p>The host:port pattern for <code>connect</code> operations.</p>",
+ "optional": true,
+ "$ref": "SocketHostPatterns"
+ }
+ }
+ },
+ "tcpServer": {
+ "description": "The <code>tcpServer</code> manifest property declares which sockets.tcpServer operations an app can issue.",
+ "optional": true,
+ "type": "object",
+ "properties": {
+ "listen": {
+ "description": "<p>The host:port pattern for <code>listen</code> operations.</p>",
+ "optional": true,
+ "$ref": "SocketHostPatterns"
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/media_player_private.json b/chromium/chrome/common/extensions/api/media_player_private.json
new file mode 100644
index 00000000000..45bf73cb7b8
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/media_player_private.json
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "mediaPlayerPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/media_player_api.h"
+ },
+ "description": "none",
+ "platforms": ["chromeos"],
+ "events": [
+ {
+ "name": "onNextTrack",
+ "type": "function",
+ "description": "Notifies that the next track was requested.",
+ "parameters": []
+ },
+ {
+ "name": "onPrevTrack",
+ "type": "function",
+ "description": "Notifies that the previous tack was requested.",
+ "parameters": []
+ },
+ {
+ "name": "onTogglePlayState",
+ "type": "function",
+ "description": "Notifies that a play/pause toggle was requested.",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/metrics_private.json b/chromium/chrome/common/extensions/api/metrics_private.json
new file mode 100644
index 00000000000..06e52740a5b
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/metrics_private.json
@@ -0,0 +1,162 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "metricsPrivate",
+ "description": "none",
+ "types": [
+ {
+ "id": "MetricType",
+ "type": "object",
+ "description": "Describes the type of metric that is to be collected.",
+ "properties": {
+ "metricName": {"type": "string", "description": "A unique name within the extension for the metric."},
+ "type": {
+ "type": "string",
+ "enum": ["histogram-log", "histogram-linear"],
+ "description": "The type of metric, such as 'histogram-log' or 'histogram-linear'."
+ },
+ "min": {"type": "integer", "description": "The minimum sample value to be recoded. Must be greater than zero."},
+ "max": {"type": "integer", "description": "The maximum sample value to be recoded."},
+ "buckets": {"type": "integer", "description": "The number of buckets to use when separating the recorded values."}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getIsCrashReportingEnabled",
+ "description": "Returns true if the user opted in to sending crash reports.",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ { "name": "is_enabled", "type": "boolean" }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getFieldTrial",
+ "description": "Returns the group name chosen for the named trial, or the empty string if the trial does not exist or is not enabled.",
+ "type": "function",
+ "parameters": [
+ {"name": "name", "type": "string"},
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ { "name": "group", "type": "string" }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getVariationParams",
+ "description": "Returns variation parameters for the named trial if available, or undefined otherwise.",
+ "type": "function",
+ "parameters": [
+ {"name": "name", "type": "string"},
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ {
+ "name": "params",
+ "type": "object",
+ "additionalProperties": { "type": "string" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "recordUserAction",
+ "type": "function",
+ "description": "Records an action performed by the user.",
+ "parameters": [
+ {"name": "name", "type": "string"}
+ ]
+ },
+ {
+ "name": "recordPercentage",
+ "type": "function",
+ "description": "Records a percentage value from 1 to 100.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordCount",
+ "type": "function",
+ "description": "Records a value than can range from 1 to 1,000,000.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordSmallCount",
+ "type": "function",
+ "description": "Records a value than can range from 1 to 100.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordMediumCount",
+ "type": "function",
+ "description": "Records a value than can range from 1 to 10,000.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordTime",
+ "type": "function",
+ "description": "Records an elapsed time of no more than 10 seconds. The sample value is specified in milliseconds.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordMediumTime",
+ "type": "function",
+ "description": "Records an elapsed time of no more than 3 minutes. The sample value is specified in milliseconds.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordLongTime",
+ "type": "function",
+ "description": "Records an elapsed time of no more than 1 hour. The sample value is specified in milliseconds.",
+ "parameters": [
+ {"name": "metricName", "type": "string"},
+ {"name": "value", "type": "integer"}
+ ]
+ },
+ {
+ "name": "recordValue",
+ "type": "function",
+ "description": "Adds a value to the given metric.",
+ "parameters": [
+ {"name": "metric", "$ref": "MetricType"},
+ {"name": "value", "type": "integer"}
+ ]
+ }
+ ],
+ "events": []
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/networking_private.json b/chromium/chrome/common/extensions/api/networking_private.json
new file mode 100644
index 00000000000..1cdf358d7c4
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/networking_private.json
@@ -0,0 +1,385 @@
+// Copyright (c) 2013 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.
+
+[
+ {
+ "namespace":"networkingPrivate",
+ "description": "none",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/networking_private/networking_private_api.h"
+ },
+ "platforms": ["chromeos", "win"],
+ "types" : [
+ {
+ "id": "NetworkProperties",
+ "type": "object",
+ "additionalProperties": { "type": "any" }
+ },
+ {
+ "id": "ManagedNetworkProperties",
+ "type": "object",
+ "additionalProperties": { "type": "any" }
+ },
+ {
+ "id": "VerificationProperties",
+ "type": "object",
+ "properties": {
+ "certificate": {
+ "type": "string",
+ "description": "A string containing a PEM-encoded X.509 certificate for use in verifying the signed data."
+ },
+ "publicKey": {
+ "type": "string",
+ "description": "A string containing a PEM-encoded RSA public key to be used to compare with the one in signedData"
+ },
+ "nonce": {
+ "type": "string",
+ "description": "A string containing a base64-encoded random binary data for use in verifying the signed data."
+ },
+ "signedData": {
+ "type": "string",
+ "description": "A string containing the identifying data string signed by the device."
+ },
+ "deviceSerial": {
+ "type": "string",
+ "description": "A string containing the serial number of the device."
+ },
+ "deviceSsid": {
+ "type": "string",
+ "description": "A string containing the SSID of the device. Only set if the device has already been setup once."
+ },
+ "deviceBssid": {
+ "type": "string",
+ "description": "A string containing the BSSID of the device. Only set if the device has already been setup."
+ }
+ }
+ },
+ {
+ "id": "NetworkType",
+ "type": "string",
+ "enum": ["Ethernet", "WiFi", "Cellular"]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getProperties",
+ "description": "Gets all the properties of the network with id networkGuid. Includes all properties of the network (read-only and read/write values).",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to get properties from."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "NetworkProperties",
+ "description": "Results of the query for network properties."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getManagedProperties",
+ "description": "Gets the merged properties of the network with id networkGuid from the sources: User settings, shared settings, user policy, device policy and the currently active settings.",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to get properties from."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "ManagedNetworkProperties",
+ "description": "Results of the query for managed network properties."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getState",
+ "description": "Gets the cached read-only properties of the network with id networkGuid. This is meant to be a higher performance function than getProperties, which requires a round trip to query the networking subsystem. It only returns a subset of the properties returned by getProperties.",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to set properties on."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "NetworkProperties",
+ "description": "Results of the query for network properties."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setProperties",
+ "description": "Sets the properties of the network with id networkGuid.",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to set properties on."
+ },
+ {
+ "name": "properties",
+ "$ref": "NetworkProperties",
+ "description": "The properties to set on the network."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "createNetwork",
+ "description": "Creates a new network configuration from propeties. If a matching configured network already exists, this will fail. Otherwise returns the guid of the new network.",
+ "parameters": [
+ {
+ "name": "shared",
+ "type": "boolean",
+ "description": "If true, share this network configuration with other users."
+ },
+ {
+ "name": "properties",
+ "$ref": "NetworkProperties",
+ "description": "The properties to configure the new network with."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "guid",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getVisibleNetworks",
+ "description": "Gets the list of visible networks, and returns a list of cached, read-only network properties for each.",
+ "parameters": [
+ {
+ "name": "type",
+ "type": "string",
+ "enum": ["Ethernet", "WiFi", "Bluetooth", "Cellular", "VPN", "All"],
+ "description": "The type of networks to return."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "networkList",
+ "type": "array",
+ "items": { "$ref": "NetworkProperties" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getEnabledNetworkTypes",
+ "description": "Returns a list of the enabled network type.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "networkList",
+ "type": "array",
+ "items": { "$ref": "NetworkType" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "enableNetworkType",
+ "description": "Enable the specified network type.",
+ "parameters": [
+ {
+ "name": "networkType",
+ "$ref": "NetworkType"
+ }
+ ]
+ },
+ {
+ "name": "disableNetworkType",
+ "description": "Disable the specified network type.",
+ "parameters": [
+ {
+ "name": "networkType",
+ "$ref": "NetworkType"
+ }
+ ]
+ },
+ {
+ "name": "requestNetworkScan",
+ "description": "Requests that the networking subsystem scan for new networks and update the list returned by getVisibleNetworks. This is only a request: the network subsystem can choose to ignore it. If the list is updated, then the onNetworkListChanged event will be fired.",
+ "parameters": []
+ },
+ {
+ "name": "startConnect",
+ "description": "Starts a connection to the network with networkGuid.",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to connect to."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [],
+ "description": "A callback function that indicates that a connection has been initiated."
+ }
+ ]
+ },
+ {
+ "name": "startDisconnect",
+ "description": "Starts a disconnect from the network with networkGuid.",
+ "parameters": [
+ {
+ "name": "networkGuid",
+ "type": "string",
+ "description": "The unique identifier of the network to disconnect from."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [],
+ "description": "A callback function that indicates that a disconnect has been initiated."
+ }
+ ]
+ },
+ {
+ "name": "verifyDestination",
+ "description": "Verifies that the device is a trusted device.",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "VerificationProperties",
+ "description": "Properties of the destination to use in verifying that it is a trusted device."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "verified",
+ "type": "boolean"
+ }
+ ],
+ "description": "A callback function that indicates whether or not the device is a trusted device."
+ }
+ ]
+ },
+ {
+ "name": "verifyAndEncryptCredentials",
+ "description": "Verifies that the device is a trusted device and retrieves encrypted network credentials.",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "VerificationProperties",
+ "description": "Properties of the destination to use in verifying that it is a trusted device."
+ },
+ {
+ "name": "guid",
+ "type": "string",
+ "description": "A string containing the unique identifier of the network to get credentials for."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "credentials",
+ "type": "string"
+ }
+ ],
+ "description": "A callback function that receives base64-encoded encrypted credential data to send to a trusted device."
+ }
+ ]
+ },
+ {
+ "name": "verifyAndEncryptData",
+ "description": "Verifies that the device is a trusted device and encrypts supplied data with device public key.",
+ "parameters": [
+ {
+ "name": "properties",
+ "$ref": "VerificationProperties",
+ "description": "Properties of the destination to use in verifying that it is a trusted device."
+ },
+ {
+ "name": "data",
+ "type": "string",
+ "description": "A string containing the base64-encoded data to encrypt."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "encryptedData",
+ "type": "string"
+ }
+ ],
+ "description": "A callback function that receives base64-encoded encrypted data to send to a trusted device."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onNetworksChanged",
+ "type": "function",
+ "description": "Fired when the properties change on any of the networks. Sends a list of identifiers for networks whose properties have changed.",
+ "parameters": [
+ {
+ "name": "changes",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ ]
+ },
+ {
+ "name": "onNetworkListChanged",
+ "type": "function",
+ "description": "Fired when the list of networks has changed. Sends a complete list of identifiers for all the current networks.",
+ "parameters": [
+ {
+ "name": "changes",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/omnibox.json b/chromium/chrome/common/extensions/api/omnibox.json
new file mode 100644
index 00000000000..9d438365013
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/omnibox.json
@@ -0,0 +1,192 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "omnibox",
+ "description": "The omnibox API allows you to register a keyword with Google Chrome's address bar, which is also known as the omnibox.",
+ "types": [
+ {
+ "id": "SuggestResult",
+ "type": "object",
+ "description": "A suggest result.",
+ "properties": {
+ "content": {
+ "type": "string",
+ "minLength": 1,
+ "description": "The text that is put into the URL bar, and that is sent to the extension when the user chooses this entry."
+ },
+ "description": {
+ "type": "string",
+ "minLength": 1,
+ "description": "The text that is displayed in the URL dropdown. Can contain XML-style markup for styling. The supported tags are 'url' (for a literal URL), 'match' (for highlighting text that matched what the user's query), and 'dim' (for dim helper text). The styles can be nested, eg. <dim><match>dimmed match</match></dim>."
+ },
+ "descriptionStyles": {
+ "nodoc": true,
+ "optional": true,
+ "type": "array",
+ "description": "An array of style ranges for the description, as provided by the extension.",
+ "items": {
+ "type": "object",
+ "name": "matchClassification",
+ "description": "The style ranges for the description, as provided by the extension.",
+ "properties": {
+ "offset": { "type": "integer" },
+ "type": { "description": "The style type", "type": "string", "enum": ["url", "match", "dim"]},
+ "length": { "type": "integer", "optional": true }
+ }
+ }
+ },
+ "descriptionStylesRaw": {
+ "nodoc": true,
+ "optional": true,
+ "type": "array",
+ "description": "An array of style ranges for the description, as provided by ToValue().",
+ "items": {
+ "type": "object",
+ "name": "matchClassification",
+ "description": "The style ranges for the description, as provided by ToValue().",
+ "properties": {
+ "offset": { "type": "integer" },
+ "type": { "type": "integer" }
+ }
+ }
+ }
+ }
+ },
+ {
+ "id": "DefaultSuggestResult",
+ "inline_doc": true,
+ "type": "object",
+ "description": "A suggest result.",
+ "properties": {
+ "description": {
+ "type": "string",
+ "minLength": 1,
+ "description": "The text that is displayed in the URL dropdown. Can contain XML-style markup for styling. The supported tags are 'url' (for a literal URL), 'match' (for highlighting text that matched what the user's query), and 'dim' (for dim helper text). The styles can be nested, eg. <dim><match>dimmed match</match></dim>."
+ },
+ "descriptionStyles": {
+ "nodoc": true,
+ "optional": true,
+ "type": "array",
+ "description": "An array of style ranges for the description, as provided by the extension.",
+ "items": {
+ "type": "object",
+ "name": "matchClassification",
+ "description": "The style ranges for the description, as provided by the extension.",
+ "properties": {
+ "offset": { "type": "integer" },
+ "type": { "description": "The style type", "type": "string", "enum": ["url", "match", "dim"]},
+ "length": { "type": "integer", "optional": true }
+ }
+ }
+ },
+ "descriptionStylesRaw": {
+ "nodoc": true,
+ "optional": true,
+ "type": "array",
+ "description": "An array of style ranges for the description, as provided by ToValue().",
+ "items": {
+ "type": "object",
+ "name": "matchClassification",
+ "description": "The style ranges for the description, as provided by ToValue().",
+ "properties": {
+ "offset": { "type": "integer" },
+ "type": { "type": "integer" }
+ }
+ }
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "sendSuggestions",
+ "nodoc": true,
+ "type": "function",
+ "description": "A callback passed to the onInputChanged event used for sending suggestions back to the browser.",
+ "parameters": [
+ {"type": "integer", "name": "requestId"},
+ {
+ "name": "suggestResults",
+ "type": "array",
+ "description": "An array of suggest results",
+ "items": {
+ "$ref": "SuggestResult"
+ }
+ }
+ ]
+ },
+ {
+ "name": "setDefaultSuggestion",
+ "type": "function",
+ "description": "Sets the description and styling for the default suggestion. The default suggestion is the text that is displayed in the first suggestion row underneath the URL bar.",
+ "parameters": [
+ {
+ "name": "suggestion",
+ "$ref": "DefaultSuggestResult",
+ "description": "A partial SuggestResult object, without the 'content' parameter."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onInputStarted",
+ "type": "function",
+ "description": "User has started a keyword input session by typing the extension's keyword. This is guaranteed to be sent exactly once per input session, and before any onInputChanged events.",
+ "parameters": []
+ },
+ {
+ "name": "onInputChanged",
+ "type": "function",
+ "description": "User has changed what is typed into the omnibox.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "text"
+ },
+ {
+ "name": "suggest",
+ "type": "function",
+ "description": "A callback passed to the onInputChanged event used for sending suggestions back to the browser.",
+ "parameters": [
+ {
+ "name": "suggestResults",
+ "type": "array",
+ "description": "Array of suggest results",
+ "items": {
+ "$ref": "SuggestResult"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "onInputEntered",
+ "type": "function",
+ "description": "User has accepted what is typed into the omnibox.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "text"
+ },
+ {
+ "name": "disposition",
+ "type": "string",
+ "enum": ["currentTab", "newForegroundTab", "newBackgroundTab"],
+ "description": "The window disposition for the omnibox query. This is the recommended context to display results. For example, if the omnibox command is to navigate to a certain URL, a disposition of 'newForegroundTab' means the navigation should take place in a new selected tab."
+ }
+ ]
+ },
+ {
+ "name": "onInputCancelled",
+ "type": "function",
+ "description": "User has ended the keyword input session without accepting the input.",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/page_action.json b/chromium/chrome/common/extensions/api/page_action.json
new file mode 100644
index 00000000000..09c496431c0
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/page_action.json
@@ -0,0 +1,191 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "pageAction",
+ "description": "Use the <code>chrome.pageAction</code> API to put icons inside the address bar. Page actions represent actions that can be taken on the current page, but that aren't applicable to all pages.",
+ "types": [
+ {
+ "id": "ImageDataType",
+ "type": "object",
+ "isInstanceOf": "ImageData",
+ "additionalProperties": { "type": "any" },
+ "description": "Pixel data for an image. Must be an ImageData object (for example, from a <code>canvas</code> element)."
+ }
+ ],
+ "functions": [
+ {
+ "name": "show",
+ "type": "function",
+ "description": "Shows the page action. The page action is shown whenever the tab is selected.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."}
+ ]
+ },
+ {
+ "name": "hide",
+ "type": "function",
+ "description": "Hides the page action.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."}
+ ]
+ },
+ {
+ "name": "setTitle",
+ "type": "function",
+ "description": "Sets the title of the page action. This is displayed in a tooltip over the page action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
+ "title": {"type": "string", "description": "The tooltip string."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "getTitle",
+ "type": "function",
+ "description": "Gets the title of the page action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "description": "Specify the tab to get the title from."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setIcon",
+ "type": "function",
+ "description": "Sets the icon for the page action. The icon can be specified either as the path to an image file or as the pixel data from a canvas element, or as dictionary of either one of those. Either the <b>path</b> or the <b>imageData</b> property must be specified.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
+ "imageData": {
+ "choices": [
+ { "$ref": "ImageDataType" },
+ {
+ "type": "object",
+ "properties": {
+ "19": {"$ref": "ImageDataType", "optional": true},
+ "38": {"$ref": "ImageDataType", "optional": true}
+ }
+ }
+ ],
+ "optional": true,
+ "description": "Either an ImageData object or a dictionary {size -> ImageData} representing icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}'"
+ },
+ "path": {
+ "choices": [
+ { "type": "string" },
+ {
+ "type": "object",
+ "properties": {
+ "19": {"type": "string", "optional": true},
+ "38": {"type": "string", "optional": true}
+ }
+ }
+ ],
+ "optional": true,
+ "description": "Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}'"
+ },
+ "iconIndex": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "<b>Deprecated.</b> This argument is ignored.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "setPopup",
+ "type": "function",
+ "description": "Sets the html document to be opened as a popup when the user clicks on the page action's icon.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the page action."},
+ "popup": {
+ "type": "string",
+ "description": "The html file to show in a popup. If set to the empty string (''), no popup is shown."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getPopup",
+ "type": "function",
+ "description": "Gets the html document set as the popup for this page action.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "description": "Specify the tab to get the popup from."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onClicked",
+ "type": "function",
+ "description": "Fired when a page action icon is clicked. This event will not fire if the page action has a popup.",
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "tabs.Tab"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/page_actions.json b/chromium/chrome/common/extensions/api/page_actions.json
new file mode 100644
index 00000000000..d9918600ea5
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/page_actions.json
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "pageActions",
+ "description": "none",
+ "maximumManifestVersion": 1,
+ "functions": [
+ {
+ "name": "enableForTab",
+ "type": "function",
+ "description": "Enables a page action for a particular tab+URL combination (makes its icon visible in the OmniBox when a certain URL is active in a given tab). The page action will automatically be disabled (its icon hidden) if the user navigates to a new URL or closes the tab. The action will also automatically be enabled/disabled as the user switches tabs.",
+ "parameters": [
+ {"type": "string", "name": "pageActionId", "description": "An extension can have multiple page actions specified in the manifest, each with a unique identifier. This string identifies which page action you want to enable (and must match a page action id declared in the manifest)."},
+ {
+ "type": "object",
+ "name": "action",
+ "description": "An object specifing what action should be applied to the page action. Contains the following properties:",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to enable the page action."},
+ "url": {"type": "string", "description": "The URL of the page you want the page action to apply to. If the URL specified does not match the currently navigated URL (user has navigated to another page) then no action is taken."},
+ "title": {"type": "string", "optional": true, "description": "Specifying <b>title</b> allows you to change the tooltip that appears when you hover over the page action icon in the OmniBox. This parameter is optional and if omitted then the page action <b>name</b> property declared in the manifest is used."},
+ "iconId": {"type": "integer", "minimum": 0, "optional": true, "description": "A zero-based index into the <b>icons</b> vector specified in the manifest. This parameter is optional and if omitted then the first icon in the <b>icons</b> vector of the page action is used. This id is useful to represent different page action states. Example: An RSS feed icon could have a 'subscribe now' icon and an 'already subscribed' icon."}
+ },
+ "optional": false
+ }
+ ]
+ },
+ {
+ "name": "disableForTab",
+ "type": "function",
+ "description": "Disables a page action for a particular tab+URL combination (makes its OmniBox page action icon hidden when a certain URL is active in a given tab). This can be useful to disable a page action before the user navigates away from a page containing an enabled page action.",
+ "parameters": [
+ {"type": "string", "name": "pageActionId", "description": "An extension can have multiple page actions specified in the manifest, each with a unique identifier. This string identifies which page action you want to disable (and must match a page action id declared in the manifest)."},
+ {
+ "type": "object",
+ "name": "action",
+ "description": "An object specifying what action should be applied to the page action. Contains the following properties:",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to disable the page action."},
+ "url": {"type": "string", "description": "The URL of the page you want the page action to not apply to. If the URL specified does not match the currently navigated URL (user has navigated to another page) then no action is taken."}
+ },
+ "optional": false
+ }
+ ]
+ }
+ ],
+ "events": []
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/page_capture.json b/chromium/chrome/common/extensions/api/page_capture.json
new file mode 100644
index 00000000000..f796d693d41
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/page_capture.json
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "pageCapture",
+ "description": "Use the <code>chrome.pageCapture</code> API to save a tab as MHTML.",
+ "functions": [
+ {
+ "name": "saveAsMHTML",
+ "type": "function",
+ "description": "Saves the content of the tab with given id as MHTML.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The id of the tab to save as MHTML."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the MHTML has been generated.",
+ "parameters": [
+ {
+ "name": "mhtmlData",
+ "type": "binary",
+ "optional": "true",
+ "description": "The MHTML data as a Blob."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/permissions.json b/chromium/chrome/common/extensions/api/permissions.json
new file mode 100644
index 00000000000..3ce74b43352
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/permissions.json
@@ -0,0 +1,144 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "permissions",
+ "description": "Use the <code>chrome.permissions</code> API to request <a href=\"#manifest\">declared optional permissions</a> at run time rather than install time, so users understand why the permissions are needed and grant only those that are necessary.",
+ "types": [
+ {
+ "id": "Permissions",
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "List of named permissions (does not include hosts or origins)."
+ },
+ "origins": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "List of origin permissions."
+ }
+ }
+ }
+ ],
+ "events": [
+ {
+ "name": "onAdded",
+ "type": "function",
+ "description": "Fired when the extension acquires new permissions.",
+ "parameters": [
+ {
+ "$ref": "Permissions",
+ "name": "permissions",
+ "description": "The newly acquired permissions."
+ }
+ ]
+ },
+ {
+ "name": "onRemoved",
+ "type": "function",
+ "description": "Fired when access to permissions has been removed from the extension.",
+ "parameters": [
+ {
+ "$ref": "Permissions",
+ "name": "permissions",
+ "description": "The permissions that have been removed."
+ }
+ ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getAll",
+ "type": "function",
+ "description": "Gets the extension's current set of permissions.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "permissions",
+ "$ref": "Permissions",
+ "description": "The extension's active permissions."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "contains",
+ "type": "function",
+ "description": "Checks if the extension has the specified permissions.",
+ "parameters": [
+ {
+ "name": "permissions",
+ "$ref": "Permissions"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "boolean",
+ "description": "True if the extension has the specified permissions."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "request",
+ "type": "function",
+ "description": "Requests access to the specified permissions. These permissions must be defined in the optional_permissions field of the manifest. If there are any problems requesting the permissions, $ref:runtime.lastError will be set.",
+ "parameters": [
+ {
+ "name": "permissions",
+ "$ref": "Permissions"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "granted",
+ "type": "boolean",
+ "description": "True if the user granted the specified permissions."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Removes access to the specified permissions. If there are any problems removing the permissions, $ref:runtime.lastError will be set.",
+ "parameters": [
+ {
+ "name": "permissions",
+ "$ref": "Permissions"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "removed",
+ "type": "boolean",
+ "description": "True if the permissions were removed."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/preferences_private.json b/chromium/chrome/common/extensions/api/preferences_private.json
new file mode 100644
index 00000000000..4ceeb5fafe3
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/preferences_private.json
@@ -0,0 +1,17 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "preferencesPrivate",
+ "description": "none",
+ "properties": {
+ "googleGeolocationAccessEnabled": {
+ "$ref": "types.private.ChromeDirectSetting",
+ "value": ["googlegeolocationaccess.enabled", {"type":"boolean"}],
+ "description": "If enabled, Google services can access the user's location. This preference's value is a boolean, defaulting to <code>false</code>."
+ }
+ }
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/privacy.json b/chromium/chrome/common/extensions/api/privacy.json
new file mode 100644
index 00000000000..03845c9424a
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/privacy.json
@@ -0,0 +1,89 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "privacy",
+ "description": "Use the <code>chrome.privacy</code> API to control usage of the features in Chrome that can affect a user's privacy. This API relies on the <a href='types.html#ChromeSetting'>ChromeSetting prototype of the type API</a> for getting and setting Chrome's configuration.",
+ "properties": {
+ "network": {
+ "type": "object",
+ "value": {},
+ "description": "Settings that influence Chrome's handling of network connections in general.",
+ "properties": {
+ "networkPredictionEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["networkPredictionEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome attempts to speed up your web browsing experience by pre-resolving DNS entries, prerendering sites (<code>&lt;link rel='prefetch' ...&gt;</code>), and preemptively opening TCP and SSL connections to servers. This preference's value is a boolean, defaulting to <code>true</code>."
+ }
+ }
+ },
+ "services": {
+ "type": "object",
+ "value": {},
+ "description": "Settings that enable or disable features that require third-party network services provided by Google and your default search provider.",
+ "properties": {
+ "alternateErrorPagesEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["alternateErrorPagesEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome uses a web service to help resolve navigation errors. This preference's value is a boolean, defaulting to <code>true</code>."
+ },
+ "autofillEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["autofillEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome offers to automatically fill in forms. This preference's value is a boolean, defaulting to <code>true</code>."
+ },
+ "safeBrowsingEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["safeBrowsingEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome does its best to protect you from phishing and malware. This preference's value is a boolean, defaulting to <code>true</code>."
+ },
+ "searchSuggestEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["searchSuggestEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome sends the text you type into the Omnibox to your default search engine, which provides predictions of websites and searches that are likely completions of what you've typed so far. This preference's value is a boolean, defaulting to <code>true</code>."
+ },
+ "spellingServiceEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["spellingServiceEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome uses a web service to help correct spelling errors. This preference's value is a boolean, defaulting to <code>false</code>."
+ },
+ "translationServiceEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["translationServiceEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome offers to translate pages that aren't in a language you read. This preference's value is a boolean, defaulting to <code>true</code>."
+ }
+ }
+ },
+ "websites": {
+ "type": "object",
+ "value": {},
+ "description": "Settings that determine what information Chrome makes available to websites.",
+ "properties": {
+ "thirdPartyCookiesAllowed": {
+ "$ref": "types.ChromeSetting",
+ "value": ["thirdPartyCookiesAllowed", {"type": "boolean"}],
+ "description": "If disabled, Chrome blocks third-party sites from setting cookies. The value of this preference is of type boolean, and the default value is <code>true</code>."
+ },
+ "hyperlinkAuditingEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["hyperlinkAuditingEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome sends auditing pings when requested by a website (<code>&lt;a ping&gt;</code>). The value of this preference is of type boolean, and the default value is <code>true</code>."
+ },
+ "referrersEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["referrersEnabled", {"type":"boolean"}],
+ "description": "If enabled, Chrome sends <code>referer</code> headers with your requests. Yes, the name of this preference doesn't match the misspelled header. No, we're not going to change it. The value of this preference is of type boolean, and the default value is <code>true</code>."
+ },
+ "protectedContentEnabled": {
+ "$ref": "types.ChromeSetting",
+ "value": ["protectedContentEnabled", {"type":"boolean"}],
+ "description": "<strong>Available on Windows and ChromeOS only</strong>: If enabled, Chrome provides a unique ID to plugins in order to run protected content. The value of this preference is of type boolean, and the default value is <code>true</code>.",
+ "platforms": ["windows", "cros", "cros touch"]
+ }
+ }
+ }
+ }
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/processes.json b/chromium/chrome/common/extensions/api/processes.json
new file mode 100644
index 00000000000..77b1ad77fb6
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/processes.json
@@ -0,0 +1,263 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "processes",
+ "description": "Use the <code>chrome.processes</code> API to interact with the browser's processes.",
+ "types": [
+ {
+ "id": "Process",
+ "type": "object",
+ "description": "An object containing information about one of the browser's processes.",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "description": "Unique ID of the process provided by the browser."
+ },
+ "osProcessId": {
+ "type": "integer",
+ "description": "The ID of the process, as provided by the OS."
+ },
+ "type": {
+ "type": "string",
+ "enum": ["browser", "renderer", "extension", "notification", "plugin", "worker", "nacl", "utility", "gpu", "other"],
+ "description": "The type of process."
+ },
+ "profile": {
+ "type": "string",
+ "description": "The profile which the process is associated with."
+ },
+ "tabs": {
+ "type": "array", "items": {"type": "integer", "minimum": 0},
+ "description": "Array of Tab IDs that have a page rendered by this process. The list will be non-empty for renderer processes only."
+ },
+ "cpu": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process CPU usage, between 0 and 100%. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "network": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process network usage, in bytes per second. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "privateMemory": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process private memory usage, in bytes. Only available when receiving the object as part of a callback from onUpdatedWithMemory or getProcessInfo with the includeMemory flag."
+ },
+ "jsMemoryAllocated": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process JavaScript allocated memory, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "jsMemoryUsed": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process JavaScript memory used, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "sqliteMemory": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process’s SQLite memory usage, in bytes. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "fps": {
+ "type": "number",
+ "optional": true,
+ "description": "The most recent measurement of the process frames per second. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "imageCache": {
+ "$ref": "Cache",
+ "optional": true,
+ "description": "The most recent information about the image cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "scriptCache": {
+ "$ref": "Cache",
+ "optional": true,
+ "description": "The most recent information about the script cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ },
+ "cssCache": {
+ "$ref": "Cache",
+ "optional": true,
+ "description": "The most recent information about the CSS cache for the process. Only available when receiving the object as part of a callback from onUpdated or onUpdatedWithMemory."
+ }
+ }
+ },
+ {
+ "id": "Cache",
+ "type": "object",
+ "description": "The Cache object contains information about the size and utilization of a cache used by the browser.",
+ "properties": {
+ "size": {
+ "type": "number",
+ "description": "The size of the cache, in bytes."
+ },
+ "liveSize": {
+ "type": "number",
+ "description": "The part of the cache that is utilized, in bytes."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "terminate",
+ "type": "function",
+ "description": "Terminates the specified renderer process. Equivalent to visiting about:crash, but without changing the tab's URL.",
+ "parameters": [
+ {
+ "name": "processId",
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the process to be terminated."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "didTerminate",
+ "type": "boolean",
+ "description": "True if terminating the process was successful, otherwise false."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getProcessIdForTab",
+ "type": "function",
+ "description": "Returns the ID of the renderer process for the specified tab.",
+ "parameters": [
+ {
+ "name": "tabId",
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the tab for which the renderer process ID is to be returned."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "processId",
+ "type": "integer",
+ "description": "Process ID of the tab's renderer process."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getProcessInfo",
+ "type": "function",
+ "description": "Retrieves the process information for each process ID specified.",
+ "parameters": [
+ {
+ "name": "processIds",
+ "choices": [
+ {"type": "integer", "minimum": 0},
+ {"type": "array", "items": {"type": "integer", "minimum": 0}}
+ ],
+ "description": "The list of process IDs or single process ID for which to return the process information. An empty list indicates all processes are requested."
+ },
+ {
+ "name": "includeMemory",
+ "type": "boolean",
+ "description": "True if detailed memory usage is required. Note, collecting memory usage information incurs extra CPU usage and should only be queried for when needed."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the processes information is collected.",
+ "parameters": [
+ {
+ "name": "processes",
+ "description": "A dictionary of Process objects for each requested process that is a live child process of the current browser process, indexed by process ID. Metrics requiring aggregation over time will not be populated in each Process object.",
+ "type": "object",
+ "additionalProperties": { "$ref": "Process" }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onUpdated",
+ "type": "function",
+ "description": "Fired each time the Task Manager updates its process statistics, providing the dictionary of updated Process objects, indexed by process ID.",
+ "parameters": [
+ {
+ "name": "processes",
+ "type": "object",
+ "description": "A dictionary of updated Process objects for each live process in the browser, indexed by process ID. Metrics requiring aggregation over time will be populated in each Process object.",
+ "additionalProperties": { "$ref": "Process" }
+ }
+ ]
+ },
+ {
+ "name": "onUpdatedWithMemory",
+ "type": "function",
+ "description": "Fired each time the Task Manager updates its process statistics, providing the dictionary of updated Process objects, indexed by process ID. Identical to onUpdate, with the addition of memory usage details included in each Process object. Note, collecting memory usage information incurs extra CPU usage and should only be listened for when needed.",
+ "parameters": [
+ {
+ "name": "processes",
+ "type": "object",
+ "description": "A dictionary of updated Process objects for each live process in the browser, indexed by process ID. Memory usage details will be included in each Process object.",
+ "additionalProperties": { "$ref": "Process" }
+ }
+ ]
+ },
+ {
+ "name": "onCreated",
+ "type": "function",
+ "description": "Fired each time a process is created, providing the corrseponding Process object.",
+ "parameters": [
+ {
+ "name": "process",
+ "description": "Details of the process that was created. Metrics requiring aggregation over time will not be populated in the object.",
+ "$ref": "Process"
+ }
+ ]
+ },
+ {
+ "name": "onUnresponsive",
+ "type": "function",
+ "description": "Fired each time a process becomes unresponsive, providing the corrseponding Process object.",
+ "parameters": [
+ {
+ "name": "process",
+ "description": "Details of the unresponsive process. Metrics requiring aggregation over time will not be populated in the object. Only available for renderer processes.",
+ "$ref": "Process"
+ }
+ ]
+ },
+ {
+ "name": "onExited",
+ "type": "function",
+ "description": "Fired each time a process is terminated, providing the type of exit.",
+ "parameters": [
+ {
+ "name": "processId",
+ "description": "The ID of the process that exited.",
+ "type": "integer"
+ },
+ {
+ "name": "exitType",
+ "description": "The type of exit that occurred for the process - normal, abnormal, killed, crashed. Only available for renderer processes.",
+ "type": "integer"
+ },
+ {
+ "name": "exitCode",
+ "description": "The exit code if the process exited abnormally. Only available for renderer processes.",
+ "type": "integer"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/proxy.json b/chromium/chrome/common/extensions/api/proxy.json
new file mode 100644
index 00000000000..2d28bb631b1
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/proxy.json
@@ -0,0 +1,96 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "proxy",
+ "description": "Use the <code>chrome.proxy</code> API to manage Chrome's proxy settings. This API relies on the <a href='types.html#ChromeSetting'>ChromeSetting prototype of the type API</a> for getting and setting the proxy configuration.",
+ "types": [
+ {
+ "id": "ProxyServer",
+ "type": "object",
+ "description": "An object encapsulating a single proxy server's specification.",
+ "properties": {
+ "scheme": {"type": "string", "optional": true, "enum": ["http", "https", "socks4", "socks5"], "description": "The scheme (protocol) of the proxy server itself. Defaults to 'http'."},
+ "host": {"type": "string", "description": "The URI of the proxy server. This must be an ASCII hostname (in Punycode format). IDNA is not supported, yet."},
+ "port": {"type": "integer", "optional": true, "description": "The port of the proxy server. Defaults to a port that depends on the scheme."}
+ }
+ },
+ {
+ "id": "ProxyRules",
+ "type": "object",
+ "description": "An object encapsulating the set of proxy rules for all protocols. Use either 'singleProxy' or (a subset of) 'proxyForHttp', 'proxyForHttps', 'proxyForFtp' and 'fallbackProxy'.",
+ "properties": {
+ "singleProxy": {"$ref": "ProxyServer", "optional": true, "description": "The proxy server to be used for all per-URL requests (that is http, https, and ftp)."},
+ "proxyForHttp": {"$ref": "ProxyServer", "optional": true, "description": "The proxy server to be used for HTTP requests."},
+ "proxyForHttps": {"$ref": "ProxyServer", "optional": true, "description": "The proxy server to be used for HTTPS requests."},
+ "proxyForFtp": {"$ref": "ProxyServer", "optional": true, "description": "The proxy server to be used for FTP requests."},
+ "fallbackProxy": {"$ref": "ProxyServer", "optional": true, "description": "The proxy server to be used for everthing else or if any of the specific proxyFor... is not specified."},
+ "bypassList": {"type": "array", "items": {"type": "string"}, "optional": true, "description": "List of servers to connect to without a proxy server."}
+ }
+ },
+ {
+ "id": "PacScript",
+ "type": "object",
+ "description": "An object holding proxy auto-config information. Exactly one of the fields should be non-empty.",
+ "properties": {
+ "url": {"type": "string", "optional": true, "description": "URL of the PAC file to be used."},
+ "data": {"type": "string", "optional": true, "description": "A PAC script."},
+ "mandatory": {"type": "boolean", "optional": true, "description": "If true, an invalid PAC script will prevent the network stack from falling back to direct connections. Defaults to false."}
+ }
+ },
+ {
+ "id": "ProxyConfig",
+ "type": "object",
+ "description": "An object encapsulating a complete proxy configuration.",
+ "properties": {
+ "rules": {"$ref": "ProxyRules", "optional": true, "description": "The proxy rules describing this configuration. Use this for 'fixed_servers' mode."},
+ "pacScript": {"$ref": "PacScript", "optional": true, "description": "The proxy auto-config (PAC) script for this configuration. Use this for 'pac_script' mode."},
+ "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"
+ }
+ }
+ }
+ ],
+ "properties": {
+ "settings": {
+ "$ref": "types.ChromeSetting",
+ "description": "Proxy settings to be used. The value of this setting is a ProxyConfig object.",
+ "value": [
+ "proxy",
+ {"$ref": "ProxyConfig"}
+ ]
+ }
+ },
+ "events": [
+ {
+ "name": "onProxyError",
+ "type": "function",
+ "description": "Notifies about proxy errors.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "fatal": {
+ "type": "boolean",
+ "description": "If true, the error was fatal and the network transaction was aborted. Otherwise, a direct connection is used instead."
+ },
+ "error": {
+ "type": "string",
+ "description": "The error description."
+ },
+ "details": {
+ "type": "string",
+ "description": "Additional details about the error such as a JavaScript runtime error."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/runtime.json b/chromium/chrome/common/extensions/api/runtime.json
new file mode 100644
index 00000000000..e67323afc93
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/runtime.json
@@ -0,0 +1,474 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "runtime",
+ "description": "Use the <code>chrome.runtime</code> API to retrieve the background page, return details about the manifest, and listen for and respond to events in the app or extension lifecycle. You can also use this API to convert the relative path of URLs to fully-qualified URLs.",
+ "types": [
+ {
+ "id": "Port",
+ "type": "object",
+ "nocompile": true,
+ "description": "An object which allows two way communication with other pages.",
+ "properties": {
+ "name": {"type": "string"},
+ "disconnect": { "type": "function" },
+ "onDisconnect": { "$ref": "events.Event" },
+ "onMessage": { "$ref": "events.Event" },
+ "postMessage": {"type": "function"},
+ "sender": {
+ "$ref": "MessageSender",
+ "optional": true,
+ "description": "This property will <b>only</b> be present on ports passed to onConnect/onConnectExternal listeners."
+ }
+ },
+ "additionalProperties": { "type": "any"}
+ },
+ {
+ "id": "MessageSender",
+ "type": "object",
+ "description": "An object containing information about the script context that sent a message or request.",
+ "properties": {
+ "tab": {"$ref": "tabs.Tab", "optional": true, "description": "The $ref:tabs.Tab which opened the connection, if any. This property will <strong>only</strong> be present when the connection was opened from a tab (including content scripts), and <strong>only</strong> if the receiver is an extension, not an app."},
+ "id": {"type": "string", "optional": true, "description": "The ID of the extension or app that opened the connection, if any."},
+ "url": {"type": "string", "optional": true, "description": "The URL of the page or frame that opened the connection, if any. This property will <strong>only</strong> be present when the connection was opened from a tab or content script."},
+ "tlsChannelId": {"type": "string", "optional": true, "description": "The TLS channel ID of the web page that opened the connection, if requested by the extension or app, and if available."}
+ }
+ }
+ ],
+ "properties": {
+ "lastError": {
+ "type": "object",
+ "optional": true,
+ "description": "This will be defined during an API method callback if there was an error",
+ "properties": {
+ "message": {
+ "optional": true,
+ "type": "string",
+ "description": "Details about the error which occurred."
+ }
+ }
+ },
+ "id": {
+ "type": "string",
+ "description": "The ID of the extension/app."
+ }
+ },
+ "functions": [
+ {
+ "name": "getBackgroundPage",
+ "type": "function",
+ "description": "Retrieves the JavaScript 'window' object for the background page running inside the current extension/app. If the background page is an event page, the system will ensure it is loaded before calling the callback. If there is no background page, an error is set.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "backgroundPage",
+ // Note: Only optional because we don't support validation
+ // for custom callbacks.
+ "optional": true,
+ "type": "object",
+ "isInstanceOf": "Window",
+ "additionalProperties": { "type": "any" },
+ "description": "The JavaScript 'window' object for the background page."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getManifest",
+ "description": "Returns details about the app or extension from the manifest. The object returned is a serialization of the full <a href=\"manifest.html\">manifest file</a>.",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [],
+ "returns": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": { "type": "any" },
+ "description": "The manifest details."
+ }
+ },
+ {
+ "name": "getURL",
+ "type": "function",
+ "nocompile": true,
+ "description": "Converts a relative path within an app/extension install directory to a fully-qualified URL.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "path",
+ "description": "A path to a resource within an app/extension expressed relative to its install directory."
+ }
+ ],
+ "returns": {
+ "type": "string",
+ "description": "The fully-qualified URL to the resource."
+ }
+ },
+ {
+ "name": "setUninstallUrl",
+ "type": "function",
+ "unpriviledged": true,
+ "description": "Sets the URL to be visited upon uninstallation. This may be used to clean up server-side data, do analytics, and implement surveys. Maximum 255 characters.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "url",
+ "maxLength": 255
+ }
+ ]
+ },
+ {
+ "name": "reload",
+ "description": "Reloads the app or extension.",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "requestUpdateCheck",
+ "type": "function",
+ "description": "Requests an update check for this app/extension.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "status",
+ "type": "string",
+ "enum": ["throttled", "no_update", "update_available"],
+ "description": "Result of the update check."
+ },
+ {
+ "name": "details",
+ "type": "object",
+ "optional": true,
+ "properties": {
+ "version": {
+ "type": "string",
+ "description": "The version of the available update."
+ }
+ },
+ "description": "If an update is available, this contains more information about the available update."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "restart",
+ "description": "Restart the ChromeOS device when the app runs in kiosk mode. Otherwise, it's no-op.",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "connect",
+ "type": "function",
+ "nocompile": true,
+ "description": "Attempts to connect to other listeners within the extension/app (such as the background page), or other extensions/apps. This is useful for content scripts connecting to their extension processes. Note that this does not connect to any listeners in a content script. Extensions may connect to content scripts embedded in tabs via $ref:tabs.connect.",
+ "parameters": [
+ {"type": "string", "name": "extensionId", "optional": true, "description": "The ID of the extension/app you want to connect to. If omitted, default is your own extension."},
+ {
+ "type": "object",
+ "name": "connectInfo",
+ "properties": {
+ "name": { "type": "string", "optional": true, "description": "Will be passed into onConnect for processes that are listening for the connection event." },
+ "includeTlsChannelId": { "type": "boolean", "optional": true, "description": "Whether the TLS channel ID will be passed into onConnectExternal for processes that are listening for the connection event." }
+ },
+ "optional": true
+ }
+ ],
+ "returns": {
+ "$ref": "Port",
+ "description": "Port through which messages can be sent and received. The port's $ref:[runtime.Port onDisconnect] event is fired if the extension/app does not exist. "
+ }
+ },
+ {
+ "name": "connectNative",
+ "type": "function",
+ "nocompile": true,
+ "description": "Connects to a native application in the host machine.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "application",
+ "description": "The name of the registered application to connect to."
+ }
+ ],
+ "returns": {
+ "$ref": "Port",
+ "description": "Port through which messages can be sent and received with the application"
+ }
+ },
+ {
+ "name": "sendMessage",
+ "type": "function",
+ "nocompile": true,
+ "allowAmbiguousOptionalArguments": true,
+ "description": "Sends a single message to onMessage event listeners within the extension (or another extension/app). Similar to chrome.runtime.connect, but only sends a single message with an optional response. The $ref:runtime.onMessage event is fired in each extension page of the extension. Note that extensions cannot send messages to content scripts using this method. To send messages to content scripts, use $ref:tabs.sendMessage.",
+ "parameters": [
+ {"type": "string", "name": "extensionId", "optional": true, "description": "The extension ID of the extension you want to connect to. If omitted, default is your own extension."},
+ { "type": "any", "name": "message" },
+ {
+ "type": "object",
+ "name": "options",
+ "properties": {
+ "includeTlsChannelId": { "type": "boolean", "optional": true, "description": "Whether the TLS channel ID will be passed into onMessageExternal for processes that are listening for the connection event." }
+ },
+ "optional": true
+ },
+ {
+ "type": "function",
+ "name": "responseCallback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "response",
+ "type": "any",
+ "description": "The JSON response object sent by the handler of the message. If an error occurs while connecting to the extension, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sendNativeMessage",
+ "type": "function",
+ "nocompile": true,
+ "description": "Send a single message to a native application.",
+ "parameters": [
+ {
+ "name": "application",
+ "description": "The name of the native messaging host.",
+ "type": "string"
+ },
+ {
+ "name": "message",
+ "description": "The message that will be passed to the native messaging host.",
+ "type": "object",
+ "additionalProperties": {
+ "type": "any"
+ }
+ },
+ {
+ "type": "function",
+ "name": "responseCallback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "response",
+ "type": "any",
+ "description": "The response message send by the native messaging host. If an error occurs while connecting to the native messaging host, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message.",
+ "additionalProperties": {
+ "type": "any"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getPlatformInfo",
+ "type": "function",
+ "description": "Returns information about the current platform.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Called with results",
+ "parameters": [
+ {
+ "name": "platformInfo",
+ "type": "object",
+ "properties": {
+ "os": {
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+ "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
+ },
+ "arch": {
+ "type": "string",
+ "enum": ["arm", "x86-32", "x86-64"],
+ "description": "The machine's processor architecture."
+ },
+ "nacl_arch" : {
+ "description": "The native client architecture. This may be different from arch on some platforms.",
+ "type": "string",
+ "enum": ["arm", "x86-32", "x86-64"]
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getPackageDirectoryEntry",
+ "type": "function",
+ "description": "Returns a DirectoryEntry for the package directory.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "directoryEntry",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "isInstanceOf": "DirectoryEntry"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onStartup",
+ "type": "function",
+ "description": "Fired when a profile that has this extension installed first starts up. This event is not fired when an incognito profile is started, even if this extension is operating in 'split' incognito mode."
+ },
+ {
+ "name": "onInstalled",
+ "type": "function",
+ "description": "Fired when the extension is first installed, when the extension is updated to a new version, and when Chrome is updated to a new version.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "reason": {
+ "type": "string",
+ "enum": ["install", "update", "chrome_update"],
+ "description": "The reason that this event is being dispatched."
+ },
+ "previousVersion": {
+ "type": "string",
+ "optional": true,
+ "description": "Indicates the previous version of the extension, which has just been updated. This is present only if 'reason' is 'update'."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onSuspend",
+ "type": "function",
+ "description": "Sent to the event page just before it is unloaded. This gives the extension opportunity to do some clean up. Note that since the page is unloading, any asynchronous operations started while handling this event are not guaranteed to complete. If more activity for the event page occurs before it gets unloaded the onSuspendCanceled event will be sent and the page won't be unloaded. "
+ },
+ {
+ "name": "onSuspendCanceled",
+ "type": "function",
+ "description": "Sent after onSuspend to indicate that the app won't be unloaded after all."
+ },
+ {
+ "name": "onUpdateAvailable",
+ "type": "function",
+ "description": "Fired when an update is available, but isn't installed immediately because the app is currently running. If you do nothing, the update will be installed the next time the background page gets unloaded, if you want it to be installed sooner you can explicitly call chrome.runtime.reload().",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "version": {
+ "type": "string",
+ "description": "The version number of the available update."
+ }
+ },
+ "additionalProperties": { "type": "any" },
+ "description": "The manifest details of the available update."
+ }
+ ]
+ },
+ {
+ // TODO(xiyuan): onBrowserUpdateAvailable is deprecated in favor of
+ // onRestartRequired. We should remove it when we are sure it is unused.
+ "name": "onBrowserUpdateAvailable",
+ "type": "function",
+ "description": "Fired when a Chrome update is available, but isn't installed immediately because a browser restart is required.",
+ "deprecated": "Please use $ref:onRestartRequired.",
+ "parameters": []
+ },
+ {
+ "name": "onConnect",
+ "type": "function",
+ "nocompile": true,
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a connection is made from either an extension process or a content script.",
+ "parameters": [
+ {"$ref": "Port", "name": "port"}
+ ]
+ },
+ {
+ "name": "onConnectExternal",
+ "type": "function",
+ "nocompile": true,
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a connection is made from another extension.",
+ "parameters": [
+ {"$ref": "Port", "name": "port"}
+ ]
+ },
+ {
+ "name": "onMessage",
+ "type": "function",
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a message is sent from either an extension process or a content script.",
+ "parameters": [
+ {"name": "message", "type": "any", "optional": true, "description": "The message sent by the calling script."},
+ {"name": "sender", "$ref": "MessageSender" },
+ {"name": "sendResponse", "type": "function", "description": "Function to call (at most once) when you have a response. The argument should be any JSON-ifiable object. If you have more than one <code>onMessage</code> listener in the same document, then only one may send a response. This function becomes invalid when the event listener returns, unless you return true from the event listener to indicate you wish to send a response asynchronously (this will keep the message channel open to the other end until <code>sendResponse</code> is called)." }
+ ],
+ "returns": {
+ "type": "boolean",
+ "optional": "true",
+ "description": "Return true from the event listener if you wish to call <code>sendResponse</code> after the event listener returns."
+ }
+ },
+ {
+ "name": "onMessageExternal",
+ "type": "function",
+ "options": {
+ "unmanaged": true
+ },
+ "description": "Fired when a message is sent from another extension/app. Cannot be used in a content script.",
+ "parameters": [
+ {"name": "message", "type": "any", "optional": true, "description": "The message sent by the calling script."},
+ {"name": "sender", "$ref": "MessageSender" },
+ {"name": "sendResponse", "type": "function", "description": "Function to call (at most once) when you have a response. The argument should be any JSON-ifiable object. If you have more than one <code>onMessage</code> listener in the same document, then only one may send a response. This function becomes invalid when the event listener returns, unless you return true from the event listener to indicate you wish to send a response asynchronously (this will keep the message channel open to the other end until <code>sendResponse</code> is called)." }
+ ],
+ "returns": {
+ "type": "boolean",
+ "optional": "true",
+ "description": "Return true from the event listener if you wish to call <code>sendResponse</code> after the event listener returns."
+ }
+ },
+ {
+ "name": "onRestartRequired",
+ "type": "function",
+ "description": "Fired when an app or the device that it runs on needs to be restarted. The app should close all its windows at its earliest convenient time to let the restart to happen. If the app does nothing, a restart will be enforced after a 24-hour grace period has passed. Currently, this event is only fired for Chrome OS kiosk apps.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "reason",
+ "description": "The reason that the event is being dispatched. 'app_update' is used when the restart is needed because the application is updated to a newer version. 'os_update' is used when the restart is needed because the browser/OS is updated to a newer version. 'periodic' is used when the system runs for more than the permitted uptime set in the enterprise policy.",
+ "enum": ["app_update", "os_update", "periodic"]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/script_badge.json b/chromium/chrome/common/extensions/api/script_badge.json
new file mode 100644
index 00000000000..e9051c2a162
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/script_badge.json
@@ -0,0 +1,89 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "scriptBadge",
+ "description": "Use the <code>chrome.scriptBadge</code> API to control the behaviour of the script badge.",
+ "functions": [
+ {
+ "name": "setPopup",
+ "type": "function",
+ "description": "Sets the html document to be opened as a popup when the user clicks on the script badge's icon.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {"type": "integer", "minimum": 0, "description": "The id of the tab for which you want to modify the script badge."},
+ "popup": {
+ "type": "string",
+ "description": "The html file to show in a popup. If set to the empty string (''), no popup is shown."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "getPopup",
+ "type": "function",
+ "description": "Gets the html document set as the popup for this script badge.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "description": "Specify the tab to get the popup from."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAttention",
+ "type": "function",
+
+ "description": "Brings the script badge to the attention of the user, imploring her to click. You should call this when you detect that you can do something to a particular tab. Do not call this for every tab. That's tacky. If the user clicks on the badge, the activeTab APIs become available. If the extension has already run on this tab, this call does nothing.",
+
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "description": "Specify the tab to request to act on."
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onClicked",
+ "type": "function",
+ "description": "Fired when a script badge icon is clicked. This event will not fire if the script badge has a popup.",
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "tabs.Tab"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/sessions.json b/chromium/chrome/common/extensions/api/sessions.json
new file mode 100644
index 00000000000..48c09e90012
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/sessions.json
@@ -0,0 +1,117 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "sessions",
+ "description": "Use the <code>chrome.sessions</code> API to query and restore tabs and windows from a browsing session.",
+ "types": [
+ {
+ "id": "Filter",
+ "type": "object",
+ "properties": {
+ "maxResults": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 25,
+ "optional": true,
+ "description": "The maximum number of entries to be fetched in the requested list. Omit this parameter to fetch the maximum number of entries ($ref:MAX_SESSION_RESULTS)."
+ }
+ }
+ },
+ {
+ "id": "Session",
+ "type": "object",
+ "properties": {
+ "lastModified": {"type": "integer", "description": "The time when the window or tab was closed or modified, represented in milliseconds since the epoch."},
+ "tab": {"$ref": "tabs.Tab", "optional": true, "description": "The $ref:tabs.Tab, if this entry describes a tab. Either this or $ref:Session.window will be set."},
+ "window": {"$ref": "windows.Window", "optional": true, "description": "The $ref:windows.Window, if this entry describes a window. Either this or $ref:Session.tab will be set."}
+ }
+ },
+ {
+ "id": "Device",
+ "type": "object",
+ "properties": {
+ "info": {"type": "string", "description": "Represents all information about a foreign device."},
+ "sessions": {"type": "array", "items": {"$ref": "Session"}, "description": "A list of open window sessions for the foreign device, sorted from most recently to least recently modified session."}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getRecentlyClosed",
+ "type": "function",
+ "description": "Gets the list of recently closed tabs and/or windows.",
+ "parameters": [
+ {
+ "$ref": "Filter",
+ "name": "filter",
+ "optional": true
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "sessions", "type": "array", "items": { "$ref": "Session" }, "description": "The list of closed entries in reverse order that they were closed (the most recently closed tab or window will be at index <code>0</code>).The entries may contain either tabs or windows."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getDevices",
+ "type": "function",
+ "description": "Retrieves all devices with synced sessions.",
+ "parameters": [
+ {
+ "$ref": "Filter",
+ "name": "filter",
+ "optional": true
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "devices", "type": "array", "items": { "$ref": "Device" }, "description": "The list of $ref:Device objects for each synced session, sorted in order from device with most recently modified session to device with least recently modified session. $ref:tabs.Tab objects are sorted by recency in the $ref:windows.Window of the $ref:Session objects."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "restore",
+ "type": "function",
+ "description": "Reopens a $ref:windows.Window or $ref:tabs.Tab, with an optional callback to run when the entry has been restored.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "sessionId",
+ "optional": true,
+ "description": "The $ref:windows.Window.sessionId, or $ref:tabs.Tab.sessionId to restore."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "$ref": "Session",
+ "name": "restoredSession",
+ "description": "A $ref:Session containing the restored $ref:windows.Window or $ref:tabs.Tab object."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "MAX_SESSION_RESULTS": {
+ "value": 25,
+ "description": "The maximum number of $ref:Session that will be included in a requested list."
+ }
+ }
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/storage.json b/chromium/chrome/common/extensions/api/storage.json
new file mode 100644
index 00000000000..8f32f68c4e7
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/storage.json
@@ -0,0 +1,219 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "storage",
+ "description": "Use the <code>chrome.storage</code> API to store, retrieve, and track changes to user data.",
+ "unprivileged": true,
+ "types": [
+ {
+ "id": "StorageChange",
+ "type": "object",
+ "properties": {
+ "oldValue": {
+ "type": "any",
+ "description": "The old value of the item, if there was an old value.",
+ "optional": true
+ },
+ "newValue": {
+ "type": "any",
+ "description": "The new value of the item, if there is a new value.",
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "StorageArea",
+ "type": "object",
+ "js_module": "StorageArea",
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets one or more items from storage.",
+ "parameters": [
+ {
+ "name": "keys",
+ "choices": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } },
+ {
+ "type": "object",
+ "description": "Storage items to return in the callback, where the values are replaced with those from storage if they exist.",
+ "additionalProperties": { "type": "any" }
+ }
+ ],
+ "description": "A single key to get, list of keys to get, or a dictionary specifying default values (see description of the object). An empty list or object will return an empty result object. Pass in <code>null</code> to get the entire contents of storage.",
+ "optional": true
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Callback with storage items, or on failure (in which case $ref:runtime.lastError will be set).",
+ "parameters": [
+ {
+ "name": "items",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "description": "Object with items in their key-value mappings."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getBytesInUse",
+ "type": "function",
+ "description": "Gets the amount of space (in bytes) being used by one or more items.",
+ "parameters": [
+ {
+ "name": "keys",
+ "choices": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ],
+ "description": "A single key or list of keys to get the total usage for. An empty list will return 0. Pass in <code>null</code> to get the total usage of all of storage.",
+ "optional": true
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Callback with the amount of space being used by storage, or on failure (in which case $ref:runtime.lastError will be set).",
+ "parameters": [
+ {
+ "name": "bytesInUse",
+ "type": "integer",
+ "description": "Amount of space being used in storage, in bytes."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "type": "function",
+ "description": "Sets multiple items.",
+ "parameters": [
+ {
+ "name": "items",
+ "type": "object",
+ "additionalProperties": { "type": "any" },
+ "description": "<p>An object which gives each key/value pair to update storage with. Any other key/value pairs in storage will not be affected.</p><p>Primitive values such as numbers will serialize as expected. Values with a <code>typeof</code> <code>\"object\"</code> and <code>\"function\"</code> will typically serialize to <code>{}</code>, with the exception of <code>Array</code> (serializes as expected), <code>Date</code>, and <code>Regex</code> (serialize using their <code>String</code> representation).</p>"
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Callback on success, or on failure (in which case $ref:runtime.lastError will be set).",
+ "parameters": [],
+ "optional": true
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Removes one or more items from storage.",
+ "parameters": [
+ {
+ "name": "keys",
+ "choices": [
+ {"type": "string"},
+ {"type": "array", "items": {"type": "string"}}
+ ],
+ "description": "A single key or a list of keys for items to remove."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Callback on success, or on failure (in which case $ref:runtime.lastError will be set).",
+ "parameters": [],
+ "optional": true
+ }
+ ]
+ },
+ {
+ "name": "clear",
+ "type": "function",
+ "description": "Removes all items from storage.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Callback on success, or on failure (in which case $ref:runtime.lastError will be set).",
+ "parameters": [],
+ "optional": true
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onChanged",
+ "type": "function",
+ "description": "Fired when one or more items change.",
+ "parameters": [
+ {
+ "name": "changes",
+ "type": "object",
+ "additionalProperties": { "$ref": "StorageChange" },
+ "description": "Object mapping each key that changed to its corresponding $ref:StorageChange for that item."
+ },
+ {
+ "name": "areaName",
+ "type": "string",
+ "description": "The name of the storage area (<code>\"sync\"</code>, <code>\"local\"</code> or <code>\"managed\"</code>) the changes are for."
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "sync": {
+ "$ref": "StorageArea",
+ "description": "Items in the <code>sync</code> storage area are synced using Chrome Sync.",
+ "value": [ "sync" ],
+ "properties": {
+ "QUOTA_BYTES": {
+ "value": 102400,
+ "description": "The maximum total amount (in bytes) of data that can be stored in sync storage, as measured by the JSON stringification of every value plus every key's length. Updates that would cause this limit to be exceeded fail immediately and set $ref:runtime.lastError."
+ },
+ "QUOTA_BYTES_PER_ITEM": {
+ "value": 4096,
+ "description": "The maximum size (in bytes) of each individual item in sync storage, as measured by the JSON stringification of its value plus its key length. Updates containing items larger than this limit will fail immediately and set $ref:runtime.lastError."
+ },
+ "MAX_ITEMS": {
+ "value": 512,
+ "description": "The maximum number of items that can be stored in sync storage. Updates that would cause this limit to be exceeded will fail immediately and set $ref:runtime.lastError."
+ },
+ "MAX_WRITE_OPERATIONS_PER_HOUR": {
+ "value": 1000,
+ "description": "The maximum number of <code>set</code>, <code>remove</code>, or <code>clear</code> operations that can be performed each hour. Updates that would cause this limit to be exceeded fail immediately and set $ref:runtime.lastError."
+ },
+ "MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE": {
+ "value": 10,
+ "description": "The maximum number of <code>set</code>, <code>remove</code>, or <code>clear</code> operations that can be performed each minute, sustained over 10 minutes. Updates that would cause this limit to be exceeded fail immediately and set $ref:runtime.lastError."
+ }
+ }
+ },
+ "local": {
+ "$ref": "StorageArea",
+ "description": "Items in the <code>local</code> storage area are local to each machine.",
+ "value": [ "local" ],
+ "properties": {
+ "QUOTA_BYTES": {
+ "value": 5242880,
+ "description": "The maximum amount (in bytes) of data that can be stored in local storage, as measured by the JSON stringification of every value plus every key's length. This value will be ignored if the extension has the <code>unlimitedStorage</code> permission. Updates that would cause this limit to be exceeded fail immediately and set $ref:runtime.lastError."
+ }
+ }
+ },
+ "managed": {
+ "$ref": "StorageArea",
+ "description": "Items in the <code>managed</code> storage area are set by the domain administrator, and are read-only for the extension; trying to modify this namespace results in an error.",
+ "value": [ "managed" ]
+ }
+ }
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/streams_private.json b/chromium/chrome/common/extensions/api/streams_private.json
new file mode 100644
index 00000000000..f24834565d5
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/streams_private.json
@@ -0,0 +1,48 @@
+// Copyright (c) 2013 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.
+
+[
+ {
+ "namespace":"streamsPrivate",
+ "description": "none",
+ "events": [
+ {
+ "name": "onExecuteMimeTypeHandler",
+ "type": "function",
+ "description": "Fired when a resource is fetched which matches a mime type handled by this extension. The resource request is cancelled, and the extension is expected to handle the request. The event is restricted to a small number of white-listed extensions.",
+ "parameters": [
+ {
+ "name": "mimeType",
+ "type": "string",
+ "description": "The MIME type of the intercepted URL request."
+ },
+ {
+ "name": "originalUrl",
+ "type": "string",
+ "description": "The original URL that was intercepted."
+ },
+ {
+ "name": "streamUrl",
+ "type": "string",
+ "description": "The URL that the stream can be read from."
+ },
+ {
+ "name": "tabId",
+ "type": "integer",
+ "description": "The ID of the tab that opened the stream. If the stream is not opened in a tab, it will be -1."
+ },
+ {
+ "name": "expectedContentSize",
+ "type": "integer",
+ "description": "The amount of data the Stream should contain, if known. If there is no information on the size it will be -1."
+ }
+ ]
+ }
+ ],
+
+ "functions": [
+ ]
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/system_private.json b/chromium/chrome/common/extensions/api/system_private.json
new file mode 100644
index 00000000000..ea9ae38f897
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/system_private.json
@@ -0,0 +1,148 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "systemPrivate",
+ "description": "none",
+ "types": [
+ {
+ "id": "UpdateStatus",
+ "type": "object",
+ "description": "Information about the system update.",
+ "properties": {
+ "state": {
+ "type": "string",
+ "enum": ["NotAvailable", "Updating", "NeedRestart"],
+ "description": "State of system update. NotAvailable when there is no available update or the update system is in error state, Updating when a system update is in progress, NeedRestart when a system update is finished and restart is needed."
+ },
+ "downloadProgress": {
+ "type": "number",
+ "description": "Value between 0 and 1 describing the progress of system update download. This value will be set to 0 when |state| is NotAvailable, 1 when NeedRestart."
+ }
+ }
+ },
+ {
+ "id": "VolumeInfo",
+ "type": "object",
+ "description": "Information about the volume.",
+ "properties": {
+ "volume": {"type": "number", "description": "The value of the volume percent. This must be between 0.0 and 100.0."},
+ "isVolumeMuted": {"type": "boolean", "description": "True if the volume is muted."}
+ }
+ },
+ {
+ "id": "BrightnessChangeInfo",
+ "type": "object",
+ "description": "Information about a change to the screen brightness.",
+ "properties": {
+ "brightness": {
+ "type": "number",
+ "description": "The value of the current screen brightness in percent, between 0.0 and 100.0."
+ },
+ "userInitiated": {
+ "type": "boolean",
+ "description": "Whether this change was initiated by user."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "getIncognitoModeAvailability",
+ "type": "function",
+ "description": "Returns whether the incognito mode is enabled, disabled or forced",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called with the result.",
+ "parameters": [
+ {
+ "name": "value",
+ "type": "string",
+ "enum": ["enabled", "disabled", "forced"],
+ "description": "Exposes whether the incognito mode is available to windows. One of 'enabled', 'disabled' (user cannot browse pages in Incognito mode), 'forced' (all pages/sessions are forced into Incognito mode)."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getUpdateStatus",
+ "type": "function",
+ "description": "Gets information about the system update.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "$ref": "UpdateStatus",
+ "name": "status",
+ "description": "Details of the system update"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getApiKey",
+ "type": "function",
+ "description": "Gets Chrome's API key to use for requests to Google services.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "key",
+ "type": "string",
+ "description": "The API key."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onVolumeChanged",
+ "type": "function",
+ "description": "Fired when the volume is changed.",
+ "parameters": [
+ {
+ "$ref": "VolumeInfo",
+ "name": "volume",
+ "description": "Information about the current state of the system volume control, including whether it is muted."
+ }
+ ]
+ },
+ {
+ "name": "onBrightnessChanged",
+ "type": "function",
+ "description": "Fired when the screen brightness is changed.",
+ "parameters": [
+ {
+ "$ref": "BrightnessChangeInfo",
+ "name": "brightness",
+ "description": "Information about a change to the screen brightness."
+ }
+ ]
+ },
+ {
+ "name": "onScreenUnlocked",
+ "type": "function",
+ "description": "Fired when the screen is unlocked.",
+ "parameters": []
+ },
+ {
+ "name": "onWokeUp",
+ "type": "function",
+ "description": "Fired when the device wakes up from sleep.",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/tabs.json b/chromium/chrome/common/extensions/api/tabs.json
new file mode 100644
index 00000000000..ea96bc37b1c
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/tabs.json
@@ -0,0 +1,926 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "tabs",
+ "description": "Use the <code>chrome.tabs</code> API to interact with the browser's tab system. You can use this API to create, modify, and rearrange tabs in the browser.",
+ "types": [
+ {
+ "id": "Tab",
+ "type": "object",
+ "properties": {
+ "id": {"type": "integer", "minimum": 0, "optional": true, "description": "The ID of the tab. Tab IDs are unique within a browser session. Under some circumstances a Tab may not be assigned an ID, for example when querying foreign tabs using the $ref:sessions API, in which case a session ID may be present."},
+ // TODO(kalman): Investigate how this is ending up as -1 (based on window type? a bug?) and whether it should be optional instead.
+ "index": {"type": "integer", "minimum": -1, "description": "The zero-based index of the tab within its window."},
+ "windowId": {"type": "integer", "minimum": 0, "description": "The ID of the window the tab is contained within."},
+ "openerTabId": {"type": "integer", "minimum": 0, "optional": true, "description": "The ID of the tab that opened this tab, if any. This property is only present if the opener tab still exists."},
+ "selected": {"type": "boolean", "description": "Whether the tab is selected.", "deprecated": "Please use $ref:Tab.highlighted."},
+ "highlighted": {"type": "boolean", "description": "Whether the tab is highlighted."},
+ "active": {"type": "boolean", "description": "Whether the tab is active in its window. (Does not necessarily mean the window is focused.)"},
+ "pinned": {"type": "boolean", "description": "Whether the tab is pinned."},
+ "url": {"type": "string", "optional": true, "description": "The URL the tab is displaying. This property is only present if the extension's manifest includes the <code>\"tabs\"</code> permission."},
+ "title": {"type": "string", "optional": true, "optional": true, "description": "The title of the tab. This property is only present if the extension's manifest includes the <code>\"tabs\"</code> permission."},
+ "favIconUrl": {"type": "string", "optional": true, "optional": true, "description": "The URL of the tab's favicon. This property is only present if the extension's manifest includes the <code>\"tabs\"</code> permission. It may also be an empty string if the tab is loading."},
+ "status": {"type": "string", "optional": true, "description": "Either <em>loading</em> or <em>complete</em>."},
+ "incognito": {"type": "boolean", "description": "Whether the tab is in an incognito window."},
+ "width": {"type": "integer", "optional": true, "description": "The width of the tab in pixels."},
+ "height": {"type": "integer", "optional": true, "description": "The height of the tab in pixels."},
+ "sessionId": {"type": "string", "optional": true, "description": "The session ID used to uniquely identify a Tab obtained from the $ref:sessions API."}
+ }
+ },
+ {
+ "id": "InjectDetails",
+ "type": "object",
+ "description": "Details of the script or CSS to inject. Either the code or the file property must be set, but both may not be set at the same time.",
+ "properties": {
+ "code": {"type": "string", "optional": true, "description": "JavaScript or CSS code to inject."},
+ "file": {"type": "string", "optional": true, "description": "JavaScript or CSS file to inject."},
+ "allFrames": {"type": "boolean", "optional": true, "description": "If allFrames is <code>true</code>, implies that the JavaScript or CSS should be injected into all frames of current page. By default, it's <code>false</code> and is only injected into the top frame."},
+ "runAt": {
+ "type": "string",
+ "optional": true,
+ "enum": ["document_start", "document_end", "document_idle"],
+ "description": "The soonest that the JavaScript or CSS will be injected into the tab. Defaults to \"document_idle\"."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Retrieves details about the specified tab.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {"name": "tab", "$ref": "Tab"}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getCurrent",
+ "type": "function",
+ "description": "Gets the tab that this script call is being made from. May be undefined if called from a non-tab context (for example: a background page or popup view).",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "Tab",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "connect",
+ "nocompile": true,
+ "type": "function",
+ "description": "Connects to the content script(s) in the specified tab. The $ref:runtime.onConnect event is fired in each content script running in the specified tab for the current extension. For more details, see <a href='messaging.html'>Content Script Messaging</a>.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0
+ },
+ {
+ "type": "object",
+ "name": "connectInfo",
+ "properties": {
+ "name": { "type": "string", "optional": true, "description": "Will be passed into onConnect for content scripts that are listening for the connection event." }
+ },
+ "optional": true
+ }
+ ],
+ "returns": {
+ "$ref": "runtime.Port",
+ "description": "A port that can be used to communicate with the content scripts running in the specified tab. The port's $ref:runtime.Port event is fired if the tab closes or does not exist. "
+ }
+ },
+ {
+ "name": "sendRequest",
+ "deprecated": "Please use $ref:runtime.sendMessage.",
+ "nocompile": true,
+ "type": "function",
+ "description": "Sends a single request to the content script(s) in the specified tab, with an optional callback to run when a response is sent back. The $ref:extension.onRequest event is fired in each content script running in the specified tab for the current extension.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0
+ },
+ {
+ "type": "any",
+ "name": "request"
+ },
+ {
+ "type": "function",
+ "name": "responseCallback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "response",
+ "type": "any",
+ "description": "The JSON response object sent by the handler of the request. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sendMessage",
+ "nocompile": true,
+ "type": "function",
+ "description": "Sends a single message to the content script(s) in the specified tab, with an optional callback to run when a response is sent back. The $ref:runtime.onMessage event is fired in each content script running in the specified tab for the current extension.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0
+ },
+ {
+ "type": "any",
+ "name": "message"
+ },
+ {
+ "type": "function",
+ "name": "responseCallback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "response",
+ "type": "any",
+ "description": "The JSON response object sent by the handler of the message. If an error occurs while connecting to the specified tab, the callback will be called with no arguments and $ref:runtime.lastError will be set to the error message."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getSelected",
+ "deprecated": "Please use $ref:query <code>{active: true}</code>.",
+ "type": "function",
+ "description": "Gets the tab that is selected in the specified window.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "windowId",
+ "minimum": -2,
+ "optional": true,
+ "description": "Defaults to the <a href='windows.html#current-window'>current window</a>."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {"name": "tab", "$ref": "Tab"}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAllInWindow",
+ "type": "function",
+ "deprecated": "Please use $ref:query <code>{windowId: windowId}</code>.",
+ "description": "Gets details about all tabs in the specified window.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "windowId",
+ "minimum": -2,
+ "optional": true,
+ "description": "Defaults to the <a href='windows.html#current-window'>current window</a>."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {"name": "tabs", "type": "array", "items": { "$ref": "Tab" } }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates a new tab.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "createProperties",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": -2,
+ "optional": true,
+ "description": "The window to create the new tab in. Defaults to the <a href='windows.html#current-window'>current window</a>."
+ },
+ "index": {
+ "type": "integer",
+ "minimum": 0,
+ "optional": true,
+ "description": "The position the tab should take in the window. The provided value will be clamped to between zero and the number of tabs in the window."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "The URL to navigate the tab to initially. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page."
+ },
+ "active": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should become the active tab in the window. Does not affect whether the window is focused (see $ref:windows.update). Defaults to <var>true</var>."
+ },
+ "selected": {
+ "deprecated": "Please use <em>active</em>.",
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should become the selected tab in the window. Defaults to <var>true</var>"
+ },
+ "pinned": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should be pinned. Defaults to <var>false</var>"
+ },
+ "openerTabId": {
+ "type": "integer",
+ "minimum": 0,
+ "optional": true,
+ "description": "The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as the newly created tab."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "Tab",
+ "description": "Details about the created tab. Will contain the ID of the new tab."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "duplicate",
+ "type": "function",
+ "description": "Duplicates a tab.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "description": "The ID of the tab which is to be duplicated."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "tab",
+ "optional": true,
+ "description": "Details about the duplicated tab. The $ref:tabs.Tab object doesn't contain <code>url</code>, <code>title</code> and <code>favIconUrl</code> if the <code>\"tabs\"</code> permission has not been requested.",
+ "$ref": "Tab"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "query",
+ "type": "function",
+ "description": "Gets all tabs that have the specified properties, or all tabs if no properties are specified.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "queryInfo",
+ "properties": {
+ "active": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tabs are active in their windows."
+ },
+ "pinned": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tabs are pinned."
+ },
+ "highlighted": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tabs are highlighted."
+ },
+ "currentWindow": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tabs are in the <a href='windows.html#current-window'>current window</a>."
+ },
+ "lastFocusedWindow": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tabs are in the last focused window."
+ },
+ "status": {
+ "type": "string",
+ "optional": true,
+ "enum": ["loading", "complete"],
+ "description": "Whether the tabs have completed loading."
+ },
+ "title": {
+ "type": "string",
+ "optional": true,
+ "description": "Match page titles against a pattern."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "Match tabs against a <a href='match_patterns.html'>URL pattern</a>. Note that fragment identifiers are not matched."
+ },
+ "windowId": {
+ "type": "integer",
+ "optional": true,
+ "minimum": -2,
+ "description": "The ID of the parent window, or $ref:windows.WINDOW_ID_CURRENT for the <a href='windows.html#current-window'>current window</a>."
+ },
+ "windowType": {
+ "type": "string",
+ "optional": true,
+ "enum": ["normal", "popup", "panel", "app"],
+ "description": "The type of window the tabs are in."
+ },
+ "index": {
+ "type": "integer",
+ "optional": true,
+ "minimum": 0,
+ "description": "The position of the tabs within their windows."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "array",
+ "items": {
+ "$ref": "Tab"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "highlight",
+ "type": "function",
+ "description": "Highlights the given tabs.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "highlightInfo",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "optional": true,
+ "description": "The window that contains the tabs.",
+ "minimum": -2
+ },
+ "tabs": {
+ "description": "One or more tab indices to highlight.",
+ "choices": [
+ {"type": "array", "items": {"type": "integer", "minimum": 0}},
+ {"type": "integer"}
+ ]
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "window",
+ "$ref": "windows.Window",
+ "description": "Contains details about the window whose tabs were highlighted."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "update",
+ "type": "function",
+ "description": "Modifies the properties of a tab. Properties that are not specified in <var>updateProperties</var> are not modified.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "optional": true,
+ "description": "Defaults to the selected tab of the <a href='windows.html#current-window'>current window</a>."
+ },
+ {
+ "type": "object",
+ "name": "updateProperties",
+ "properties": {
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "A URL to navigate the tab to."
+ },
+ "active": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should be active. Does not affect whether the window is focused (see $ref:windows.update)."
+ },
+ "highlighted": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Adds or removes the tab from the current selection."
+ },
+ "selected": {
+ "deprecated": "Please use <em>highlighted</em>.",
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should be selected."
+ },
+ "pinned": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether the tab should be pinned."
+ },
+ "openerTabId": {
+ "type": "integer",
+ "minimum": 0,
+ "optional": true,
+ "description": "The ID of the tab that opened this tab. If specified, the opener tab must be in the same window as this tab."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "tab",
+ "$ref": "Tab",
+ "optional": true,
+ "description": "Details about the updated tab. The $ref:tabs.Tab object doesn't contain <code>url</code>, <code>title</code> and <code>favIconUrl</code> if the <code>\"tabs\"</code> permission has not been requested."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "move",
+ "type": "function",
+ "description": "Moves one or more tabs to a new position within its window, or to a new window. Note that tabs can only be moved to and from normal (window.type === \"normal\") windows.",
+ "parameters": [
+ {
+ "name": "tabIds",
+ "description": "The tab or list of tabs to move.",
+ "choices": [
+ {"type": "integer", "minimum": 0},
+ {"type": "array", "items": {"type": "integer", "minimum": 0}}
+ ]
+ },
+ {
+ "type": "object",
+ "name": "moveProperties",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": -2,
+ "optional": true,
+ "description": "Defaults to the window the tab is currently in."
+ },
+ "index": {
+ "type": "integer",
+ "minimum": -1,
+ "description": "The position to move the window to. -1 will place the tab at the end of the window."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "tabs",
+ "description": "Details about the moved tabs.",
+ "choices": [
+ {"$ref": "Tab"},
+ {"type": "array", "items": {"$ref": "Tab"}}
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "reload",
+ "type": "function",
+ "description": "Reload a tab.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0, "optional": true, "description": "The ID of the tab to reload; defaults to the selected tab of the current window."},
+ {
+ "type": "object",
+ "name": "reloadProperties",
+ "optional": true,
+ "properties": {
+ "bypassCache": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether using any local cache. Default is false."
+ }
+ }
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Closes one or more tabs.",
+ "parameters": [
+ {
+ "name": "tabIds",
+ "description": "The tab or list of tabs to close.",
+ "choices": [
+ {"type": "integer", "minimum": 0},
+ {"type": "array", "items": {"type": "integer", "minimum": 0}}
+ ]
+ },
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ },
+ {
+ "name": "detectLanguage",
+ "type": "function",
+ "description": "Detects the primary language of the content in a tab.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "optional": true,
+ "description": "Defaults to the active tab of the <a href='windows.html#current-window'>current window</a>."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "language",
+ "description": "An ISO language code such as <code>en</code> or <code>fr</code>. For a complete list of languages supported by this method, see <a href='http://src.chromium.org/viewvc/chrome/trunk/src/third_party/cld/languages/internal/languages.cc'>kLanguageInfoTable</a>. The 2nd to 4th columns will be checked and the first non-NULL value will be returned except for Simplified Chinese for which zh-CN will be returned. For an unknown language, <code>und</code> will be returned."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "captureVisibleTab",
+ "type": "function",
+ "description": "Captures the visible area of the currently active tab in the specified window. You must have <a href='declare_permissions.html'>host permission</a> for the URL displayed by the tab.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "windowId",
+ "minimum": -2,
+ "optional": true,
+ "description": "The target window. Defaults to the <a href='windows.html#current-window'>current window</a>."
+ },
+ {
+ "$ref": "types.ImageDetails",
+ "name": "options",
+ "optional": true
+ },
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {"type": "string", "name": "dataUrl", "description": "A data URL which encodes an image of the visible area of the captured tab. May be assigned to the 'src' property of an HTML Image element for display."}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "executeScript",
+ "type": "function",
+ "description": "Injects JavaScript code into a page. For details, see the <a href='content_scripts.html#pi'>programmatic injection</a> section of the content scripts doc.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0, "optional": true, "description": "The ID of the tab in which to run the script; defaults to the active tab of the current window."},
+ {
+ "$ref": "tabs.InjectDetails",
+ "name": "details",
+ "description": "Details of the script to run."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after all the JavaScript has been executed.",
+ "parameters": [
+ {
+ "name": "result",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "any", "minimum": 0},
+ "description": "The result of the script in every injected frame."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "insertCSS",
+ "type": "function",
+ "description": "Injects CSS into a page. For details, see the <a href='content_scripts.html#pi'>programmatic injection</a> section of the content scripts doc.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0, "optional": true, "description": "The ID of the tab in which to insert the CSS; defaults to the active tab of the current window."},
+ {
+ "$ref": "tabs.InjectDetails",
+ "name": "details",
+ "description": "Details of the CSS text to insert."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when all the CSS has been inserted.",
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onCreated",
+ "type": "function",
+ "description": "Fired when a tab is created. Note that the tab's URL may not be set at the time this event fired, but you can listen to onUpdated events to be notified when a URL is set.",
+ "parameters": [
+ {
+ "$ref": "Tab",
+ "name": "tab",
+ "description": "Details of the tab that was created."
+ }
+ ]
+ },
+ {
+ "name": "onUpdated",
+ "type": "function",
+ "description": "Fired when a tab is updated.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "object",
+ "name": "changeInfo",
+ "description": "Lists the changes to the state of the tab that was updated.",
+ "properties": {
+ "status": {
+ "type": "string",
+ "optional": true,
+ "description": "The status of the tab. Can be either <em>loading</em> or <em>complete</em>."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "The tab's URL if it has changed."
+ },
+ "pinned": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The tab's new pinned state."
+ },
+ "favIconUrl": {
+ "type": "string",
+ "optional": true,
+ "description": "The tab's new favicon URL."
+ }
+ }
+ },
+ {
+ "$ref": "Tab",
+ "name": "tab",
+ "description": "Gives the state of the tab that was updated."
+ }
+ ]
+ },
+ {
+ "name": "onMoved",
+ "type": "function",
+ "description": "Fired when a tab is moved within a window. Only one move event is fired, representing the tab the user directly moved. Move events are not fired for the other tabs that must move in response. This event is not fired when a tab is moved between windows. For that, see $ref:onDetached.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "object",
+ "name": "moveInfo",
+ "properties": {
+ "windowId": {"type": "integer", "minimum": 0},
+ "fromIndex": {"type": "integer", "minimum": 0},
+ "toIndex": {"type": "integer", "minimum": 0}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onSelectionChanged",
+ "deprecated": "Please use $ref:onActivated.",
+ "type": "function",
+ "description": "Fires when the selected tab in a window changes.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "description": "The ID of the tab that has become active."
+ },
+ {
+ "type": "object",
+ "name": "selectInfo",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the window the selected tab changed inside of."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onActiveChanged",
+ "deprecated": "Please use $ref:onActivated.",
+ "type": "function",
+ "description": "Fires when the selected tab in a window changes. Note that the tab's URL may not be set at the time this event fired, but you can listen to $ref:onUpdated events to be notified when a URL is set.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "tabId",
+ "minimum": 0,
+ "description": "The ID of the tab that has become active."
+ },
+ {
+ "type": "object",
+ "name": "selectInfo",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the window the selected tab changed inside of."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onActivated",
+ "type": "function",
+ "description": "Fires when the active tab in a window changes. Note that the tab's URL may not be set at the time this event fired, but you can listen to onUpdated events to be notified when a URL is set.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "activeInfo",
+ "properties": {
+ "tabId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the tab that has become active."
+ },
+ "windowId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The ID of the window the active tab changed inside of."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onHighlightChanged",
+ "deprecated": "Please use $ref:onHighlighted.",
+ "type": "function",
+ "description": "Fired when the highlighted or selected tabs in a window changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "selectInfo",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The window whose tabs changed."
+ },
+ "tabIds": {
+ "type": "array",
+ "name": "tabIds",
+ "items": {"type": "integer", "minimum": 0},
+ "description": "All highlighted tabs in the window."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onHighlighted",
+ "type": "function",
+ "description": "Fired when the highlighted or selected tabs in a window changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "highlightInfo",
+ "properties": {
+ "windowId": {
+ "type": "integer",
+ "minimum": 0,
+ "description": "The window whose tabs changed."
+ },
+ "tabIds": {
+ "type": "array",
+ "name": "tabIds",
+ "items": {"type": "integer", "minimum": 0},
+ "description": "All highlighted tabs in the window."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onDetached",
+ "type": "function",
+ "description": "Fired when a tab is detached from a window, for example because it is being moved between windows.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "object",
+ "name": "detachInfo",
+ "properties": {
+ "oldWindowId": {"type": "integer", "minimum": 0},
+ "oldPosition": {"type": "integer", "minimum": 0}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onAttached",
+ "type": "function",
+ "description": "Fired when a tab is attached to a window, for example because it was moved between windows.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "object",
+ "name": "attachInfo",
+ "properties": {
+ "newWindowId": {"type": "integer", "minimum": 0},
+ "newPosition": {"type": "integer", "minimum": 0}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onRemoved",
+ "type": "function",
+ "description": "Fired when a tab is closed.",
+ "parameters": [
+ {"type": "integer", "name": "tabId", "minimum": 0},
+ {
+ "type": "object",
+ "name": "removeInfo",
+ "properties": {
+ "windowId": {"type": "integer", "minimum": 0, "description": "The window whose tab is closed." },
+ "isWindowClosing": {"type": "boolean", "description": "True when the tab is being closed because its window is being closed." }
+ }
+ }
+ ]
+ },
+ {
+ "name": "onReplaced",
+ "type": "function",
+ "description": "Fired when a tab is replaced with another tab due to prerendering or instant.",
+ "parameters": [
+ {"type": "integer", "name": "addedTabId", "minimum": 0},
+ {"type": "integer", "name": "removedTabId", "minimum": 0}
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/terminal_private.json b/chromium/chrome/common/extensions/api/terminal_private.json
new file mode 100644
index 00000000000..07bbe2d0176
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/terminal_private.json
@@ -0,0 +1,153 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "terminalPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/terminal/terminal_private_api.h"
+ },
+ "platforms": ["chromeos"],
+ "description": "none",
+ "functions": [
+ {
+ "name": "openTerminalProcess",
+ "type": "function",
+ "description": "Starts new process.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "processName",
+ "description": "Name of the process to open. Initially only 'crosh' is supported. Another processes may be added in future."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": false,
+ "description": "Returns pid of the launched process. If no process was launched returns -1.",
+ "parameters": [
+ {
+ "name": "pid",
+ "description": "Pid of the launched process.",
+ "type": "integer"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "closeTerminalProcess",
+ "type": "function",
+ "description": "Closes previousy opened process.",
+ "parameters": [
+ {
+ "name": "pid",
+ "type": "integer",
+ "description": "Process id of the process we want to close."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "Function that gets called when close operation is started for the process. Returns success of the function.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "sendInput",
+ "type": "function",
+ "description": "Sends input that will be routed to stdin of the process with the specified pid.",
+ "parameters": [
+ {
+ "name": "pid",
+ "type": "integer",
+ "description": "The pid of the process to which we want to send input."
+ },
+ {
+ "name": "input",
+ "type": "string",
+ "description": "Input we are sending to the process."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "Callback that will be called when sendInput method ends. Returns success.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "onTerminalResize",
+ "type": "function",
+ "description": "Notify the process with the id pid that terminal window size has changed.",
+ "parameters": [
+ {
+ "name": "pid",
+ "type": "integer",
+ "description": "The pid of the process."
+ },
+ {
+ "name": "width",
+ "type": "integer",
+ "description": "New window width (as column count)."
+ },
+ {
+ "name": "height",
+ "type": "integer",
+ "description": "New window height (as row count)."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "Callback that will be called when sendInput method ends. Returns success.",
+ "parameters": [
+ {
+ "name": "success",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onProcessOutput",
+ "type": "function",
+ "description": "Fired when an opened process writes something to its output.",
+ "parameters": [
+ {
+ "name": "pid",
+ "type": "integer",
+ "description": "Pid of the process from which the output came."
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "description": "Type of the output stream from which output came. When process exits, output type will be set to exit",
+ "enum": ["stdout", "stderr", "exit"]
+ },
+ {
+ "name": "text",
+ "type": "string",
+ "description": "Text that was written to the output stream."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/test.json b/chromium/chrome/common/extensions/api/test.json
new file mode 100644
index 00000000000..285c497013a
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test.json
@@ -0,0 +1,376 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "test",
+ "description": "none",
+ "functions": [
+ {
+ "name": "getConfig",
+ "type": "function",
+ "description": "Gives configuration options set by the test.",
+ "parameters": [
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {
+ "type": "object",
+ "name": "testConfig",
+ "properties": {
+ "customArg": {
+ "type": "string",
+ "optional": true,
+ "description": "Additional string argument to pass to test."
+ },
+ "testServer": {
+ "type": "object",
+ "optional": true,
+ "description": "Details on the test server used to mock network responses. Will be set only if test calls ExtensionApiTest::StartTestServer().",
+ "properties": {
+ "port": {
+ "type": "integer",
+ "description": "The port on which the test server is listening.",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ }
+ },
+ "spawnedTestServer": {
+ "type": "object",
+ "optional": true,
+ "description": "Details on the spawned test server used to mock network responses. Will be set only if test calls ExtensionApiTest::StartSpawnedTestServer().",
+ "properties": {
+ "port": {
+ "type": "integer",
+ "description": "The port on which the test server is listening.",
+ "minimum": 1024,
+ "maximum": 65535
+ }
+ }
+ },
+ "testDataDirectory": {
+ "type": "string",
+ "description": "file:/// URL for the API test data directory."
+ },
+ "testWebSocketPort": {
+ "type": "integer",
+ "description": "The port on which the test WebSocket server is listening.",
+ "minimum": 0,
+ "maximum": 65535
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "notifyFail",
+ "type": "function",
+ "description": "Notifies the browser process that test code running in the extension failed. This is only used for internal unit testing.",
+ "parameters": [
+ {"type": "string", "name": "message"}
+ ]
+ },
+ {
+ "name": "notifyPass",
+ "type": "function",
+ "description": "Notifies the browser process that test code running in the extension passed. This is only used for internal unit testing.",
+ "parameters": [
+ {"type": "string", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "resetQuota",
+ "type": "function",
+ "description": "Resets all accumulated quota state for all extensions. This is only used for internal unit testing.",
+ "parameters": []
+ },
+ {
+ "name": "log",
+ "type": "function",
+ "description": "Logs a message during internal unit testing.",
+ "parameters": [
+ {"type": "string", "name": "message"}
+ ]
+ },
+ {
+ "name": "createIncognitoTab",
+ "type": "function",
+ "description": "Creates an incognito tab during internal testing. Succeeds even if the extension is not enabled in incognito mode.",
+ "parameters": [
+ {"type": "string", "name": "url"}
+ ]
+ },
+ {
+ "name": "sendMessage",
+ "type": "function",
+ "description": "Sends a string message to the browser process, generating a Notification that C++ test code can wait for.",
+ "parameters": [
+ {"type": "string", "name": "message"},
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {"type": "string", "name": "response"}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "callbackAdded",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "runNextTest",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "fail",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "any", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "succeed",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "any", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "assertTrue",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "name": "test",
+ "choices": [
+ {"type": "string"},
+ {"type": "boolean"}
+ ]
+ },
+ {"type": "string", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "assertFalse",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "name": "test",
+ "choices": [
+ {"type": "string"},
+ {"type": "boolean"}
+ ]
+ },
+ {"type": "string", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "assertBool",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "name": "test",
+ "choices": [
+ {"type": "string"},
+ {"type": "boolean"}
+ ]
+ },
+ {"type": "boolean", "name": "expected"},
+ {"type": "string", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "checkDeepEq",
+ "type": "function",
+ "nocompile": true,
+ "allowAmbiguousOptionalArguments": true,
+ "parameters": [
+ // These need to be optional because they can be null.
+ {"type": "any", "name": "expected", "optional": true},
+ {"type": "any", "name": "actual", "optional": true}
+ ]
+ },
+ {
+ "name": "assertEq",
+ "type": "function",
+ "nocompile": true,
+ "allowAmbiguousOptionalArguments": true,
+ "parameters": [
+ // These need to be optional because they can be null.
+ {"type": "any", "name": "expected", "optional": true},
+ {"type": "any", "name": "actual", "optional": true},
+ {"type": "string", "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "assertNoLastError",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "assertLastError",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "string", "name": "expectedError"}
+ ]
+ },
+ {
+ "name": "assertThrows",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "function", "name": "fn"},
+ {
+ "type": "object",
+ "name": "self",
+ "additionalProperties": {"type": "any"},
+ "optional": true
+ },
+ {"type": "array", "items": {"type": "any"}, "name": "args"},
+ {"choices": [ {"type": "string"}, {"type": "object", "isInstanceOf": "RegExp"} ], "name": "message", "optional": true}
+ ]
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "function", "name": "func", "optional": true},
+ {"type": "string", "name": "expectedError", "optional": true}
+ ]
+ },
+ {
+ "name": "listenOnce",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ // TODO(cduvall): Make this a $ref to events.Event.
+ {"type": "any", "name": "event"},
+ {"type": "function", "name": "func"}
+ ]
+ },
+ {
+ "name": "listenForever",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ // TODO(cduvall): Make this a $ref to events.Event.
+ {"type": "any", "name": "event"},
+ {"type": "function", "name": "func"}
+ ]
+ },
+ {
+ "name": "callbackPass",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "function", "name": "func", "optional": true}
+ ]
+ },
+ {
+ "name": "callbackFail",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {"type": "string", "name": "expectedError"},
+ {"type": "function", "name": "func", "optional": true}
+ ]
+ },
+ {
+ "name": "runTests",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "type": "array",
+ "name": "tests",
+ "items": {"type": "function"}
+ }
+ ]
+ },
+ {
+ "name": "getApiFeatures",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "getApiDefinitions",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "type": "array",
+ "name": "apiNames",
+ "optional": true,
+ "items": {"type": "string"}
+ }
+ ]
+ },
+ {
+ "name": "isProcessingUserGesture",
+ "type": "function",
+ "nocompile": true,
+ "parameters": []
+ },
+ {
+ "name": "runWithUserGesture",
+ "type": "function",
+ "description": "Runs the callback in the context of a user gesture.",
+ "nocompile": true,
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "runWithoutUserGesture",
+ "type": "function",
+ "nocompile": true,
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onMessage",
+ "type": "function",
+ "description": "Used to test sending messages to extensions.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "info",
+ "properties": {
+ "data": { "type": "string", "description": "Additional information." },
+ "lastMessage": { "type": "boolean", "description": "True if this was the last message for this test" }
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_1.json b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_1.json
new file mode 100644
index 00000000000..fcaa875056c
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_1.json
@@ -0,0 +1,8 @@
+// Copyright 2013 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.
+
+// Tests an invalid JSON file.
+
+// Expecting property name: line 8 column 3 (char 9).
+{ x }
diff --git a/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_2.json b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_2.json
new file mode 100644
index 00000000000..d157424da57
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_2.json
@@ -0,0 +1,8 @@
+// Copyright 2013 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.
+
+// Tests an invalid JSON file.
+
+// Invalid control character at: line 8 column 19 (char 25).
+{ "hello": "world }
diff --git a/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_3.json b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_3.json
new file mode 100644
index 00000000000..9dd3500844f
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_3.json
@@ -0,0 +1,8 @@
+// Copyright 2013 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.
+
+// Tests an invalid JSON file.
+
+// Expecting property name: line 8 column 23 (char 29).
+{ "a": "b", "c": "d", }
diff --git a/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_4.json b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_4.json
new file mode 100644
index 00000000000..af6a1a6ce05
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test_presubmit/invalid_json_4.json
@@ -0,0 +1,8 @@
+// Copyright 2013 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.
+
+// Tests an invalid JSON file.
+
+// Expecting , delimiter: line 8 column 12 (char 18).
+{ "a": "b" "c": "d" }
diff --git a/chromium/chrome/common/extensions/api/test_presubmit/valid_json.json b/chromium/chrome/common/extensions/api/test_presubmit/valid_json.json
new file mode 100644
index 00000000000..615ea28d4be
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/test_presubmit/valid_json.json
@@ -0,0 +1,11 @@
+// Copyright 2013 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.
+
+// Tests a valid IDL file.
+
+// This is a comment.
+{
+ "key1": ["value1", "value2"],
+ "key2": 3 // This is an inline comment.
+}
diff --git a/chromium/chrome/common/extensions/api/top_sites.json b/chromium/chrome/common/extensions/api/top_sites.json
new file mode 100644
index 00000000000..3a8ece82e33
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/top_sites.json
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "topSites",
+ "description": "Use the <code>chrome.topSites</code> API to access the top sites that are displayed on the new tab page.",
+ "types": [
+ {
+ "id": "MostVisitedURL",
+ "type": "object",
+ "description": "An object encapsulating a most visited URL, such as the URLs on the new tab page.",
+ "properties": {
+ "url": {"type": "string", "description": "The most visited URL."},
+ "title": {"type": "string", "description": "The title of the page"}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets a list of top sites.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "array",
+ "name": "data",
+ "items": {"$ref": "MostVisitedURL"}
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/tts.json b/chromium/chrome/common/extensions/api/tts.json
new file mode 100644
index 00000000000..995968ca8e0
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/tts.json
@@ -0,0 +1,257 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "tts",
+ "description": "Use the <code>chrome.tts</code> API to play synthesized text-to-speech (TTS). See also the related <a href='http://developer.chrome.com/extensions/ttsEngine.html'>ttsEngine</a> API, which allows an extension to implement a speech engine.",
+ "types": [
+ {
+ "id": "TtsEvent",
+ "type": "object",
+ "description": "An event from the TTS engine to communicate the status of an utterance.",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["start", "end", "word", "sentence", "marker", "interrupted", "cancelled", "error", "pause", "resume"],
+ "description": "The type can be 'start' as soon as speech has started, 'word' when a word boundary is reached, 'sentence' when a sentence boundary is reached, 'marker' when an SSML mark element is reached, 'end' when the end of the utterance is reached, 'interrupted' when the utterance is stopped or interrupted before reaching the end, 'cancelled' when it's removed from the queue before ever being synthesized, or 'error' when any other error occurs. When pausing speech, a 'pause' event is fired if a particular utterance is paused in the middle, and 'resume' if an utterance resumes speech. Note that pause and resume events may not fire if speech is paused in-between utterances."
+ },
+ "charIndex": {
+ "type": "number",
+ "optional": true,
+ "description": "The index of the current character in the utterance."
+ },
+ "errorMessage": {
+ "type": "string",
+ "description": "The error description, if the event type is 'error'.",
+ "optional": true
+ },
+ "srcId": {
+ "type": "number",
+ "description": "An ID unique to the calling function's context so that events can get routed back to the correct tts.speak call.",
+ "nodoc": true,
+ "optional": true
+ },
+ "isFinalEvent": {
+ "type": "boolean",
+ "description": "True if this is the final event that will be sent to this handler.",
+ "nodoc": true,
+ "optional": true
+ }
+ }
+ },
+ {
+ "id": "TtsVoice",
+ "type": "object",
+ "description": "A description of a voice available for speech synthesis.",
+ "properties": {
+ "voiceName": {
+ "type": "string",
+ "optional": true,
+ "description": "The name of the voice."
+ },
+ "lang": {
+ "type": "string",
+ "optional": true,
+ "description": "The language that this voice supports, in the form <em>language</em>-<em>region</em>. Examples: 'en', 'en-US', 'en-GB', 'zh-CN'."
+ },
+ "gender": {
+ "type": "string",
+ "optional": true,
+ "description": "This voice's gender.",
+ "enum": ["male", "female"]
+ },
+ "remote": {
+ "type": "boolean",
+ "optional": true,
+ "description": "If true, the synthesis engine is a remote network resource. It may be higher latency and may incur bandwidth costs."
+ },
+ "extensionId": {
+ "type": "string",
+ "optional": true,
+ "description": "The ID of the extension providing this voice."
+ },
+ "eventTypes": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "All of the callback event types that this voice is capable of sending."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "speak",
+ "type": "function",
+ "description": "Speaks text using a text-to-speech engine.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "utterance",
+ "description": "The text to speak, either plain text or a complete, well-formed SSML document. Speech engines that do not support SSML will strip away the tags and speak the text. The maximum length of the text is 32,768 characters."
+ },
+ {
+ "type": "object",
+ "name": "options",
+ "optional": true,
+ "description": "The speech options.",
+ "properties": {
+ "enqueue": {
+ "type": "boolean",
+ "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."
+ },
+ "voiceName": {
+ "type": "string",
+ "optional": true,
+ "description": "The name of the voice to use for synthesis. If empty, uses any available voice."
+ },
+ "extensionId": {
+ "type": "string",
+ "optional": true,
+ "description": "The extension ID of the speech engine to use, if known."
+ },
+ "lang": {
+ "type": "string",
+ "optional": true,
+ "description": "The language to be used for synthesis, in the form <em>language</em>-<em>region</em>. Examples: 'en', 'en-US', 'en-GB', 'zh-CN'."
+ },
+ "gender": {
+ "type": "string",
+ "optional": true,
+ "description": "Gender of voice for synthesized speech.",
+ "enum": ["male", "female"]
+ },
+ "rate": {
+ "type": "number",
+ "optional": true,
+ "minimum": 0.1,
+ "maximum": 10,
+ "description": "Speaking rate relative to the default rate for this voice. 1.0 is the default rate, normally around 180 to 220 words per minute. 2.0 is twice as fast, and 0.5 is half as fast. Values below 0.1 or above 10.0 are strictly disallowed, but many voices will constrain the minimum and maximum rates further&mdash;for example a particular voice may not actually speak faster than 3 times normal even if you specify a value larger than 3.0."
+ },
+ "pitch": {
+ "type": "number",
+ "optional": true,
+ "minimum": 0,
+ "maximum": 2,
+ "description": "Speaking pitch between 0 and 2 inclusive, with 0 being lowest and 2 being highest. 1.0 corresponds to a voice's default pitch."
+ },
+ "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, with a default of 1.0."
+ },
+ "requiredEventTypes": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "The TTS event types the voice must support."
+ },
+ "desiredEventTypes": {
+ "type": "array",
+ "items": {"type": "string"},
+ "optional": true,
+ "description": "The TTS event types that you are interested in listening to. If missing, all event types may be sent."
+ },
+ "onEvent": {
+ "type": "function",
+ "optional": true,
+ "description": "This function is called with events that occur in the process of speaking the utterance.",
+ "parameters": [
+ {
+ "name": "event",
+ "$ref": "TtsEvent",
+ "description": "The update event from the text-to-speech engine indicating the status of this utterance."
+ }
+ ]
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called right away, before speech finishes. Check chrome.runtime.lastError to make sure there were no errors. Use options.onEvent to get more detailed feedback.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "stop",
+ "type": "function",
+ "description": "Stops any current speech and flushes the queue of any pending utterances. In addition, if speech was paused, it will now be un-paused for the next call to speak.",
+ "parameters": []
+ },
+ {
+ "name": "pause",
+ "type": "function",
+ "description": "Pauses speech synthesis, potentially in the middle of an utterance. A call to resume or stop will un-pause speech.",
+ "parameters": []
+ },
+ {
+ "name": "resume",
+ "type": "function",
+ "description": "If speech was paused, resumes speaking where it left off.",
+ "parameters": []
+ },
+ {
+ "name": "isSpeaking",
+ "type": "function",
+ "description": "Checks whether the engine is currently speaking. On Mac OS X, the result is true whenever the system speech engine is speaking, even if the speech wasn't initiated by Chrome.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "speaking",
+ "type": "boolean",
+ "description": "True if speaking, false otherwise."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getVoices",
+ "type": "function",
+ "description": "Gets an array of all available voices.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "type": "array",
+ "name": "voices",
+ "items": { "$ref": "TtsVoice" },
+ "description": "Array of $ref:TtsVoice objects representing the available voices for speech synthesis."
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onEvent",
+ "type": "function",
+ "nodoc": true,
+ "parameters": [
+ {
+ "name": "event",
+ "$ref": "TtsEvent",
+ "description": "The event from the text-to-speech engine indicating the status of this utterance."
+ }
+ ],
+ "description": "Used to pass events back to the function calling speak()."
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/tts_engine.json b/chromium/chrome/common/extensions/api/tts_engine.json
new file mode 100644
index 00000000000..ff8d7b04db3
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/tts_engine.json
@@ -0,0 +1,114 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "ttsEngine",
+ "description": "Use the <code>chrome.ttsEngine</code> API to implement a text-to-speech(TTS) engine using an extension. If your extension registers using this API, it will receive events containing an utterance to be spoken and other parameters when any extension or Chrome App uses the <a href='tts.html'>tts</a> API to generate speech. Your extension can then use any available web technology to synthesize and output the speech, and send events back to the calling function to report the status.",
+ "functions": [
+ {
+ "name": "sendTtsEvent",
+ "nodoc": true,
+ "type": "function",
+ "description": "Routes a TTS event from a speech engine to a client.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "requestId"
+ },
+ {
+ "name": "event",
+ "$ref": "tts.TtsEvent",
+ "description": "The update event from the text-to-speech engine indicating the status of this utterance."
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onSpeak",
+ "type": "function",
+ "description": "Called when the user makes a call to tts.speak() and one of the voices from this extension's manifest is the first to match the options object.",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "utterance",
+ "description": "The text to speak, specified as either plain text or an SSML document. If your engine does not support SSML, you should strip out all XML markup and synthesize only the underlying text content. The value of this parameter is guaranteed to be no more than 32,768 characters. If this engine does not support speaking that many characters at a time, the utterance should be split into smaller chunks and queued internally without returning an error."
+ },
+ {
+ "type": "object",
+ "name": "options",
+ "description": "Options specified to the tts.speak() method.",
+ "properties": {
+ "voiceName": {
+ "type": "string",
+ "optional": true,
+ "description": "The name of the voice to use for synthesis."
+ },
+ "lang": {
+ "type": "string",
+ "optional": true,
+ "description": "The language to be used for synthesis, in the form <em>language</em>-<em>region</em>. Examples: 'en', 'en-US', 'en-GB', 'zh-CN'."
+ },
+ "gender": {
+ "type": "string",
+ "optional": true,
+ "description": "Gender of voice for synthesized speech.",
+ "enum": ["male", "female"]
+ },
+ "rate": {
+ "type": "number",
+ "optional": true,
+ "minimum": 0.1,
+ "maximum": 10.0,
+ "description": "Speaking rate relative to the default rate for this voice. 1.0 is the default rate, normally around 180 to 220 words per minute. 2.0 is twice as fast, and 0.5 is half as fast. This value is guaranteed to be between 0.1 and 10.0, inclusive. When a voice does not support this full range of rates, don't return an error. Instead, clip the rate to the range the voice supports."
+ },
+ "pitch": {
+ "type": "number",
+ "optional": true,
+ "minimum": 0,
+ "maximum": 2,
+ "description": "Speaking pitch between 0 and 2 inclusive, with 0 being lowest and 2 being highest. 1.0 corresponds to this voice's default pitch."
+ },
+ "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, with a default of 1.0."
+ }
+ }
+ },
+ {
+ "name": "sendTtsEvent",
+ "type": "function",
+ "description": "Call this function with events that occur in the process of speaking the utterance.",
+ "parameters": [
+ {
+ "name": "event",
+ "$ref": "tts.TtsEvent",
+ "description": "The event from the text-to-speech engine indicating the status of this utterance."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "onStop",
+ "type": "function",
+ "description": "Fired when a call is made to tts.stop and this extension may be in the middle of speaking. If an extension receives a call to onStop and speech is already stopped, it should do nothing (not raise an error). If speech is in the paused state, this should cancel the paused state."
+ },
+ {
+ "name": "onPause",
+ "type": "function",
+ "description": "Optional: if an engine supports the pause event, it should pause the current utterance being spoken, if any, until it receives a resume event or stop event. Note that a stop event should also clear the paused state."
+ },
+ {
+ "name": "onResume",
+ "type": "function",
+ "description": "Optional: if an engine supports the pause event, it should also support the resume event, to continue speaking the current utterance, if any. Note that a stop event should also clear the paused state."
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/types.json b/chromium/chrome/common/extensions/api/types.json
new file mode 100644
index 00000000000..c5cc5fd0a72
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/types.json
@@ -0,0 +1,176 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "types",
+ "description": "The <code>chrome.types</code> API contains type declarations for Chrome.",
+ "types": [
+ {
+ "id": "ChromeSetting",
+ "type": "object",
+ "js_module": "ChromeSetting",
+ "customBindings": "ChromeSetting",
+ "description": "An interface that allows access to a Chrome browser setting. See $ref:proxy.settings for an example.",
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "nocompile": true,
+ "description": "Gets the value of a setting.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to consider.",
+ "properties": {
+ "incognito": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether to return the value that applies to the incognito session (default false)."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Details of the currently effective value.",
+ "properties": {
+ "value": {
+ "description": "The value of the setting.",
+ "type": "any"
+ },
+ "levelOfControl": {
+ "description": "One of<ul><li><var>not_controllable</var>: cannot be controlled by any extension</li><li><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence</li><li><var>controllable_by_this_extension</var>: can be controlled by this extension</li><li><var>controlled_by_this_extension</var>: controlled by this extension</li></ul>",
+ "type": "string",
+ "enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]
+ },
+ "incognitoSpecific": {
+ "description": "Whether the effective value is specific to the incognito session.<br/>This property will <em>only</em> be present if the <var>incognito</var> property in the <var>details</var> parameter of <code>get()</code> was true.",
+ "type": "boolean",
+ "optional": true
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "type": "function",
+ "nocompile": true,
+ "description": "Sets the value of a setting.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to change.",
+ "properties": {
+ "value": {
+ "description": "The value of the setting. <br/>Note that every setting has a specific value type, which is described together with the setting. An extension should <em>not</em> set a value of a different type.",
+ "type": "any"
+ },
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "regular_only", "incognito_persistent", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to set the setting (default: regular). One of<ul><li><var>regular</var>: setting for the regular profile (which is inherited by the incognito profile if not overridden elsewhere),</li><li><var>regular_only</var>: setting for the regular profile only (not inherited by the incognito profile),</li><li><var>incognito_persistent</var>: setting for the incognito profile that survives browser restarts (overrides regular preferences),</li><li><var>incognito_session_only</var>: setting for the incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular and incognito_persistent preferences).</li></ul>"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called at the completion of the set operation.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "clear",
+ "type": "function",
+ "nocompile": true,
+ "description": "Clears the setting, restoring any default value.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to clear.",
+ "properties": {
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "regular_only", "incognito_persistent", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to clear the setting (default: regular). One of<ul><li><var>regular</var>: setting for the regular profile (which is inherited by the incognito profile if not overridden elsewhere),</li><li><var>regular_only</var>: setting for the regular profile only (not inherited by the incognito profile),</li><li><var>incognito_persistent</var>: setting for the incognito profile that survives browser restarts (overrides regular preferences),</li><li><var>incognito_session_only</var>: setting for the incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular and incognito_persistent preferences).</li></ul>"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called at the completion of the clear operation.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "description": "Fired after the setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "value": {
+ "description": "The value of the setting after the change.",
+ "type": "any"
+ },
+ "levelOfControl": {
+ "description": "One of<ul><li><var>not_controllable</var>: cannot be controlled by any extension</li><li><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence</li><li><var>controllable_by_this_extension</var>: can be controlled by this extension</li><li><var>controlled_by_this_extension</var>: controlled by this extension</li></ul>",
+ "type": "string",
+ "enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]
+ },
+ "incognitoSpecific": {
+ "description": "Whether the value that has changed is specific to the incognito session.<br/>This property will <em>only</em> be present if the user has enabled the extension in incognito mode.",
+ "type": "boolean",
+ "optional": true
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "ImageDetails",
+ "type": "object",
+ "description": "Details about the format and quality of an image.",
+ "properties": {
+ "format": {
+ "type": "string",
+ "optional": true,
+ "enum": ["jpeg", "png"],
+ "description": "The format of the resulting image. Default is <code>\"jpeg\"</code>."
+ },
+ "quality": {
+ "type": "integer",
+ "optional": true,
+ "minimum": 0,
+ "maximum": 100,
+ "description": "When format is <code>\"jpeg\"</code>, controls the quality of the resulting image. This value is ignored for PNG images. As quality is decreased, the resulting image will have more visual artifacts, and the number of bytes needed to store it will decrease."
+ }
+ }
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/types_private.json b/chromium/chrome/common/extensions/api/types_private.json
new file mode 100644
index 00000000000..19c7f1c2f86
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/types_private.json
@@ -0,0 +1,143 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "types.private",
+ "description": "The <code>chrome.types.private</code> API contains private type declarations for Chrome.",
+ "types": [
+ {
+ "id": "ChromeDirectSetting",
+ "type": "object",
+ "js_module": "ChromeDirectSetting",
+ "customBindings": "ChromeDirectSetting",
+ "description": "An interface that allows component extensions direct access to a Chrome browser setting.",
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets the value of a setting.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to consider.",
+ "properties": {
+ "incognito": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Whether to return the value that applies to the incognito session (default false)."
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Details of the currently effective value.",
+ "properties": {
+ "value": {
+ "description": "The value of the setting.",
+ "type": "any"
+ },
+ "incognitoSpecific": {
+ "description": "Whether the effective value is specific to the incognito session.<br/>This property will <em>only</em> be present if the <var>incognito</var> property in the <var>details</var> parameter of <code>get()</code> was true.",
+ "type": "boolean",
+ "optional": true
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "set",
+ "type": "function",
+ "description": "Sets the value of a setting.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to change.",
+ "properties": {
+ "value": {
+ "description": "The value of the setting. <br/>Note that every setting has a specific value type, which is described together with the setting. An extension should <em>not</em> set a value of a different type.",
+ "type": "any"
+ },
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "regular_only", "incognito_persistent", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to set the setting (default: regular). One of<ul><li><var>regular</var>: setting for the regular profile (which is inherited by the incognito profile if not overridden elsewhere),</li><li><var>regular_only</var>: setting for the regular profile only (not inherited by the incognito profile),</li><li><var>incognito_persistent</var>: setting for the incognito profile that survives browser restarts (overrides regular preferences),</li><li><var>incognito_session_only</var>: setting for the incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular and incognito_persistent preferences).</li></ul>"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called at the completion of the set operation.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "clear",
+ "type": "function",
+ "description": "Clears the setting, restoring any default value.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Which setting to clear.",
+ "properties": {
+ "scope": {
+ "type": "string",
+ "enum": ["regular", "regular_only", "incognito_persistent", "incognito_session_only"],
+ "optional": true,
+ "description": "Where to clear the setting (default: regular). One of<ul><li><var>regular</var>: setting for the regular profile (which is inherited by the incognito profile if not overridden elsewhere),</li><li><var>regular_only</var>: setting for the regular profile only (not inherited by the incognito profile),</li><li><var>incognito_persistent</var>: setting for the incognito profile that survives browser restarts (overrides regular preferences),</li><li><var>incognito_session_only</var>: setting for the incognito profile that can only be set during an incognito session and is deleted when the incognito session ends (overrides regular and incognito_persistent preferences).</li></ul>"
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called at the completion of the clear operation.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onChange",
+ "description": "Fired after the setting changes.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "value": {
+ "description": "The value of the setting after the change.",
+ "type": "any"
+ },
+ "incognitoSpecific": {
+ "description": "Whether the value that has changed is specific to the incognito session.<br/>This property will <em>only</em> be present if the user has enabled the extension in incognito mode.",
+ "type": "boolean",
+ "optional": true
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/virtual_keyboard_private.json b/chromium/chrome/common/extensions/api/virtual_keyboard_private.json
new file mode 100644
index 00000000000..3d535e5be00
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/virtual_keyboard_private.json
@@ -0,0 +1,142 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "virtualKeyboardPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/input/input.h"
+ },
+ "platforms": ["chromeos"],
+ "description": "none",
+ "types": [
+ {
+ "id": "VirtualKeyboardEvent",
+ "type": "object",
+ "properties": {
+ "type": {"type": "string", "description": "One of keyup or keydown.", "enum": ["keyup", "keydown"]},
+ "charValue": {"type": "integer", "description": "Unicode value of the key."},
+ "keyCode": {"type": "integer", "description": "Virtual key code, which is independent of the keyboard layout or modifier state."},
+ "keyName": {"type": "string", "description": "Name of the key, which is independent of modifier state."},
+ "modifiers": {"type": "integer", "optional": true, "description": "Flag for modifiers that are active. None = 0, Shift = 2, Control = 4, Alt = 8."}
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "insertText",
+ "type": "function",
+ "description": "Inserts text into the currently focused text field.",
+ "parameters": [
+ { "name": "text",
+ "type": "string",
+ "description": "The text that will be inserted."
+ },
+ { "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the insertion is completed.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "moveCursor",
+ "type": "function",
+ "description": "Move cursor on the current focused textfield by swipe.",
+ "parameters": [
+ { "name": "swipe_direction",
+ "type": "integer",
+ "discription": "The direction of the cursor movement."
+ },
+ { "name": "modifier_flags",
+ "type": "integer",
+ "description": "Bitmask representing the state of the system modifier keys."
+ },
+ { "type": "function",
+ "name": "callback",
+ "optional": true,
+ "decription": "called when the swipe movement is completed.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "sendKeyEvent",
+ "type": "function",
+ "description": "Sends a fabricated key event to the focused input field.",
+ "parameters": [
+ { "name": "keyEvent",
+ "$ref": "VirtualKeyboardEvent",
+ "description": ""
+ },
+ { "name": "callback",
+ "type": "function",
+ "optional": true,
+ "description": "Called after processing the event.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "hideKeyboard",
+ "type": "function",
+ "description": "Hides the virtual keyboard.",
+ "parameters": [
+ { "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when the keyboard is hidden.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "lockKeyboard",
+ "type": "function",
+ "description": "Sets the lock state of the virtual keyboard. A locked keyboard remains visible even after a text area loses input focus.",
+ "parameters": [
+ {
+ "type": "boolean",
+ "name": "lock"
+ }
+ ]
+ },
+ {
+ "name": "keyboardLoaded",
+ "type": "function",
+ "description": "Inform the system that the keyboard has loaded.",
+ "parameters": [
+ { "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called when load acknowledgement is complete.",
+ "parameters": []
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onTextInputBoxFocused",
+ "type": "function",
+ "description": "This event is sent when focus enters a text input box.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "context",
+ "description": "Describes the text input box that has acquired focus. Note only the type of text input box is passed. This API is intended to be used by non-ime virtual keyboard only. Normal ime virtual keyboard should use chrome.input.ime.onFocus to get the more detailed InputContext.",
+ "properties": {
+ "type": {
+ "type": "string",
+ "description": "The value of type attribute of the focused text input box.",
+ "enum": ["text", "number", "password", "date", "url", "tel", "email"]
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/wallpaper.json b/chromium/chrome/common/extensions/api/wallpaper.json
new file mode 100644
index 00000000000..a810b853f5b
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/wallpaper.json
@@ -0,0 +1,66 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace":"wallpaper",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/wallpaper_api.h"
+ },
+ "platforms": ["chromeos"],
+ "description": "Use the <code>chrome.wallpaper</code> API to change the ChromeOS wallpaper.",
+ "functions": [
+ {
+ "name": "setWallpaper",
+ "type": "function",
+ "description": "Sets wallpaper to the image at <em>url</em> or <em>wallpaperData</em> with the specified <em>layout</em>",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "wallpaperData": {
+ "type": "binary",
+ "optional": true,
+ "description": "The jpeg or png encoded wallpaper image."
+ },
+ "url": {
+ "type": "string",
+ "optional": true,
+ "description": "The URL of the wallpaper to be set."
+ },
+ "layout": {
+ "type": "string",
+ "enum": [ "STRETCH", "CENTER", "CENTER_CROPPED" ],
+ "description": "The supported wallpaper layouts."
+ },
+ "name": {
+ "type": "string",
+ "description": "The file name of the saved wallpaper."
+ },
+ "thumbnail": {
+ "type": "boolean",
+ "optional": true,
+ "description": "True if a 128x60 thumbnail should be generated."
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "binary",
+ "optional": true,
+ "name": "thumbnail",
+ "description": "The jpeg encoded wallpaper thumbnail. It is generated by resizing the wallpaper to 128x60."
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/wallpaper_private.json b/chromium/chrome/common/extensions/api/wallpaper_private.json
new file mode 100644
index 00000000000..23159062a8c
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/wallpaper_private.json
@@ -0,0 +1,243 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace":"wallpaperPrivate",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/chromeos/extensions/wallpaper_private_api.h"
+ },
+ "platforms": ["chromeos"],
+ "description": "none",
+ "types": [
+ {
+ "id": "WallpaperLayout",
+ "type": "string",
+ "enum": [ "STRETCH", "CENTER", "CENTER_CROPPED" ]
+ }
+ ],
+ "functions": [
+ {
+ "name": "getStrings",
+ "type": "function",
+ "description": "Gets translated strings and initialization data.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "additionalProperties": {"type": "any"}
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setWallpaperIfExists",
+ "type": "function",
+ "description": "Sets wallpaper if it exists in the local file system with specified layout",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "url"
+ },
+ {
+ "name": "layout",
+ "$ref": "WallpaperLayout"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "boolean",
+ "name": "exists"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setWallpaper",
+ "type": "function",
+ "description": "Sets wallpaper to the image from url with specified layout",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "binary",
+ "name": "wallpaper"
+ },
+ {
+ "name": "layout",
+ "$ref": "WallpaperLayout"
+ },
+ {
+ "type": "string",
+ "name": "url"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "resetWallpaper",
+ "type": "function",
+ "description": "Clears current user's active custom wallpaper and changes to default wallpaper.",
+ "nodoc": "true",
+ "parameters": []
+ },
+ {
+ "name": "setCustomWallpaper",
+ "type": "function",
+ "description": "Sets wallpaper to the image from local file with specified layout and returns thumbnail if needed.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "binary",
+ "name": "wallpaper"
+ },
+ {
+ "name": "layout",
+ "$ref": "WallpaperLayout"
+ },
+ {
+ "type": "boolean",
+ "name": "generateThumbnail",
+ "description": "If true, callback should have a binary thumbnail."
+ },
+ {
+ "type": "string",
+ "name": "fileName"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "type": "binary",
+ "optional": true,
+ "name": "thumbnail"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setCustomWallpaperLayout",
+ "type": "function",
+ "description": "Sets current custom wallpaper to the specified layout",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "name": "layout",
+ "$ref": "WallpaperLayout"
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "minimizeInactiveWindows",
+ "type": "function",
+ "description": "Minimizes all inactive open windows.",
+ "nodoc": "true",
+ "parameters": []
+ },
+ {
+ "name": "restoreMinimizedWindows",
+ "type": "function",
+ "description": "Restores all previously minimized windows.",
+ "nodoc": "true",
+ "parameters": []
+ },
+ {
+ "name": "getThumbnail",
+ "type": "function",
+ "description": "Gets thumbnail of wallpaper from thumbnail directory.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "urlOrFile",
+ "description": "URL of ONLINE wallpaper or file name of CUSTOM wallpaper"
+ },
+ {
+ "name": "source",
+ "type": "string",
+ "enum": [ "ONLINE", "OEM" ]
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Function called upon completion.",
+ "parameters": [
+ {
+ "type": "binary",
+ "name": "data",
+ "optional": true,
+ "description": "The binary data of loaded thumbnail."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "saveThumbnail",
+ "type": "function",
+ "description": "Saves thumbnail to thumbnail directory.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "string",
+ "name": "url",
+ "description": "Wallpaper url."
+ },
+ {
+ "type": "binary",
+ "name": "data",
+ "description": "The binary data of downloaded thumbnail."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Function called upon completion.",
+ "parameters": [],
+ "optional": true
+ }
+ ]
+ },
+ {
+ "name": "getOfflineWallpaperList",
+ "type": "function",
+ "description": "Get the list of file names of downloaded wallpapers.",
+ "nodoc": "true",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "description": "Function called upon completion.",
+ "parameters": [
+ {
+ "type": "array",
+ "name": "results",
+ "items": {"type": "string"}
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/web_navigation.json b/chromium/chrome/common/extensions/api/web_navigation.json
new file mode 100644
index 00000000000..783ecdddee0
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/web_navigation.json
@@ -0,0 +1,339 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "webNavigation",
+ "description": "Use the <code>chrome.webNavigation</code> API to receive notifications about the status of navigation requests in-flight.",
+ "types": [],
+ "functions": [
+ {
+ "name": "getFrame",
+ "type": "function",
+ "description": "Retrieves information about the given frame. A frame refers to an &lt;iframe&gt; or a &lt;frame&gt; of a web page and is identified by a tab ID and a frame ID.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Information about the frame to retrieve information about.",
+ "properties": {
+ "tabId": { "type": "integer", "minimum": 0, "description": "The ID of the tab in which the frame is." },
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": { "type": "integer", "minimum": 0, "description": "The ID of the frame in the given tab." }
+ }
+ },
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "optional": true,
+ "description": "Information about the requested frame, null if the specified frame ID and/or tab ID are invalid.",
+ "properties": {
+ "errorOccurred": {
+ "type": "boolean",
+ "description": "True if the last navigation in this frame was interrupted by an error, i.e. the onErrorOccurred event fired."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL currently associated with this frame, if the frame identified by the frameId existed at one point in the given tab. The fact that an URL is associated with a given frameId does not imply that the corresponding frame still exists."
+ },
+ "parentFrameId": {
+ "type": "integer",
+ "description": "ID of frame that wraps the frame. Set to -1 of no parent frame exists."
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAllFrames",
+ "type": "function",
+ "description": "Retrieves information about all frames of a given tab.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "description": "Information about the tab to retrieve all frames from.",
+ "properties": {
+ "tabId": { "type": "integer", "minimum": 0, "description": "The ID of the tab." }
+ }
+ },
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {
+ "name": "details",
+ "type": "array",
+ "description": "A list of frames in the given tab, null if the specified tab ID is invalid.",
+ "optional": true,
+ "items": {
+ "type": "object",
+ "properties": {
+ "errorOccurred": {
+ "type": "boolean",
+ "description": "True if the last navigation in this frame was interrupted by an error, i.e. the onErrorOccurred event fired."
+ },
+ "processId": {
+ "type": "integer",
+ "description": "The ID of the process runs the renderer for this tab."
+ },
+ "frameId": {
+ "type": "integer",
+ "description": "The ID of the frame. 0 indicates that this is the main frame; a positive value indicates the ID of a subframe."
+ },
+ "parentFrameId": {
+ "type": "integer",
+ "description": "ID of frame that wraps the frame. Set to -1 of no parent frame exists."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL currently associated with this frame."
+ }
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onBeforeNavigate",
+ "type": "function",
+ "description": "Fired when a navigation is about to occur.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation is about to occur."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique for a given tab and process."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame. Set to -1 of no parent frame exists."},
+ "timeStamp": {"type": "number", "description": "The time when the browser was about to start the navigation, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onCommitted",
+ "type": "function",
+ "description": "Fired when a navigation is committed. The document (and the resources it refers to, such as images and subframes) might still be downloading, but at least part of the document has been received from the server and the browser has decided to switch to the new document.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "transitionType": {"type": "string", "enum": ["link", "typed", "auto_bookmark", "auto_subframe", "manual_subframe", "generated", "start_page", "form_submit", "reload", "keyword", "keyword_generated"], "description": "Cause of the navigation. The same transition types as defined in the history API are used."},
+ "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"type": "string", "enum": ["client_redirect", "server_redirect", "forward_back", "from_address_bar"]}},
+ "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onDOMContentLoaded",
+ "type": "function",
+ "description": "Fired when the page's DOM is fully constructed, but the referenced resources may not finish loading.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "timeStamp": {"type": "number", "description": "The time when the page's DOM was fully constructed, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onCompleted",
+ "type": "function",
+ "description": "Fired when a document, including the resources it refers to, is completely loaded and initialized.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "timeStamp": {"type": "number", "description": "The time when the document finished loading, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onErrorOccurred",
+ "type": "function",
+ "description": "Fired when an error occurs and the navigation is aborted. This can happen if either a network error occurred, or the user aborted the navigation.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "error": {"type": "string", "description": "The error description."},
+ "timeStamp": {"type": "number", "description": "The time when the error occurred, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onCreatedNavigationTarget",
+ "type": "function",
+ "description": "Fired when a new window, or a new tab in an existing window, is created to host a navigation.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "sourceTabId": {"type": "integer", "description": "The ID of the tab in which the navigation is triggered."},
+ "sourceProcessId": {"type": "integer", "description": "The ID of the process runs the renderer for the source tab."},
+ "sourceFrameId": {"type": "integer", "description": "The ID of the frame with sourceTabId in which the navigation is triggered. 0 indicates the main frame."},
+ "url": {"type": "string", "description": "The URL to be opened in the new window."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the url is opened"},
+ "timeStamp": {"type": "number", "description": "The time when the browser was about to create a new view, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onReferenceFragmentUpdated",
+ "type": "function",
+ "description": "Fired when the reference fragment of a frame was updated. All future events for that frame will use the updated URL.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "transitionType": {"type": "string", "enum": ["link", "typed", "auto_bookmark", "auto_subframe", "manual_subframe", "generated", "start_page", "form_submit", "reload", "keyword", "keyword_generated"], "description": "Cause of the navigation. The same transition types as defined in the history API are used."},
+ "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"type": "string", "enum": ["client_redirect", "server_redirect", "forward_back", "from_address_bar"]}},
+ "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onTabReplaced",
+ "type": "function",
+ "description": "Fired when the contents of the tab is replaced by a different (usually previously pre-rendered) tab.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "replacedTabId": {"type": "integer", "description": "The ID of the tab that was replaced."},
+ "tabId": {"type": "integer", "description": "The ID of the tab that replaced the old tab."},
+ "timeStamp": {"type": "number", "description": "The time when the replacement happened, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ },
+ {
+ "name": "onHistoryStateUpdated",
+ "type": "function",
+ "description": "Fired when the frame's history was updated to a new URL. All future events for that frame will use the updated URL.",
+ "filters": [
+ {
+ "name": "url",
+ "type": "array",
+ "items": { "$ref": "events.UrlFilter" },
+ "description": "Conditions that the URL being navigated to must satisfy. The 'schemes' and 'ports' fields of UrlFilter are ignored for this event."
+ }
+ ],
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the navigation occurs."},
+ "url": {"type": "string"},
+ "processId": {"type": "integer", "description": "The ID of the process runs the renderer for this tab."},
+ "frameId": {"type": "integer", "description": "0 indicates the navigation happens in the tab content window; a positive value indicates navigation in a subframe. Frame IDs are unique within a tab."},
+ "transitionType": {"type": "string", "enum": ["link", "typed", "auto_bookmark", "auto_subframe", "manual_subframe", "generated", "start_page", "form_submit", "reload", "keyword", "keyword_generated"], "description": "Cause of the navigation. The same transition types as defined in the history API are used."},
+ "transitionQualifiers": {"type": "array", "description": "A list of transition qualifiers.", "items": {"type": "string", "enum": ["client_redirect", "server_redirect", "forward_back", "from_address_bar"]}},
+ "timeStamp": {"type": "number", "description": "The time when the navigation was committed, in milliseconds since the epoch."}
+ }
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/web_request.json b/chromium/chrome/common/extensions/api/web_request.json
new file mode 100644
index 00000000000..51a161edbf2
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/web_request.json
@@ -0,0 +1,543 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "webRequest",
+ "description": "Use the <code>chrome.webRequest</code> API to observe and analyze traffic and to intercept, block, or modify requests in-flight.",
+ "properties": {
+ "MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES": {
+ "value": 20,
+ "description": "The maximum number of times that <code>handlerBehaviorChanged</code> can be called per 10 minute sustained interval. <code>handlerBehaviorChanged</code> is an expensive function call that shouldn't be called often."
+ }
+ },
+ "types": [
+ {
+ "id": "RequestFilter",
+ "type": "object",
+ "description": "An object describing filters to apply to webRequest events.",
+ "properties": {
+ "urls": {
+ "type": "array",
+ "description": "A list of URLs or URL patterns. Requests that cannot match any of the URLs will be filtered out.",
+ "items": { "type": "string" }
+ },
+ "types": {
+ "type": "array",
+ "optional": true,
+ "description": "A list of request types. Requests that cannot match any of the types will be filtered out.",
+ "items": { "type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] }
+ },
+ "tabId": { "type": "integer", "optional": true },
+ "windowId": { "type": "integer", "optional": true }
+ }
+ },
+ {
+ "id": "HttpHeaders",
+ "nocompile": true,
+ "type": "array",
+ "description": "An array of HTTP headers. Each header is represented as a dictionary containing the keys <code>name</code> and either <code>value</code> or <code>binaryValue</code>.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {"type": "string", "description": "Name of the HTTP header."},
+ "value": {"type": "string", "optional": true, "description": "Value of the HTTP header if it can be represented by UTF-8."},
+ "binaryValue": {
+ "type": "array",
+ "optional": true,
+ "description": "Value of the HTTP header if it cannot be represented by UTF-8, stored as individual byte values (0..255).",
+ "items": {"type": "integer"}
+ }
+ }
+ }
+ },
+ {
+ "id": "BlockingResponse",
+ "nocompile": true,
+ "type": "object",
+ "description": "Returns value for event handlers that have the 'blocking' extraInfoSpec applied. Allows the event handler to modify network requests.",
+ "properties": {
+ "cancel": {
+ "type": "boolean",
+ "optional": true,
+ "description": "If true, the request is cancelled. Used in onBeforeRequest, this prevents the request from being sent."
+ },
+ "redirectUrl": {
+ "type": "string",
+ "optional": true,
+ "description": "Only used as a response to the onBeforeRequest event. If set, the original request is prevented from being sent and is instead redirected to the given URL."
+ },
+ "requestHeaders": {
+ "$ref": "HttpHeaders",
+ "optional": true,
+ "description": "Only used as a response to the onBeforeSendHeaders event. If set, the request is made with these request headers instead."
+ },
+ "responseHeaders": {
+ "$ref": "HttpHeaders",
+ "optional": true,
+ "description": "Only used as a response to the onHeadersReceived event. If set, the server is assumed to have responded with these response headers instead. Only return <code>responseHeaders</code> if you really want to modify the headers in order to limit the number of conflicts (only one extension may modify <code>responseHeaders</code> for each request)."
+ },
+ "authCredentials": {
+ "type": "object",
+ "description": "Only used as a response to the onAuthRequired event. If set, the request is made using the supplied credentials.",
+ "optional": true,
+ "properties": {
+ "username": {"type": "string"},
+ "password": {"type": "string"}
+ }
+ }
+ }
+ },
+ {
+ "id": "UploadData",
+ "type": "object",
+ "properties": {
+ "bytes": {
+ "type": "any",
+ "optional": true,
+ "description": "An ArrayBuffer with a copy of the data."
+ },
+ "file": {
+ "type": "string",
+ "optional": true,
+ "description": "A string with the file's path and name."
+ }
+ },
+ "description": "Contains data uploaded in a URL request."
+ }
+ ],
+ "functions": [
+ {
+ "name": "handlerBehaviorChanged",
+ "type": "function",
+ "description": "Needs to be called when the behavior of the webRequest handlers has changed to prevent incorrect handling due to caching. This function call is expensive. Don't call it often.",
+ "parameters": [
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onBeforeRequest",
+ "type": "function",
+ "description": "Fired when a request is about to occur.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "requestBody": {
+ "type": "object",
+ "optional": true,
+ "description": "Contains the HTTP request body data. Only provided if extraInfoSpec contains 'requestBody'.",
+ "properties": {
+ "error": {"type": "string", "optional": true, "description": "Errors when obtaining request body data."},
+ "formData": {
+ "type": "object",
+ "optional": true,
+ "description": "If the request method is POST and the body is a sequence of key-value pairs encoded in UTF8, encoded as either multipart/form-data, or application/x-www-form-urlencoded, this dictionary is present and for each key contains the list of all values for that key. If the data is of another media type, or if it is malformed, the dictionary is not present. An example value of this dictionary is {'key': ['value1', 'value2']}.",
+ "properties": {},
+ "additionalProperties": {
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "raw" : {
+ "type": "array",
+ "optional": true,
+ "items": {"$ref": "UploadData"},
+ "description": "If the request method is PUT or POST, and the body is not already parsed in formData, then the unparsed request body elements are contained in this array."
+ }
+ }
+ },
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["blocking", "requestBody"]
+ }
+ }
+ ],
+ "returns": {
+ "$ref": "BlockingResponse",
+ "description": "If \"blocking\" is specified in the \"extraInfoSpec\" parameter, the event listener should return an object of this type.",
+ "optional": true
+ }
+ },
+ {
+ "name": "onBeforeSendHeaders",
+ "nocompile": true,
+ "type": "function",
+ "description": "Fired before sending an HTTP request, once the request headers are available. This may occur after a TCP connection is made to the server, but before any HTTP data is sent. ",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "requestHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP request headers that are going to be sent out with this request."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["requestHeaders", "blocking"]
+ }
+ }
+ ],
+ "returns": {
+ "$ref": "BlockingResponse",
+ "description": "If \"blocking\" is specified in the \"extraInfoSpec\" parameter, the event listener should return an object of this type.",
+ "optional": true
+ }
+ },
+ {
+ "name": "onSendHeaders",
+ "nocompile": true,
+ "type": "function",
+ "description": "Fired just before a request is going to be sent to the server (modifications of previous onBeforeSendHeaders callbacks are visible by the time onSendHeaders is fired).",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "requestHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP request headers that have been sent out with this request."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["requestHeaders"]
+ }
+ }
+ ]
+ },
+ {
+ "name": "onHeadersReceived",
+ "nocompile": true,
+ "type": "function",
+ "description": "Fired when HTTP response headers of a request have been received.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "statusLine": {"type": "string", "description": "HTTP status line of the response or the 'HTTP/0.9 200 OK' string for HTTP/0.9 responses (i.e., responses that lack a status line)."},
+ "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that have been received with this response."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["blocking", "responseHeaders"]
+ }
+ }
+ ],
+ "returns": {
+ "$ref": "BlockingResponse",
+ "description": "If \"blocking\" is specified in the \"extraInfoSpec\" parameter, the event listener should return an object of this type.",
+ "optional": true
+ }
+ },
+ {
+ "name": "onAuthRequired",
+ "nocompile": true,
+ "type": "function",
+ "description": "Fired when an authentication failure is received. The listener has three options: it can provide authentication credentials, it can cancel the request and display the error page, or it can take no action on the challenge. If bad user credentials are provided, this may be called multiple times for the same request.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "scheme": {"type": "string", "description": "The authentication scheme, e.g. Basic or Digest."},
+ "realm": {"type": "string", "description": "The authentication realm provided by the server, if there is one.", "optional": true},
+ "challenger": {"type": "object", "description": "The server requesting authentication.", "properties": {"host": {"type": "string"}, "port": {"type": "integer"}}},
+ "isProxy": {"type": "boolean", "description": "True for Proxy-Authenticate, false for WWW-Authenticate."},
+ "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."},
+ "statusLine": {"type": "string", "description": "HTTP status line of the response or the 'HTTP/0.9 200 OK' string for HTTP/0.9 responses (i.e., responses that lack a status line) or an empty string if there are no headers."}
+ }
+ },
+ {
+ "type": "function",
+ "optional": true,
+ "name": "callback",
+ "parameters": [
+ {"name": "response", "$ref": "BlockingResponse"}
+ ]
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["responseHeaders", "blocking", "asyncBlocking"]
+ }
+ }
+ ],
+ "returns": {
+ "$ref": "BlockingResponse",
+ "description": "If \"blocking\" is specified in the \"extraInfoSpec\" parameter, the event listener should return an object of this type.",
+ "optional": true
+ }
+ },
+ {
+ "name": "onResponseStarted",
+ "nocompile": true,
+ "type": "function",
+ "description": "Fired when the first byte of the response body is received. For HTTP requests, this means that the status line and response headers are available.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
+ "fromCache": {"type": "boolean", "description": "Indicates if this response was fetched from disk cache."},
+ "statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
+ "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."},
+ "statusLine": {"type": "string", "description": "HTTP status line of the response or the 'HTTP/0.9 200 OK' string for HTTP/0.9 responses (i.e., responses that lack a status line) or an empty string if there are no headers."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["responseHeaders"]
+ }
+ }
+ ]
+ },
+ {
+ "name": "onBeforeRedirect",
+ "type": "function",
+ "nocompile": true,
+ "description": "Fired when a server-initiated redirect is about to occur.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
+ "fromCache": {"type": "boolean", "description": "Indicates if this response was fetched from disk cache."},
+ "statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
+ "redirectUrl": {"type": "string", "description": "The new URL."},
+ "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this redirect."},
+ "statusLine": {"type": "string", "description": "HTTP status line of the response or the 'HTTP/0.9 200 OK' string for HTTP/0.9 responses (i.e., responses that lack a status line) or an empty string if there are no headers."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["responseHeaders"]
+ }
+ }
+ ]
+ },
+ {
+ "name": "onCompleted",
+ "type": "function",
+ "nocompile": true,
+ "description": "Fired when a request is completed.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
+ "fromCache": {"type": "boolean", "description": "Indicates if this response was fetched from disk cache."},
+ "statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
+ "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."},
+ "statusLine": {"type": "string", "description": "HTTP status line of the response or the 'HTTP/0.9 200 OK' string for HTTP/0.9 responses (i.e., responses that lack a status line) or an empty string if there are no headers."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["responseHeaders"]
+ }
+ }
+ ]
+ },
+ {
+ "name": "onErrorOccurred",
+ "type": "function",
+ "description": "Fired when an error occurs.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "details",
+ "properties": {
+ "requestId": {"type": "string", "description": "The ID of the request. Request IDs are unique within a browser session. As a result, they could be used to relate different events of the same request."},
+ "url": {"type": "string"},
+ "method": {"type": "string", "description": "Standard HTTP method."},
+ "frameId": {"type": "integer", "description": "The value 0 indicates that the request happens in the main frame; a positive value indicates the ID of a subframe in which the request happens. If the document of a (sub-)frame is loaded (<code>type</code> is <code>main_frame</code> or <code>sub_frame</code>), <code>frameId</code> indicates the ID of this frame, not the ID of the outer frame. Frame IDs are unique within a tab."},
+ "parentFrameId": {"type": "integer", "description": "ID of frame that wraps the frame which sent the request. Set to -1 if no parent frame exists."},
+ "tabId": {"type": "integer", "description": "The ID of the tab in which the request takes place. Set to -1 if the request isn't related to a tab."},
+ "type": {"type": "string", "enum": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"], "description": "How the requested resource will be used."},
+ "timeStamp": {"type": "number", "description": "The time when this signal is triggered, in milliseconds since the epoch."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
+ "fromCache": {"type": "boolean", "description": "Indicates if this response was fetched from disk cache."},
+ "error": {"type": "string", "description": "The error description. This string is <em>not</em> guaranteed to remain backwards compatible between releases. You must not parse and act based upon its content."}
+ }
+ }
+ ],
+ "extraParameters": [
+ {
+ "$ref": "RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/web_request_internal.json b/chromium/chrome/common/extensions/api/web_request_internal.json
new file mode 100644
index 00000000000..4c56b5d1181
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/web_request_internal.json
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "webRequestInternal",
+ "description": "none",
+ "functions": [
+ {
+ "name": "addEventListener",
+ "type": "function",
+ "description": "Used internally to implement the special form of addListener for the webRequest events.",
+ "parameters": [
+ {"type": "function", "name": "callback"},
+ {
+ "$ref": "webRequest.RequestFilter",
+ "name": "filter",
+ "description": "A set of filters that restricts the events that will be sent to this listener."
+ },
+ {
+ "type": "array",
+ "optional": true,
+ "name": "extraInfoSpec",
+ "description": "Array of extra information that should be passed to the listener function.",
+ "items": {
+ "type": "string",
+ "enum": ["requestHeaders", "responseHeaders", "blocking", "asyncBlocking", "requestBody"]
+ }
+ },
+ {"type": "string", "name": "eventName"},
+ {"type": "string", "name": "subEventName"},
+ {"type": "integer", "name": "webViewInstanceId"}
+ ]
+ },
+ {
+ "name": "eventHandled",
+ "type": "function",
+ "description": "Used internally to send a response for a blocked event.",
+ "parameters": [
+ {"type": "string", "name": "eventName"},
+ {"type": "string", "name": "subEventName"},
+ {"type": "string", "name": "requestId"},
+ {
+ "$ref": "webRequest.BlockingResponse",
+ "optional": true,
+ "name": "response"
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/webstore.json b/chromium/chrome/common/extensions/api/webstore.json
new file mode 100644
index 00000000000..31cbd2d0123
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/webstore.json
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "webstore",
+ "description": "Use the <code>chrome.webstore</code> API to initiate app and extension installations \"inline\" from your site.",
+ "functions": [
+ {
+ "name": "install",
+ "allowAmbiguousOptionalArguments": true,
+ "parameters": [
+ {
+ "name": "url",
+ "type": "string",
+ "optional": true,
+ "description": "If you have more than one <code>&lt;link&gt;</code> tag on your page with the <code>chrome-webstore-item</code> relation, you can choose which item you'd like to install by passing in its URL here. If it is omitted, then the first (or only) link will be used. An exception will be thrown if the passed in URL does not exist on the page."
+ },
+ {
+ "name": "successCallback",
+ "type": "function",
+ "optional": true,
+ "parameters": [],
+ "description": "This function is invoked when inline installation successfully completes (after the dialog is shown and the user agrees to add the item to Chrome). You may wish to use this to hide the user interface element that prompted the user to install the app or extension."
+ },
+ {
+ "name": "failureCallback",
+ "type": "function",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "error",
+ "type": "string",
+ "description": "The failure detail. You may wish to inspect or log this for debugging purposes, but you should not rely on specific strings being passed back."
+ }
+ ],
+ "description": "This function is invoked when inline installation does not successfully complete. Possible reasons for this include the user canceling the dialog, the linked item not being found in the store, or the install being initiated from a non-verified site."
+ }
+ ]
+ } // install
+ ]
+ } // webstore
+]
diff --git a/chromium/chrome/common/extensions/api/webstore_private.json b/chromium/chrome/common/extensions/api/webstore_private.json
new file mode 100644
index 00000000000..f80ff335a23
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/webstore_private.json
@@ -0,0 +1,258 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace":"webstorePrivate",
+ "description": "none",
+ "functions": [
+ {
+ "name": "install",
+ "nocompile": true,
+ "description": "Installs the extension corresponding to the given id",
+ "parameters": [
+ {
+ "name": "expected_id",
+ "type": "string",
+ "description": "The id of the extension to install."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "installBundle",
+ "description": "Initiates the install process for the given bundle of extensions.",
+ "parameters": [
+ {
+ "name": "details",
+ "description": "An array of extension details to be installed.",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The id of the extension to be installed.",
+ "minLength": 32,
+ "maxLength": 32
+ },
+ "manifest": {
+ "type": "string",
+ "description": "A string with the contents of the extension's manifest.json file. During the install process, the browser will check that the downloaded extension's manifest matches what was passed in here.",
+ "minLength": 1
+ },
+ "localizedName": {
+ "type": "string",
+ "description": "A string to use instead of the raw value of the 'name' key from manifest.json."
+ }
+ }
+ }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the install process completes. Upon failures, chrome.runtime.lastError will be set to 'user_canceled' or 'unknown_error'.",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "beginInstallWithManifest3",
+ "description": "Initiates the install process for the given extension.",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The id of the extension to be installled.",
+ "minLength": 32,
+ "maxLength": 32
+ },
+ "manifest": {
+ "type": "string",
+ "description": "A string with the contents of the extension's manifest.json file. During the install process, the browser will check that the downloaded extension's manifest matches what was passed in here.",
+ "minLength": 1
+ },
+ "iconUrl": {
+ "type": "string",
+ "optional": true,
+ "desciption": "A URL for the image to display in the confirmation dialog"
+ },
+ "iconData": {
+ "type": "string",
+ "optional": true,
+ "description": "An icon as a base64-encoded image, displayed in a confirmation dialog."
+ },
+ "localizedName": {
+ "type": "string",
+ "optional": true,
+ "description": "A string to use instead of the raw value of the 'name' key from manifest.json."
+ },
+ "locale": {
+ "type": "string",
+ "optional": true,
+ "description": "The name of the locale used for generating localizedName. This should be the name of one of the directories in the _locales folder of the extension, or the default_locale setting from the manifest."
+ },
+ "appInstallBubble": {
+ "type": "boolean",
+ "optional": true,
+ "description": "A flag to change the UI we show when an app is installed - a value of true means to show a bubble pointing at the new tab button (instead of the default behavior of opening the new tab page and animating the app icon)."
+ },
+ "enableLauncher": {
+ "type": "boolean",
+ "optional": true,
+ "description": "A flag to cause the app launcher to be installed before installing the extension, if it isn't installed already."
+ }
+ },
+ "additionalProperties": { "type": "any" }
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when the user has either accepted/rejected the dialog, or some error occurred (such as invalid manifest or icon image data).",
+ "optional": "true",
+ "parameters": [
+ {
+ "name": "result",
+ "type": "string",
+ "description": "A string result code, which will be empty upon success. The possible values in the case of errors include 'unknown_error', 'user_cancelled', 'manifest_error', 'icon_error', 'invalid_id', 'permission_denied', 'invalid_icon_url', 'signin_failed', and 'already_installed'."
+ }
+ ]
+ }
+ ]
+
+ },
+ {
+ "name": "completeInstall",
+ "description": "",
+ "parameters": [
+ {
+ "name": "expected_id",
+ "type": "string",
+ "description": "The id of the extension to be installed. This should match a previous call to beginInstallWithManifest3."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "enableAppLauncher",
+ "description": "",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getBrowserLogin",
+ "description": "Returns the logged-in sync user login if there is one, or the empty string otherwise.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ {
+ "name": "info",
+ "type": "object",
+ "properties": {
+ "login": { "type": "string" }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getStoreLogin",
+ "description": "Returns the previous value set by setStoreLogin, or the empty string if there is none.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ { "name": "login", "type": "string" }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "setStoreLogin",
+ "description": "Sets a preference value with the store login.",
+ "parameters": [
+ { "name": "login", "type": "string" },
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "true",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "getWebGLStatus",
+ "description": "Invokes a callback that returns whether WebGL is blacklisted or not.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ {
+ "name": "webgl_status",
+ "type": "string",
+ "enum": ["webgl_allowed", "webgl_blocked"]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getIsLauncherEnabled",
+ "description": "Returns whether the apps launcher is enabled or not.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ { "name": "is_enabled", "type": "boolean" }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "isInIncognitoMode",
+ "description": "Returns whether the browser is in incognito mode or not.",
+ "parameters": [
+ {
+ "name": "callback",
+ "type": "function",
+ "optional": "false",
+ "parameters": [
+ { "name": "is_incognito", "type": "boolean" }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/webview.json b/chromium/chrome/common/extensions/api/webview.json
new file mode 100644
index 00000000000..fbb467ff145
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/webview.json
@@ -0,0 +1,271 @@
+// Copyright (c) 2013 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.
+
+[
+ {
+ "namespace": "webview",
+ "description": "none",
+ "types": [
+ {
+ "id": "DataTypeSet",
+ "type": "object",
+ "description": "A set of data types. Missing data types are interpreted as <code>false</code>.",
+ "properties": {
+ "appcache": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' appcaches."
+ },
+ "cookies": {
+ "type": "boolean",
+ "optional": true,
+ "description": "The browser's cookies."
+ },
+ "fileSystems": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' file systems."
+ },
+ "indexedDB": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' IndexedDB data."
+ },
+ "localStorage": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' local storage data."
+ },
+ "webSQL": {
+ "type": "boolean",
+ "optional": true,
+ "description": "Websites' WebSQL data."
+ }
+ }
+ },
+ {
+ "id": "RemovalOptions",
+ "type": "object",
+ "description": "Options that determine exactly what data will be removed.",
+ "properties": {
+ "since": {
+ "type": "number",
+ "optional": true,
+ "description": "Remove data accumulated on or after this date, represented in milliseconds since the epoch (accessible via the <code>getTime</code> method of the JavaScript <code>Date</code> object). If absent, defaults to 0 (which would remove all browsing data)."
+ }
+ }
+ }
+ ],
+ "functions": [
+ {
+ "name": "clearData",
+ "type": "function",
+ "description": "Clears various types of browsing data stored in a storage partition of a <webview>.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId",
+ "description": "The instance ID of the guest <webview> process."
+ },
+ {
+ "$ref": "RemovalOptions",
+ "name": "options"
+ },
+ {
+ "name": "dataToRemove",
+ "$ref": "DataTypeSet",
+ "description": "The set of data types to remove."
+ },
+ {
+ "name": "callback",
+ "type": "function",
+ "description": "Called when deletion has completed.",
+ "optional": true,
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "executeScript",
+ "type": "function",
+ "description": "Injects JavaScript code into a <webview> page.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId",
+ "description": "The instance ID of the guest <webview> process."
+ },
+ {
+ "$ref": "tabs.InjectDetails",
+ "name": "details",
+ "description": "Details of the script to run."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after all the JavaScript has been executed.",
+ "parameters": [
+ {
+ "name": "result",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "any", "minimum": 0},
+ "description": "The result of the script in every injected frame."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "insertCSS",
+ "type": "function",
+ "description": "Injects JavaScript code into a <webview> page.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId",
+ "description": "The instance ID of the guest <webview> process."
+ },
+ {
+ "$ref": "tabs.InjectDetails",
+ "name": "details",
+ "description": "Details of the script to run."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after all the JavaScript has been executed.",
+ "parameters": [
+ {
+ "name": "result",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "any", "minimum": 0},
+ "description": "The result of the script in every injected frame."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "captureVisibleRegion",
+ "type": "function",
+ "description": "Captures the visible area of the currently loaded page inside <webview>.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId",
+ "description": "The instance ID of the guest <webview> process."
+ },
+ {
+ "$ref": "types.ImageDetails",
+ "name": "options",
+ "optional": true
+ },
+ {
+ "type": "function", "name": "callback", "parameters": [
+ {"type": "string", "name": "dataUrl", "description": "A data URL which encodes an image of the visible area of the captured tab. May be assigned to the 'src' property of an HTML Image element for display."}
+ ]
+ }
+ ]
+ },
+ {
+ "name": "go",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ },
+ {
+ "type": "integer",
+ "name": "relativeIndex"
+ }
+ ]
+ },
+ {
+ "name": "overrideUserAgent",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ },
+ {
+ "type": "string",
+ "name": "userAgentOverride"
+ }
+ ]
+ },
+ {
+ "name": "reload",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ }
+ ]
+ },
+ {
+ "name": "setPermission",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ },
+ {
+ "type": "integer",
+ "name": "requestId"
+ },
+ {
+ "type": "string",
+ "name": "action",
+ "enum": ["allow", "deny", "default"]
+ },
+ {
+ "type": "string",
+ "name": "userInput",
+ "optional": true
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "allowed",
+ "type": "boolean"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "stop",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ }
+ ]
+ },
+ {
+ "name": "terminate",
+ "type": "function",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "instanceId"
+ }
+ ]
+ }
+ ]
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/webview_request.json b/chromium/chrome/common/extensions/api/webview_request.json
new file mode 100644
index 00000000000..966014265d6
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/webview_request.json
@@ -0,0 +1,10 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "webViewRequest",
+ "description": "Use the <code>chrome.webViewRequest</code> API to intercept, block, or modify requests in-flight. It is potentially faster than the <a href='webRequest.html'><code>chrome.webRequest</code> API</a> because you can register rules that are evaluated in the browser rather than the JavaScript engine with reduces roundtrip latencies and allows higher efficiency."
+ }
+]
diff --git a/chromium/chrome/common/extensions/api/webview_tag.json b/chromium/chrome/common/extensions/api/webview_tag.json
new file mode 100644
index 00000000000..cfbe2fe3a92
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/webview_tag.json
@@ -0,0 +1,678 @@
+// Copyright 2013 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.
+
+[
+ {
+ "namespace": "webviewTag",
+ "description": "Use the <code>webview</code> tag to actively load live content from the web over the network and embed it in your Chrome App. Your app can control the appearance of the <code>webview</code> and interact with the web content, initiate navigations in an embedded web page, react to error events that happen within it, and more (see <a href=\"#usage\">Usage</a>).",
+ "documentation_options": {
+ "title": "<webview> Tag",
+ "namespace": "<webview>"
+ },
+ "types": [
+ {
+ "id": "ClearDataOptions",
+ "type": "object",
+ "description": "Options that determine what data should be cleared by <code>clearData</code>.",
+ "properties": {
+ "since": {
+ "type": "number",
+ "optional": true,
+ "description": "Clear data accumulated on or after this date, represented in milliseconds since the epoch (accessible via the getTime method of the JavaScript <code>Date</code> object). If absent, defaults to <code>0</code> (which would remove all browsing data)."
+ }
+ }
+ },
+ {
+ "id": "ClearDataTypeSet",
+ "type": "object",
+ "description": "A set of data types. Missing properties are interpreted as <code>false</code>.",
+ "properties": {
+ "appcache": { "type": "boolean", "optional": true, "description": "Websites' appcaches." },
+ "cache": { "type": "boolean", "optional": true, "description": "The partition's cache. Note: This clears the entire cache regardless of the age passed to <code>clearData</code>." },
+ "cookies": { "type": "boolean", "optional": true, "description": "The partition's cookies." },
+ "downloads": { "type": "boolean", "optional": true, "description": "The partition's download list." },
+ "fileSystems": { "type": "boolean", "optional": true, "description": "Websites' filesystems." },
+ "formData": { "type": "boolean", "optional": true, "description": "The partition's stored form data." },
+ "history": { "type": "boolean", "optional": true, "description": "The partition's history." },
+ "indexedDB": { "type": "boolean", "optional": true, "description": "Websites' IndexedDB data." },
+ "localStorage": { "type": "boolean", "optional": true, "description": "Websites' local storage data." },
+ "serverBoundCertificates": { "type": "boolean", "optional": true, "description": "Server-bound certificates." },
+ "pluginData": { "type": "boolean", "optional": true, "description": "Plugins' data." },
+ "passwords": { "type": "boolean", "optional": true, "description": "Stored passwords." },
+ "webSQL": { "type": "boolean", "optional": true, "description": "Websites' WebSQL data." }
+ }
+ },
+ {
+ "id": "InjectDetails",
+ "type": "object",
+ "description": "Details of the script or CSS to inject. Either the code or the file property must be set, but both may not be set at the same time.",
+ "properties": {
+ "code": {
+ "type": "string",
+ "optional": true,
+ "description": "JavaScript or CSS code to inject."
+ },
+ "file": {
+ "type": "string",
+ "optional": true,
+ "description": "JavaScript or CSS file to inject."
+ }
+ }
+ },
+ {
+ "id": "ContentWindow",
+ "type": "object",
+ "description": "Messaging handle to a guest window.",
+ "functions": [
+ {
+ "name": "postMessage",
+ "description": "<p>Posts a message to the embedded web content as long as the embedded content is displaying a page from the target origin. This method is available once the page has completed loading. Listen for the <a href=\"#event-contentload\">contentload</a> event and then call the method.</p><p>The guest will be able to send replies to the embedder by posting message to <code>event.source</code> on the message event it receives.</p><p>This API is identical to the <a href=\"https://developer.mozilla.org/en-US/docs/DOM/window.postMessage\">HTML5 postMessage API</a> for communication between web pages. The embedder may listen for replies by adding a <code>message</code> event listener to its own frame.</p>",
+ "parameters": [
+ {
+ "type": "any",
+ "name": "message",
+ "description": "Message object to send to the guest."
+ },
+ {
+ "type": "string",
+ "name": "targetOrigin",
+ "description": "Specifies what the origin of the guest window must be for the event to be dispatched."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": "DialogController",
+ "type": "object",
+ "description": "Interface attached to <code>dialog</code> DOM events.",
+ "functions": [
+ {
+ "name": "ok",
+ "description": "Accept the dialog. Equivalent to clicking OK in an <code>alert</code>, <code>confirm</code>, or <code>prompt</code> dialog.",
+ "parameters": [
+ {
+ "type": "string",
+ "optional": true,
+ "name": "response",
+ "description": "The response string to provide to the guest when accepting a <code>prompt</code> dialog."
+ }
+ ]
+ },
+ {
+ "name": "cancel",
+ "description": "Reject the dialog. Equivalent to clicking Cancel in a <code>confirm</code> or <code>prompt</code> dialog."
+ }
+ ]
+ },
+ {
+ "id": "NewWindow",
+ "type": "object",
+ "description": "Interface attached to <code>newwindow</code> DOM events.",
+ "functions": [
+ {
+ "name": "attach",
+ "description": "Attach the requested target page to an existing <code>webview</code> element.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "webview",
+ "description": "The <code>webview</code> element to which the target page should be attached.",
+ "properties": {}
+ }
+ ]
+ },
+ {
+ "name": "discard",
+ "description": "Cancel the new window request."
+ }
+ ]
+ },
+ {
+ "id": "MediaPermissionRequest",
+ "type": "object",
+ "description": "The type of <code>request</code> object which accompanies a <code>media</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.",
+ "properties": {
+ "url": {
+ "description": "The URL of the frame requesting access to user media.",
+ "type": "string"
+ }
+ },
+ "functions": [
+ { "name": "allow", "description": "Allow the permission request." },
+ { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." }
+ ]
+ },
+ {
+ "id": "GeolocationPermissionRequest",
+ "type": "object",
+ "description": "The type of <code>request</code> object which accompanies a <code>geolocation</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.",
+ "properties": {
+ "url": {
+ "description": "The URL of the frame requesting access to geolocation data.",
+ "type": "string"
+ }
+ },
+ "functions": [
+ { "name": "allow", "description": "Allow the permission request." },
+ { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." }
+ ]
+ },
+ {
+ "id": "PointerLockPermissionRequest",
+ "type": "object",
+ "description": "The type of <code>request</code> object which accompanies a <code>pointerLock</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.",
+ "properties": {
+ "userGesture": {
+ "description": "Whether or not pointer lock was requested as a result of a user input gesture.",
+ "type": "boolean"
+ },
+ "lastUnlockedBySelf": {
+ "description": "Whether or not the requesting frame was the most recent client to hold pointer lock.",
+ "type": "boolean"
+ },
+ "url": {
+ "description": "The URL of the frame requesting pointer lock.",
+ "type": "string"
+ }
+ },
+ "functions": [
+ { "name": "allow", "description": "Allow the permission request." },
+ { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." }
+ ]
+ },
+ {
+ "id": "DownloadPermissionRequest",
+ "type": "object",
+ "description": "The type of <code>request</code> object which accompanies a <code>download</code> <a href=\"#event-permissionrequest\">permissionrequest</a></code> DOM event.",
+ "properties": {
+ "requestMethod": {
+ "description": "The HTTP request type (e.g. <code>GET</code>) associated with the download request.",
+ "type": "string"
+ },
+ "url": {
+ "description": "The requested download URL.",
+ "type": "string"
+ }
+ },
+ "functions": [
+ { "name": "allow", "description": "Allow the permission request." },
+ { "name": "deny", "description": "Deny the permission request. This is the default behavior if <code>allow</code> is not called." }
+ ]
+ },
+ {
+ "id": "LoadPluginPermissionRequest",
+ "type": "object",
+ "description": "The type of <code>request</code> object which accompanies a <code>loadplugin</code> <a href=\"#event-permissionrequest\">permissionrequest</a> DOM event.<p>",
+ "properties": {
+ "identifier": {
+ "description": "The plugin's identifier string.",
+ "type": "string"
+ },
+ "name": {
+ "description": "The plugin's display name.",
+ "type": "string"
+ }
+ },
+ "functions": [
+ { "name": "allow", "description": "Allow the permission request. This is the default behavior if <code>deny</code> is not called.." },
+ { "name": "deny", "description": "Deny the permission request." }
+ ]
+ },
+ {
+ "id": "WebRequestEventInteface",
+ "type": "object",
+ "description": "Interface which provides access to webRequest events on the guest page. See the <a href=\"http://developer.chrome.com/extensions/webRequest.html\">chrome.webRequest</a> extensions API for details on webRequest life cycle and related concepts.<p>To illustrate how usage differs from the extensions webRequest API, consider the following example code which blocks any guest requests for URLs which match <code>*://www.evil.com/*</code>:</p><pre>webview.request.onBeforeRequest.addListener(\r function(details) { return {cancel: true}; },\r {urls: [\"*://www.evil.com/*\"]},\r [\"blocking\"]);</pre><p>Additionally, this interface supports declarative webRequest rules through <code>onRequest</code> and <code>onMessage</code> events. See <a href=\"http://developer.chrome.com/extensions/declarativeWebRequest.html\">declarativeWebRequest</a> for API details.</p>Note that conditions and actions for declarative webview webRequests should be instantiated from their <code>chrome.webViewRequest.*</code> counterparts. The following example code declaratively blocks all requests to <code>\"example.com\"</code> on the webview <code>myWebview</code>:</p><pre>var rule = {\r conditions: [\r new chrome.webViewRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } })\r ],\r actions: [ new chrome.webViewRequest.CancelRequest() ]\r};\rmyWebview.request.onRequest.addRules([rule]);</pre>",
+ "properties": {}
+ }
+ ],
+ "functions": [
+ {
+ "name": "back",
+ "type": "function",
+ "description": "Navigates backward one history entry if possible. Equivalent to <code>go(-1)</code>."
+ },
+ {
+ "name": "canGoBack",
+ "type": "function",
+ "returns": { "type": "boolean" },
+ "description": "Indicates whether or not it is possible to navigate backward through history."
+ },
+ {
+ "name": "canGoForward",
+ "type": "function",
+ "returns": { "type": "boolean" },
+ "description": "Indicates whether or not it is possible to navigate forward through history."
+ },
+ {
+ "name": "clearData",
+ "type": "function",
+ "description": "<p>Clears browsing data for the <code>webview</code> partition.</p>",
+ "parameters": [
+ {
+ "name": "options",
+ "$ref": "ClearDataOptions",
+ "description": "Options determining exactly what data to clear."
+ },
+ {
+ "name": "types",
+ "$ref": "ClearDataTypeSet",
+ "description": "The types of data to be cleared."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after the data has been successfully cleared.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "executeScript",
+ "type": "function",
+ "description": "<p>Injects JavaScript code into the guest page.</p><p>The following sample code uses script injection to set the guest page's background color to red:</p><pre>webview.executeScript({ code: \"document.body.bgColor = 'red'\" });</pre>",
+ "parameters": [
+ {
+ "$ref": "InjectDetails",
+ "name": "details",
+ "description": "Details of the script to run."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after all the JavaScript has been executed.",
+ "parameters": [
+ {
+ "name": "result",
+ "optional": true,
+ "type": "array",
+ "items": {"type": "any", "minimum": 0},
+ "description": "The result of the script in every injected frame."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "forward",
+ "type": "function",
+ "description": "Navigates forward one history entry if possible. Equivalent to <code>go(1)</code>.",
+ "parameters": []
+ },
+ {
+ "name": "getProcessId",
+ "type": "function",
+ "returns": { "type": "integer" },
+ "description": "Returns Chrome's internal process ID for the guest web page's current process, allowing embedders to know how many guests would be affected by terminating the process. Two guests will share a process only if they belong to the same app and have the same <a href=\"#partition\">storage partition ID</a>. The call is synchronous and returns the embedder's cached notion of the current process ID. The process ID isn't the same as the operating system's process ID.",
+ "parameters": []
+ },
+ {
+ "name": "getUserAgent",
+ "type": "function",
+ "returns": { "type": "string" },
+ "description": "Returns the user agent string used by the webview for guest page requests.",
+ "parameters": []
+ },
+ {
+ "name": "go",
+ "type": "function",
+ "description": "Navigates to a history entry using a history index relative to the current navigation. If the requested navigation is impossible, this method has no effect.",
+ "parameters": [
+ {
+ "type": "integer",
+ "name": "relativeIndex",
+ "description": "Relative history index to which the webview should be navigated. For example, a value of <code>2</code> will navigate forward 2 history entries if possible; a value of <code>-3</code> will navigate backward 3 entries."
+ }
+ ]
+ },
+ {
+ "name": "insertCSS",
+ "type": "function",
+ "description": "Injects CSS into the guest page.",
+ "parameters": [
+ {
+ "$ref": "InjectDetails",
+ "name": "details",
+ "description": "Details of the CSS to insert."
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "description": "Called after the CSS has been inserted.",
+ "parameters": []
+ }
+ ]
+ },
+ {
+ "name": "isUserAgentOverridden",
+ "type": "function",
+ "description": "Indicates whether or not the webview's user agent string has been overridden by $ref:setUserAgentOverride"
+ },
+ {
+ "name": "reload",
+ "type": "function",
+ "description": "Reloads the current top-level page.",
+ "parameters": []
+ },
+ {
+ "name": "setUserAgentOverride",
+ "type": "function",
+ "description": "Override the user agent string used by the webview for guest page requests.",
+ "parameters": [
+ {
+ "name": "userAgent",
+ "type": "string",
+ "description": "The user agent string to use."
+ }
+ ]
+ },
+ {
+ "name": "stop",
+ "type": "function",
+ "description": "Stops loading the current &lt;webview> navigation if in progress.",
+ "parameters": []
+ },
+ {
+ "name": "terminate",
+ "type": "function",
+ "description": "Forcibly kills the guest web page's renderer process. This may affect multiple <code>webview</code> tags in the current app if they share the same process, but it will not affect <code>webview</code> tags in other apps.",
+ "parameters": []
+ }
+ ],
+ "events": [
+ {
+ "name": "close",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest window attempts to close itself.<p>The following example code navigates the webview to <code>about:blank</code> when the guest attempts to close itself.</p><pre>webview.addEventListener('close', function() {\r webview.src = 'about:blank';\r});</pre>",
+ "parameters": []
+ },
+ {
+ "name": "consolemessage",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest window logs a console message.<p>The following example code forwards all log messages to the embedder's console without regard for log level or other properties.</p><pre>webview.addEventListener('consolemessage', function(e) {\r console.log('Guest page logged a message: ', e.message);\r});</pre>",
+ "parameters": [
+ {
+ "name": "level",
+ "description": "The severity level of the log message. Ranges from 0 to 4.",
+ "type": "integer"
+ },
+ {
+ "name": "message",
+ "description": "The logged message contents.",
+ "type": "string"
+ },
+ {
+ "name": "line",
+ "description": "The line number of the message source.",
+ "type": "integer"
+ },
+ {
+ "name": "sourceId",
+ "description": "A string identifying the resource which logged the message.",
+ "type": "string"
+ }
+ ]
+ },
+ {
+ "name": "contentload",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest window fires a <code>load</code> event.<p>The following example code modifies the default font size of the guest's <code>body</code> element after the page loads:</p><pre>webview.addEventListener('contentload', function() {\r webview.executeScript({ code: 'document.body.style.fontSize = \"42px\"' });\r});</pre>",
+ "parameters": []
+ },
+ {
+ "name": "dialog",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest window attempts to open a modal dialog via <code>window.alert</code>, <code>window.confirm</code>, or <code>window.prompt</code>.<p>Handling this event will block the guest process until each event listener returns or the <code>dialog</code> object becomes unreachable (if <code>preventDefault()</code> was called.)</p><p>The default behavior is to cancel the dialog.</p>",
+ "parameters": [
+ {
+ "name": "messageType",
+ "type": "string",
+ "enum": ["alert", "confirm", "prompt"],
+ "description": "The type of modal dialog requested by the guest."
+ },
+ {
+ "name": "messageText",
+ "type": "string",
+ "description": "The text the guest attempted to display in the modal dialog."
+ },
+ {
+ "name": "dialog",
+ "$ref": "DialogController",
+ "description": "An interface that can be used to respond to the guest's modal request."
+ }
+ ]
+ },
+ {
+ "name": "exit",
+ "options": { "supportsDom": true },
+ "description": "Fired when the process rendering the guest web content has exited.<p>The following example code will show a farewell message whenever the guest page crashes:</p><pre>webview.addEventListener('exit', function(e) {\r if (e.reason === 'crash') {\r webview.src = 'data:text/plain,Goodbye, world!';\r }\r});</pre>",
+ "parameters": [
+ {
+ "name": "processID",
+ "description": "Chrome's interal ID of the process that exited.",
+ "type": "integer"
+ },
+ {
+ "name": "reason",
+ "description": "String indicating the reason for the exit.",
+ "type": "string",
+ "enum": ["normal", "abnormal", "crash", "kill"]
+ }
+ ]
+ },
+ {
+ "name": "loadabort",
+ "options": { "supportsDom": true },
+ "description": "Fired when a top-level load has aborted without committing.",
+ "parameters": [
+ {
+ "name": "url",
+ "description": "Requested URL.",
+ "type": "string"
+ },
+ {
+ "name": "isTopLevel",
+ "description": "Whether the load was top-level or in a subframe.",
+ "type": "boolean"
+ },
+ {
+ "name": "reason",
+ "description": "String indicating what type of abort occurred.",
+ "type": "string",
+ "enum": ["networkError", "download", "canceled", "sslError", "safeBrowsingError"]
+ }
+ ]
+ },
+ {
+ "name": "loadcommit",
+ "options": { "supportsDom": true },
+ "description": "Fired when a load has committed.",
+ "parameters": [
+ {
+ "name": "url",
+ "description": "The URL that committed.",
+ "type": "string"
+ },
+ {
+ "name": "isTopLevel",
+ "description": "Whether the load is top-level or in a subframe.",
+ "type": "boolean"
+ }
+ ]
+ },
+ {
+ "name": "loadredirect",
+ "options": { "supportsDom": true },
+ "description": "Fired when a top-level load request has redirected to a different URL.",
+ "parameters": [
+ {
+ "name": "oldUrl",
+ "description": "The requested URL before the redirect.",
+ "type": "string"
+ },
+ {
+ "name": "newUrl",
+ "description": "The new URL after the redirect.",
+ "type": "string"
+ },
+ {
+ "name": "isTopLevel",
+ "description": "Whether or not the redirect happened at top-level or in a subframe.",
+ "type": "boolean"
+ }
+ ]
+ },
+ {
+ "name": "loadstart",
+ "options": { "supportsDom": true },
+ "description": "Fired when a load has begun.",
+ "parameters": [
+ {
+ "name": "url",
+ "description": "Requested URL.",
+ "type": "string"
+ },
+ {
+ "name": "isTopLevel",
+ "description": "Whether the load is top-level or in a subframe.",
+ "type": "boolean"
+ }
+ ]
+ },
+ {
+ "name": "loadstop",
+ "options": { "supportsDom": true },
+ "description": "Fired when all loads in the guest page (including all subframes) have completed. Fires in addition to any related <code>loadcommit</code> or <code>loadabort</code> events, which occur per-frame.",
+ "parameters": []
+ },
+ {
+ "name": "newwindow",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest page attempts to open a new browser window.<p>The following example code will create and navigate a new <code>webview</code> in the embedder for each requested new window:</p><pre>webview.addEventListener('newwindow', function(e) {\r var newWebview = document.createElement('webview');\r document.body.appendChild(newWebview);\r e.window.attach(newWebview);\r});</pre>",
+ "parameters": [
+ {
+ "name": "window",
+ "description": "An interface that can be used to either attach the requested target page to an existing <code>webview</code> element or explicitly discard the request.",
+ "$ref": "NewWindow"
+ },
+ {
+ "name": "targetUrl",
+ "description": "The target URL requested for the new window.",
+ "type": "string"
+ },
+ {
+ "name": "initialWidth",
+ "description": "The initial width requested for the new window.",
+ "type": "number"
+ },
+ {
+ "name": "initialHeight",
+ "description": "The initial height requested for the new window.",
+ "type": "number"
+ },
+ {
+ "name": "name",
+ "description": "The requested name of the new window.",
+ "type": "string"
+ },
+ {
+ "name": "windowOpenDisposition",
+ "description": "The requested disposition of the new window.",
+ "type": "string",
+ "enum": ["ignore", "save_to_disk", "current_tab", "new_background_tab", "new_foreground_tab", "new_window", "new_popup"]
+ }
+ ]
+ },
+ {
+ "name": "permissionrequest",
+ "options": { "supportsDom": true },
+ "description": "Fired when the guest page needs to request special permission from the embedder.<p>The following example code will grant the guest page access to the <code>webkitGetUserMedia</code> API. Note that an app using this example code must itself specify <code>audioCapture</code> and/or <code>videoCapture</code> manifest permissions:</p><pre>webview.addEventListener('permissionrequest', function(e) {\r if (e.permission === 'media') {\r e.request.allow();\r }\r});</pre>",
+ "parameters": [
+ {
+ "name": "permission",
+ "description": "The type of permission being requested.",
+ "type": "string",
+ "enum": ["media", "geolocation", "pointerLock", "download", "loadplugin"]
+ },
+ {
+ "name": "requestId",
+ "description": "A number which uniquely identifies this request from the guest.",
+ "type": "integer"
+ },
+ {
+ "name": "request",
+ "type": "object",
+ "properties": {},
+ "description": "An object which holds details of the requested permission. Depending on the type of permission requested, this may be a $ref:MediaPermissionRequest, $ref:GeolocationPermissionRequest, $ref:PointerLockPermissionRequest, $ref:DownloadPermissionRequest, or $ref:LoadPluginPermissionRequest."
+ }
+ ]
+ },
+ {
+ "name": "responsive",
+ "options": { "supportsDom": true },
+ "description": "Fired when the process rendering the guest web content has become responsive again after being unresponsive.<p>The following example code will fade the <code>webview</code> element in or out as it becomes responsive or unresponsive:</p><pre>webview.style.webkitTransition = 'opacity 250ms';\rwebview.addEventListener('unresponsive', function() {\r webview.style.opacity = '0.5';\r});\rwebview.addEventListener('responsive', function() {\r webview.style.opacity = '1';\r});</pre>",
+ "parameters": [
+ {
+ "name": "processID",
+ "description": "Chrome's internal ID of the process that became responsive.",
+ "type": "integer"
+ }
+ ]
+ },
+ {
+ "name": "sizechanged",
+ "options": { "supportsDom": true },
+ "description": "Fired when the embedded web content has been resized. Only fires if <code>autosize</code> is enabled.",
+ "parameters": [
+ {
+ "name": "oldWidth",
+ "description": "Old width of embedded web content.",
+ "type": "number"
+ },
+ {
+ "name": "oldHeight",
+ "description": "Old height of embedded web content.",
+ "type": "number"
+ },
+ {
+ "name": "newWidth",
+ "description": "New width of embedded web content.",
+ "type": "number"
+ },
+ {
+ "name": "newHeight",
+ "description": "New height of embedded web content.",
+ "type": "number"
+ }
+ ]
+ },
+ {
+ "name": "unresponsive",
+ "options": { "supportsDom": true },
+ "description": "Fired when the process rendering the guest web content has become unresponsive. This event will be generated once with a matching responsive event if the guest begins to respond again.",
+ "parameters": [
+ {
+ "name": "processID",
+ "description": "Chrome's internal ID of the process that has become unresponsive.",
+ "type": "integer"
+ }
+ ]
+ }
+ ],
+ "properties": {
+ "contentWindow": {
+ "$ref": "ContentWindow",
+ "description": "Object reference which can be used to post messages into the guest page."
+ },
+ "request": {
+ "$ref": "WebRequestEventInteface",
+ "description": "Interface which provides access to webRequest events on the guest page."
+ }
+ }
+ }
+]
+
diff --git a/chromium/chrome/common/extensions/api/windows.json b/chromium/chrome/common/extensions/api/windows.json
new file mode 100644
index 00000000000..8ef02ac85b7
--- /dev/null
+++ b/chromium/chrome/common/extensions/api/windows.json
@@ -0,0 +1,277 @@
+// Copyright (c) 2012 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.
+
+[
+ {
+ "namespace": "windows",
+ "description": "Use the <code>chrome.windows</code> API to interact with browser windows. You can use this API to create, modify, and rearrange windows in the browser.",
+ "compiler_options": {
+ "implemented_in": "chrome/browser/extensions/api/tabs/tabs_api.h"
+ },
+ "types": [
+ {
+ "id": "Window",
+ "type": "object",
+ "properties": {
+ "id": {"type": "integer", "optional": true, "minimum": 0, "description": "The ID of the window. Window IDs are unique within a browser session. Under some circumstances a Window may not be assigned an ID, for example when querying windows using the $ref:sessions API, in which case a session ID may be present."},
+ "focused": {"type": "boolean", "description": "Whether the window is currently the focused window."},
+ "top": {"type": "integer", "optional": true, "description": "The offset of the window from the top edge of the screen in pixels. Under some circumstances a Window may not be assigned top property, for example when querying closed windows from the $ref:sessions API."},
+ "left": {"type": "integer", "optional": true, "description": "The offset of the window from the left edge of the screen in pixels. Under some circumstances a Window may not be assigned left property, for example when querying closed windows from the $ref:sessions API."},
+ "width": {"type": "integer", "optional": true, "description": "The width of the window, including the frame, in pixels. Under some circumstances a Window may not be assigned width property, for example when querying closed windows from the $ref:sessions API."},
+ "height": {"type": "integer", "optional": true, "description": "The height of the window, including the frame, in pixels. Under some circumstances a Window may not be assigned height property, for example when querying closed windows from the $ref:sessions API."},
+ "tabs": {"type": "array", "items": { "$ref": "tabs.Tab" }, "optional": true, "description": "Array of $ref:tabs.Tab objects representing the current tabs in the window."},
+ "incognito": {"type": "boolean", "description": "Whether the window is incognito."},
+ "type": {
+ "type": "string",
+ "optional": true,
+ "description": "The type of browser window this is. Under some circumstances a Window may not be assigned type property, for example when querying closed windows from the $ref:sessions API.",
+ "enum": ["normal", "popup", "panel", "app"]
+ },
+ "state": {
+ "type": "string",
+ "optional": true,
+ "description": "The state of this browser window. Under some circumstances a Window may not be assigned state property, for example when querying closed windows from the $ref:sessions API.",
+ "enum": ["normal", "minimized", "maximized", "fullscreen"]
+ },
+ "alwaysOnTop": {"type": "boolean", "description": "Whether the window is set to be always on top."},
+ "sessionId": {"type": "string", "optional": true, "description": "The session ID used to uniquely identify a Window obtained from the $ref:sessions API."}
+ }
+ }
+ ],
+ "properties": {
+ "WINDOW_ID_NONE": {
+ "value": -1,
+ "description": "The windowId value that represents the absence of a chrome browser window."
+ },
+ "WINDOW_ID_CURRENT": {
+ "value": -2,
+ "description": "The windowId value that represents the <a href='windows.html#current-window'>current window</a>."
+ }
+ },
+ "functions": [
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets details about a window.",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "minimum": -2},
+ {
+ "type": "object",
+ "name": "getInfo",
+ "optional": true,
+ "description": "",
+ "properties": {
+ "populate": {"type": "boolean", "optional": true, "description": "If true, the $ref:windows.Window object will have a <var>tabs</var> property that contains a list of the $ref:tabs.Tab objects. The <code>Tab</code> objects only contain the <code>url</code>, <code>title</code> and <code>favIconUrl</code> properties if the extension's manifest file includes the <code>\"tabs\"</code> permission." }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "window", "$ref": "Window"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getCurrent",
+ "type": "function",
+ "description": "Gets the <a href='#current-window'>current window</a>.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "getInfo",
+ "optional": true,
+ "description": "",
+ "properties": {
+ "populate": {"type": "boolean", "optional": true, "description": "If true, the $ref:windows.Window object will have a <var>tabs</var> property that contains a list of the $ref:tabs.Tab objects. The <code>Tab</code> objects only contain the <code>url</code>, <code>title</code> and <code>favIconUrl</code> properties if the extension's manifest file includes the <code>\"tabs\"</code> permission." }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "window", "$ref": "Window"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getLastFocused",
+ "type": "function",
+ "description": "Gets the window that was most recently focused &mdash; typically the window 'on top'.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "getInfo",
+ "optional": true,
+ "description": "",
+ "properties": {
+ "populate": {"type": "boolean", "optional": true, "description": "If true, the $ref:windows.Window object will have a <var>tabs</var> property that contains a list of the $ref:tabs.Tab objects. The <code>Tab</code> objects only contain the <code>url</code>, <code>title</code> and <code>favIconUrl</code> properties if the extension's manifest file includes the <code>\"tabs\"</code> permission." }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "window", "$ref": "Window"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "getAll",
+ "type": "function",
+ "description": "Gets all windows.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "getInfo",
+ "optional": true,
+ "description": "",
+ "properties": {
+ "populate": {"type": "boolean", "optional": true, "description": "If true, each $ref:windows.Window object will have a <var>tabs</var> property that contains a list of the $ref:tabs.Tab objects for that window. The <code>Tab</code> objects only contain the <code>url</code>, <code>title</code> and <code>favIconUrl</code> properties if the extension's manifest file includes the <code>\"tabs\"</code> permission." }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "windows", "type": "array", "items": { "$ref": "Window" }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "create",
+ "type": "function",
+ "description": "Creates (opens) a new browser with any optional sizing, position or default URL provided.",
+ "parameters": [
+ {
+ "type": "object",
+ "name": "createData",
+ "properties": {
+ "url": {
+ "description": "A URL or array of URLs to open as tabs in the window. Fully-qualified URLs must include a scheme (i.e. 'http://www.google.com', not 'www.google.com'). Relative URLs will be relative to the current page within the extension. Defaults to the New Tab Page.",
+ "optional": true,
+ "choices": [
+ {"type": "string"},
+ {"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 focused window. This value is ignored for panels."},
+ "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 focused window. This value is ignored for panels."},
+ "width": {"type": "integer", "minimum": 0, "optional": true, "description": "The width in pixels of the new window, including the frame. If not specified defaults to a natural width."},
+ "height": {"type": "integer", "minimum": 0, "optional": true, "description": "The height in pixels of the new window, including the frame. If not specified defaults to a natural height."},
+ "focused": {"type": "boolean", "optional": true, "description": "If true, opens an active window. If false, opens an inactive window."},
+ "incognito": {"type": "boolean", "optional": true, "description": "Whether the new window should be an incognito window."},
+ "type": {
+ "type": "string",
+ "optional": true,
+ "description": "Specifies what type of browser window to create. The 'panel' and 'detached_panel' types create a popup unless the '--enable-panels' flag is set.",
+ "enum": ["normal", "popup", "panel", "detached_panel"]
+ }
+ },
+ "optional": true
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "window", "$ref": "Window", "description": "Contains details about the created window.",
+ "optional": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "update",
+ "type": "function",
+ "description": "Updates the properties of a window. Specify only the properties that you want to change; unspecified properties will be left unchanged.",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "minimum": -2},
+ {
+ "type": "object",
+ "name": "updateInfo",
+ "properties": {
+ "left": {"type": "integer", "optional": true, "description": "The offset from the left edge of the screen to move the window to in pixels. This value is ignored for panels."},
+ "top": {"type": "integer", "optional": true, "description": "The offset from the top edge of the screen to move the window to in pixels. This value is ignored for panels."},
+ "width": {"type": "integer", "minimum": 0, "optional": true, "description": "The width to resize the window to in pixels. This value is ignored for panels."},
+ "height": {"type": "integer", "minimum": 0, "optional": true, "description": "The height to resize the window to in pixels. This value is ignored for panels."},
+ "focused": {"type": "boolean", "optional": true, "description": "If true, brings the window to the front. If false, brings the next window in the z-order to the front."},
+ "drawAttention": {"type": "boolean", "optional": true, "description": "If true, causes the window to be displayed in a manner that draws the user's attention to the window, without changing the focused window. The effect lasts until the user changes focus to the window. This option has no effect if the window already has focus. Set to false to cancel a previous draw attention request."},
+ "state": {
+ "type": "string",
+ "optional": true,
+ "description": "The new state of the window. The 'minimized', 'maximized' and 'fullscreen' states cannot be combined with 'left', 'top', 'width' or 'height'.",
+ "enum": ["normal", "minimized", "maximized", "fullscreen"]
+ }
+ }
+ },
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "window", "$ref": "Window"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "remove",
+ "type": "function",
+ "description": "Removes (closes) a window, and all the tabs inside it.",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "minimum": 0},
+ {"type": "function", "name": "callback", "optional": true, "parameters": []}
+ ]
+ }
+ ],
+ "events": [
+ {
+ "name": "onCreated",
+ "type": "function",
+ "description": "Fired when a window is created.",
+ "parameters": [
+ {
+ "$ref": "Window",
+ "name": "window",
+ "description": "Details of the window that was created."
+ }
+ ]
+ },
+ {
+ "name": "onRemoved",
+ "type": "function",
+ "description": "Fired when a window is removed (closed).",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "minimum": 0, "description": "ID of the removed window."}
+ ]
+ },
+ {
+ "name": "onFocusChanged",
+ "type": "function",
+ "description": "Fired when the currently focused window changes. Will be chrome.windows.WINDOW_ID_NONE if all chrome windows have lost focus. Note: On some Linux window managers, WINDOW_ID_NONE will always be sent immediately preceding a switch from one chrome window to another.",
+ "parameters": [
+ {"type": "integer", "name": "windowId", "minimum": -1, "description": "ID of the newly focused window."}
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json
new file mode 100644
index 00000000000..2135c3cbf6b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "My Bookmarks",
+ "version": "1.1",
+ "description": "A browser action with a popup dump of all bookmarks, including search, add, edit and delete.",
+ "permissions": [
+ "bookmarks"
+ ],
+ "browser_action": {
+ "default_title": "My Bookmarks",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2,
+ "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/browserAction/make_page_red/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/browserAction/make_page_red/manifest.json
new file mode 100644
index 00000000000..b901108730c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/browserAction/make_page_red/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name": "Page Redder",
+ "description": "Make the current page red",
+ "version": "2.0",
+ "permissions": [
+ "activeTab"
+ ],
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "browser_action": {
+ "default_title": "Make this page red"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/browserAction/print/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/browserAction/print/manifest.json
new file mode 100644
index 00000000000..c4ea105ab79
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/browserAction/print/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name": "Print this page",
+ "description": "Adds a print button to the browser.",
+ "version": "1.1",
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "permissions": [
+ "tabs", "http://*/*", "https://*/*"
+ ],
+ "browser_action": {
+ "default_title": "Print this page",
+ "default_icon": "print_16x16.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_icon_path/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_icon_path/manifest.json
new file mode 100644
index 00000000000..3274c344a29
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_icon_path/manifest.json
@@ -0,0 +1,10 @@
+{
+ "name": "A browser action which changes its icon when clicked",
+ "description": "Change browser action color when its icon is clicked",
+ "version": "1.2",
+ "background": { "scripts": ["background.js"] },
+ "browser_action": {
+ "name": "Click to change the icon's color"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_page_color/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_page_color/manifest.json
new file mode 100644
index 00000000000..48f551d9bf5
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/browserAction/set_page_color/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "A browser action with a popup that changes the page color",
+ "description": "Change the current page color",
+ "version": "1.0",
+ "permissions": [
+ "tabs", "http://*/*", "https://*/*"
+ ],
+ "browser_action": {
+ "default_title": "Set this page's color.",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/browsingData/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/browsingData/basic/manifest.json
new file mode 100644
index 00000000000..d2287292ddf
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/browsingData/basic/manifest.json
@@ -0,0 +1,13 @@
+{
+ "name" : "BrowsingData API: Basics",
+ "version" : "1.1",
+ "description" : "A trivial usage example.",
+ "permissions": [
+ "browsingData"
+ ],
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/commands/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/commands/manifest.json
new file mode 100644
index 00000000000..1d13778a908
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/commands/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Sample Extension Commands extension",
+ "description": "Press Ctrl+Shift+F (Command+Shift+F on a Mac) to open the browser action popup, press Ctrl+Shift+Y to send an event (Command+Shift+Y on a Mac).",
+ "version": "1.0",
+ "manifest_version": 2,
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "browser_action": {
+ "default_popup": "browser_action.html"
+ },
+ "commands": {
+ "toggle-feature": {
+ "suggested_key": { "default": "Ctrl+Shift+Y" },
+ "description": "Send a 'toggle-feature' event to the extension"
+ },
+ "_execute_browser_action": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+F",
+ "mac": "MacCtrl+Shift+F"
+ }
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/contentSettings/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/contentSettings/manifest.json
new file mode 100644
index 00000000000..adf1daefb52
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/contentSettings/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name" : "Content settings",
+ "version" : "0.2",
+ "description" : "Shows the content settings for the current site.",
+ "permissions": [ "contentSettings", "tabs" ],
+ "browser_action": {
+ "default_icon": "contentSettings.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/contextMenus/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/contextMenus/basic/manifest.json
new file mode 100644
index 00000000000..c59cec18d17
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/contextMenus/basic/manifest.json
@@ -0,0 +1,10 @@
+{
+ "name": "Context Menus Sample",
+ "description": "Shows some of the features of the Context Menus API",
+ "version": "0.6",
+ "permissions": ["contextMenus"],
+ "background": {
+ "scripts": ["sample.js"]
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/contextMenus/event_page/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/contextMenus/event_page/manifest.json
new file mode 100644
index 00000000000..8279823db8d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/contextMenus/event_page/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name": "Context Menus Sample (with Event Page)",
+ "description": "Shows some of the features of the Context Menus API using an event page",
+ "version": "0.7",
+ "permissions": ["contextMenus"],
+ "background": {
+ "persistent": false,
+ "scripts": ["sample.js"]
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/cookies/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/cookies/manifest.json
new file mode 100644
index 00000000000..eb7da26d259
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/cookies/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name" : "Cookie API Test Extension",
+ "version" : "0.8",
+ "description" : "Testing Cookie API",
+ "permissions": [ "cookies", "tabs", "http://*/*", "https://*/*" ],
+ "icons": { "16": "cookie.png", "48": "cookie.png", "128": "cookie.png" },
+ "browser_action": {
+ "default_icon": "cookie.png"
+ },
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/debugger/live-headers/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/debugger/live-headers/manifest.json
new file mode 100644
index 00000000000..19b6554da4b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/debugger/live-headers/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "Live HTTP headers",
+ "description": "Displays the live log with the http requests headers",
+ "version": "0.7",
+ "permissions": [
+ "debugger"
+ ],
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_title": "Live HTTP headers"
+ },
+ "manifest_version": 2
+}
+
diff --git a/chromium/chrome/common/extensions/docs/examples/api/debugger/pause-resume/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/debugger/pause-resume/manifest.json
new file mode 100644
index 00000000000..fdc7e3d6475
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/debugger/pause-resume/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name": "JavaScript pause/resume",
+ "description": "Pauses / resumes JavaScript execution",
+ "version": "0.7",
+ "permissions": [
+ "debugger"
+ ],
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_icon": "debuggerPause.png",
+ "default_title": "Pause JavaScript"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/desktopCapture/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/desktopCapture/manifest.json
new file mode 100644
index 00000000000..2865eddc0e9
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/desktopCapture/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "Desktop Capture Example",
+ "description": "Show desktop media picker UI",
+ "version": "1",
+ "manifest_version": 2,
+ "icons": {
+ "16": "icon.png",
+ "128": "icon.png"
+ },
+ "app": {
+ "background": {
+ "scripts": ["background.js"]
+ }
+ },
+ "permissions": [
+ "desktopCapture"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json
new file mode 100644
index 00000000000..4d376d84c52
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "My Devices",
+ "version": "1.1",
+ "description": "A browser action with a popup dump of all devices signed into the same account as the current profile.",
+ "permissions": [
+ "signedInDevices"
+ ],
+ "browser_action": {
+ "default_title": "My Devices",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2,
+ "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/devtools/audits/broken-links/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/devtools/audits/broken-links/manifest.json
new file mode 100644
index 00000000000..ee3b5b7d45d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/devtools/audits/broken-links/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name": "Broken Links",
+ "version": "1.1",
+ "description": "Extends the Developer Tools, adding an audit category that finds broken links on the inspected page.",
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "devtools_page": "devtools.html",
+ "permissions": [
+ "experimental",
+ "tabs",
+ "http://*/*",
+ "https://*/*"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/devtools/inspectedWindow/chrome-preprocessor/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/devtools/inspectedWindow/chrome-preprocessor/manifest.json
new file mode 100644
index 00000000000..c07462521d6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/devtools/inspectedWindow/chrome-preprocessor/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "Chrome Preprocessor Example",
+ "version": "0.1",
+ "description": "Simple hello-world example for chrome.devtools.inspectedWindow.reload() using preprocessor.",
+ "devtools_page": "chrome-preprocessor.html",
+ "manifest_version": 2,
+ "content_security_policy": "default-src 'self' chrome-extension-resource: ; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-eval'; connect-src *; frame-src *;",
+ "web_accessible_resources":
+ [
+ "*"
+ ]
+} \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/docs/examples/api/devtools/network/chrome-firephp/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/devtools/network/chrome-firephp/manifest.json
new file mode 100644
index 00000000000..275dced7431
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/devtools/network/chrome-firephp/manifest.json
@@ -0,0 +1,13 @@
+{
+ "name": "FirePHP for Chrome",
+ "version": "1.1",
+ "minimum_chrome_version": "10.0",
+ "description": "Extends the Developer Tools, adding support for parsing FirePHP messages from server",
+ "devtools_page": "devtools.html",
+ "background": { "scripts": ["background.js"] },
+ "permissions": [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/devtools/panels/chrome-query/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/devtools/panels/chrome-query/manifest.json
new file mode 100644
index 00000000000..a60485d7fbf
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/devtools/panels/chrome-query/manifest.json
@@ -0,0 +1,7 @@
+{
+ "name": "Chrome Query",
+ "version": "1.1",
+ "description": "Extends the Developer Tools, adding a sidebar that displays the jQuery data associated with the selected DOM element.",
+ "devtools_page": "devtools.html",
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/manifest.json
new file mode 100644
index 00000000000..dd3fea25537
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/manifest.json
@@ -0,0 +1,8 @@
+{"name": "Download Filename Controller",
+ "description": "Download Filename Controller",
+ "version": "0.1",
+ "background": {"scripts": ["bg.js"], "persistent": false},
+ "options_page": "options.html",
+ "permissions": ["downloads"],
+ "content_security_policy": "script-src 'self' chrome-extension-resource: 'unsafe-eval'; default-src 'self'",
+ "manifest_version": 2}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_links/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_links/manifest.json
new file mode 100644
index 00000000000..f252f0decc0
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_links/manifest.json
@@ -0,0 +1,9 @@
+{
+ "name": "Download Selected Links",
+ "description": "Select links on a page and download them.",
+ "version": "0.1",
+ "minimum_chrome_version": "16.0.884",
+ "permissions": ["downloads", "<all_urls>"],
+ "browser_action": {"default_popup": "popup.html"},
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/_locales/en/messages.json
new file mode 100644
index 00000000000..83d05e7bf55
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/_locales/en/messages.json
@@ -0,0 +1,290 @@
+{"extName": {
+ "message": "Download Manager Button",
+ "description": "Extension name"},
+ "extDesc": {
+ "message": "Browser Action Download Manager User Interface for Google Chrome",
+ "description": "Extension description"},
+ "badChromeVersion": {
+ "message": "The downloads API is only available on the canary, dev, and beta channels.",
+ "description": ""},
+ "tabTitle": {
+ "message": "Downloads",
+ "description": "tab title"},
+ "searchPlaceholder": {
+ "message": "Search Downloads",
+ "description": ""},
+ "clearAllTitle": {
+ "message": "Erase All Visible Downloads",
+ "description": ""},
+ "openDownloadsFolderTitle": {
+ "message": "Open Downloads Folder",
+ "description": ""},
+ "zeroItems": {
+ "message": "There are zero download items.",
+ "description": ""},
+ "searching": {
+ "message": "Teleporting lots of goats...",
+ "description": ""},
+ "zeroSearchResults": {
+ "message": "Zero matches",
+ "description": ""},
+ "managementPermissionInfo": {
+ "message": "Some files were downloaded by an extension.",
+ "description": ""},
+ "grantManagementPermission": {
+ "message": "Show links to extensions that download files.",
+ "description": ""},
+ "showOlderDownloads": {
+ "message": "Show Older Downloads",
+ "description": ""},
+ "loadingOlderDownloads": {
+ "message": "Loading Older Downloads...",
+ "description": ""},
+ "openTitle": {
+ "message": "Open",
+ "description": ""},
+ "pauseTitle": {
+ "message": "Pause",
+ "description": ""},
+ "resumeTitle": {
+ "message": "Resume",
+ "description": ""},
+ "cancelTitle": {
+ "message": "Cancel",
+ "description": ""},
+ "removeFileTitle": {
+ "message": "Remove file",
+ "description": ""},
+ "eraseTitle": {
+ "message": "Erase",
+ "description": ""},
+ "retryTitle": {
+ "message": "Retry",
+ "description": ""},
+ "referrerTitle": {
+ "message": "Referrer",
+ "description": ""},
+ "month0abbr": {"message": "Jan","description": ""},
+ "month1abbr": {"message": "Feb","description": ""},
+ "month2abbr": {"message": "Mar","description": ""},
+ "month3abbr": {"message": "Apr","description": ""},
+ "month4abbr": {"message": "May","description": ""},
+ "month5abbr": {"message": "Jun","description": ""},
+ "month6abbr": {"message": "Jul","description": ""},
+ "month7abbr": {"message": "Aug","description": ""},
+ "month8abbr": {"message": "Sep","description": ""},
+ "month9abbr": {"message": "Oct","description": ""},
+ "month10abbr": {"message": "Nov","description": ""},
+ "month11abbr": {"message": "Dec","description": ""},
+ "openWhenCompleteFinishing": {
+ "message": "Opening in just a moment",
+ "description": ""},
+ "timeLeftFinishing": {
+ "message": "finishing...",
+ "description": ""},
+ "openWhenCompleteDays": {
+ "message": "Opening in $days$d $hours$h",
+ "description": "",
+ "placeholders": {
+ "days": {
+ "content": "$1",
+ "example": "2"},
+ "hours": {
+ "content": "$2",
+ "example": "23"}}},
+ "timeLeftDays": {
+ "message": "$days$d $hours$h left",
+ "description": "",
+ "placeholders": {
+ "days": {
+ "content": "$1",
+ "example": "2"},
+ "hours": {
+ "content": "$2",
+ "example": "23"}}},
+ "openWhenCompleteHours": {
+ "message": "Opening in $hours$h $mins$m",
+ "description": "",
+ "placeholders": {
+ "hours": {
+ "content": "$1",
+ "example": "23"},
+ "mins": {
+ "content": "$2",
+ "example": "59"}}},
+ "timeLeftHours": {
+ "message": "$hours$h $mins$m left",
+ "description": "",
+ "placeholders": {
+ "hours": {
+ "content": "$1",
+ "example": "23"},
+ "mins": {
+ "content": "$2",
+ "example": "59"}}},
+ "openWhenCompleteMinutes": {
+ "message": "Opening in $mins$m $sec$s",
+ "description": "",
+ "placeholders": {
+ "mins": {
+ "content": "$1",
+ "example": "59"},
+ "sec": {
+ "content": "$2",
+ "example": "59"}}},
+ "timeLeftMinutes": {
+ "message": "$mins$m $sec$s left",
+ "description": "",
+ "placeholders": {
+ "mins": {
+ "content": "$1",
+ "example": "59"},
+ "sec": {
+ "content": "$2",
+ "example": "59"}}},
+ "openWhenCompleteSeconds": {
+ "message": "Opening in $sec$s",
+ "description": "",
+ "placeholders": {
+ "sec": {
+ "content": "$1",
+ "example": "59"}}},
+ "timeLeftSeconds": {
+ "message": "$sec$s left",
+ "description": "",
+ "placeholders": {
+ "sec": {
+ "content": "$1",
+ "example": "59"}}},
+ "error_FILE_FAILED": {
+ "message": "File Failed",
+ "description": ""},
+ "error_FILE_ACCESS_DENIED": {
+ "message": "File-System Access Denied",
+ "description": ""},
+ "error_FILE_NO_SPACE": {
+ "message": "No Space On Disk",
+ "description": ""},
+ "error_FILE_NAME_TOO_LONG": {
+ "message": "Filename Too Long",
+ "description": ""},
+ "error_FILE_TOO_LARGE": {
+ "message": "File Too Large",
+ "description": ""},
+ "error_FILE_VIRUS_INFECTED": {
+ "message": "Virus Infected",
+ "description": ""},
+ "error_FILE_TRANSIENT_ERROR": {
+ "message": "Transient File-System Error",
+ "description": ""},
+ "error_FILE_BLOCKED": {
+ "message": "File Blocked",
+ "description": ""},
+ "error_FILE_SECURITY_CHECK_FAILED": {
+ "message": "Security Check Failed",
+ "description": ""},
+ "error_FILE_TOO_SHORT": {
+ "message": "File Too Short",
+ "description": ""},
+ "error_NETWORK_FAILED": {
+ "message": "Network Failure",
+ "description": ""},
+ "error_NETWORK_TIMEOUT": {
+ "message": "Network Timeout",
+ "description": ""},
+ "error_NETWORK_DISCONNECTED": {
+ "message": "Network Disconnected",
+ "description": ""},
+ "error_NETWORK_SERVER_DOWN": {
+ "message": "Server Down",
+ "description": ""},
+ "error_SERVER_FAILED": {
+ "message": "Server Failure",
+ "description": ""},
+ "error_SERVER_NO_RANGE": {
+ "message": "Server No Range",
+ "description": ""},
+ "error_SERVER_PRECONDITION": {
+ "message": "Server Precondition Failure",
+ "description": ""},
+ "error_SERVER_BAD_CONTENT": {
+ "message": "Bad Content",
+ "description": ""},
+ "error_USER_CANCELED": {
+ "message": "Cancelled",
+ "description": ""},
+ "error_USER_SHUTDOWN": {
+ "message": "Cancelled",
+ "description": ""},
+ "error_CRASH": {
+ "message": "Crash",
+ "description": ""},
+ "error_1": {
+ "message": "File Failed",
+ "description": ""},
+ "error_2": {
+ "message": "File-System Access Denied",
+ "description": ""},
+ "error_3": {
+ "message": "No Space On Disk",
+ "description": ""},
+ "error_5": {
+ "message": "Filename Too Long",
+ "description": ""},
+ "error_6": {
+ "message": "File Too Large",
+ "description": ""},
+ "error_7": {
+ "message": "Virus Infected",
+ "description": ""},
+ "error_10": {
+ "message": "Transient File-System Error",
+ "description": ""},
+ "error_11": {
+ "message": "File Blocked",
+ "description": ""},
+ "error_12": {
+ "message": "Security Check Failed",
+ "description": ""},
+ "error_13": {
+ "message": "File Too Short",
+ "description": ""},
+ "error_20": {
+ "message": "Network Failure",
+ "description": ""},
+ "error_21": {
+ "message": "Network Timeout",
+ "description": ""},
+ "error_22": {
+ "message": "Network Disconnected",
+ "description": ""},
+ "error_23": {
+ "message": "Server Down",
+ "description": ""},
+ "error_30": {
+ "message": "Server Failure",
+ "description": ""},
+ "error_31": {
+ "message": "Server No Range",
+ "description": ""},
+ "error_32": {
+ "message": "Server Precondition Failure",
+ "description": ""},
+ "error_33": {
+ "message": "Bad Content",
+ "description": ""},
+ "error_40": {
+ "message": "Cancelled",
+ "description": ""},
+ "error_41": {
+ "message": "Cancelled",
+ "description": ""},
+ "error_50": {
+ "message": "Crash",
+ "description": ""},
+ "errorRemoved": {
+ "message": "Removed",
+ "description": ""},
+ "showInFolderTitle": {
+ "message": "Show in Folder",
+ "description": "Alt text for show in folder icon"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/manifest.json
new file mode 100644
index 00000000000..156e69c124f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_manager/manifest.json
@@ -0,0 +1,15 @@
+{"name": "__MSG_extName__",
+ "version": "0.3",
+ "manifest_version": 2,
+ "description": "__MSG_extDesc__",
+ "icons": {"128": "icon128.png"},
+ "browser_action": {
+ "default_icon": {
+ "19": "icon19.png",
+ "38": "icon38.png"},
+ "default_title": "__MSG_extName__",
+ "default_popup": "popup.html"},
+ "background": {"persistent": false, "scripts": ["background.js"]},
+ "default_locale": "en",
+ "optional_permissions": ["management"],
+ "permissions": ["downloads", "downloads.open", "downloads.shelf"]}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/_locales/en/messages.json
new file mode 100644
index 00000000000..eae1fbe9a55
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/_locales/en/messages.json
@@ -0,0 +1,9 @@
+{"extName": {
+ "message": "Download and Open Button",
+ "description": "Extension name"},
+ "extDesc": {
+ "message": "Download and Open Context Menu Button",
+ "description": "Extension description"},
+ "openContextMenuTitle": {
+ "message": "Download and Open",
+ "description": "context menu button text"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/manifest.json
new file mode 100644
index 00000000000..98a49ab74e4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/download_open/manifest.json
@@ -0,0 +1,8 @@
+{"name": "__MSG_extName__",
+ "version": "0.1",
+ "manifest_version": 2,
+ "description": "__MSG_extDesc__",
+ "icons": {"16": "icon16.png", "128": "icon128.png"},
+ "background": {"persistent": false, "scripts": ["background.js"]},
+ "default_locale": "en",
+ "permissions": ["contextMenus", "downloads", "downloads.open"]}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/downloads/downloads_overwrite/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/downloads/downloads_overwrite/manifest.json
new file mode 100644
index 00000000000..c1f8999dd8d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/downloads/downloads_overwrite/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "Downloads Overwrite Existing Files",
+ "description": "All downloads overwrite existing files instead of adding ' (1)', ' (2)', etc.",
+ "version": "1",
+ "minimum_chrome_version": "26.0.1428",
+ "background": {
+ "scripts": ["bg.js"],
+ "persistent": false
+ },
+ "permissions": [
+ "downloads"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/eventPage/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/eventPage/basic/manifest.json
new file mode 100644
index 00000000000..7a6e1f43d87
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/eventPage/basic/manifest.json
@@ -0,0 +1,24 @@
+{
+ "name": "Event Page Example",
+ "description": "Demonstrates usage and features of the event page",
+ "version": "1.0",
+ "manifest_version": 2,
+ "permissions": ["alarms", "tabs", "bookmarks", "declarativeWebRequest", "*://*/*"],
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "browser_action": {
+ "default_icon" : "icon.png",
+ "default_title": "Start Event Page"
+ },
+ "commands": {
+ "open-google": {
+ "description": "Open a tab to google.com",
+ "suggested_key": { "default": "Ctrl+Shift+L" }
+ },
+ "_execute_browser_action": {
+ "suggested_key": { "default": "Ctrl+Shift+K" }
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/extension/isAllowedAccess/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/extension/isAllowedAccess/manifest.json
new file mode 100644
index 00000000000..66241fc37bf
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/extension/isAllowedAccess/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name" : "`extension.isAllowedFileSchemeAccess` and `extension.isAllowedIncognitoAccess` Example",
+ "version" : "1.0.0",
+ "description" : "Demonstrates the `extension.isAllowedFileSchemeAccess` and `extesion.isAllowedIncognitoAccess` APIs",
+ "permissions" : [ "file://*" ],
+ "browser_action" : {
+ "default_popup": "popup.html",
+ "default_icon" : "sample-19.png"
+ },
+ "icons" : {
+ "16" : "sample-16.png",
+ "48" : "sample-48.png",
+ "128" : "sample-128.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/fontSettings/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/fontSettings/manifest.json
new file mode 100644
index 00000000000..edb7559c809
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/fontSettings/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "Advanced Font Settings",
+ "version": "0.66",
+ "manifest_version": 2,
+ "description": "Customize per-script font settings.",
+ "options_page": "options.html",
+ "icons": {
+ "16": "fonts16.png",
+ "128": "fonts128.png"
+ },
+ "permissions": ["fontSettings"]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/history/showHistory/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/history/showHistory/manifest.json
new file mode 100644
index 00000000000..b4aa6ffe3bf
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/history/showHistory/manifest.json
@@ -0,0 +1,13 @@
+{
+ "name": "Typed URL History",
+ "version": "1.2",
+ "description": "Reads your history, and shows the top ten pages you go to by typing the URL.",
+ "permissions": [
+ "history"
+ ],
+ "browser_action": {
+ "default_popup": "typedUrls.html",
+ "default_icon": "clock.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/cld/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/cld/manifest.json
new file mode 100644
index 00000000000..4b242cf319f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/cld/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "CLD",
+ "description": "Displays the language of a tab",
+ "version": "0.3",
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_name": "Page Language"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/en_US/messages.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/en_US/messages.json
new file mode 100644
index 00000000000..b33d2f0a2c1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/en_US/messages.json
@@ -0,0 +1,27 @@
+{
+ "chrome_extension_name": {
+ "message": "AcceptLanguage"
+ },
+ "chrome_extension_description": {
+ "message": "Returns accept languages of the browser"
+ },
+ "click_here": {
+ "message": "Left click to list acceptLanguages."
+ },
+ "browser_action_title": {
+ "message": "Click Me"
+ },
+ "chrome_accept_languages": {
+ "message": "$CHROME$ accepts $languages$ languages",
+ "placeholders": {
+ "chrome": {
+ "content": "Chrome",
+ "example": "Chrome"
+ },
+ "languages": {
+ "content": "$1",
+ "example": "en-US,sr,de"
+ }
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/es/messages.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/es/messages.json
new file mode 100644
index 00000000000..0e1a7ef43e0
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/es/messages.json
@@ -0,0 +1,27 @@
+{
+ "chrome_extension_name": {
+ "message": "AcceptLanguage"
+ },
+ "chrome_extension_description": {
+ "message": "Devuelve los idiomas aceptados por el navegador"
+ },
+ "click_here": {
+ "message": "Click con botón izquierdo para mostrar la lista de acceptLanguages."
+ },
+ "browser_action_title": {
+ "message": "Haz click aquí"
+ },
+ "chrome_accept_languages": {
+ "message": "$CHROME$ acepta los idiomas $languages$",
+ "placeholders": {
+ "chrome": {
+ "content": "Chrome",
+ "example": "Chrome"
+ },
+ "languages": {
+ "content": "$1",
+ "example": "en-US,sr,de"
+ }
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/sr/messages.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/sr/messages.json
new file mode 100644
index 00000000000..30bd958eedd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/_locales/sr/messages.json
@@ -0,0 +1,24 @@
+{
+ "chrome_extension_name": {
+ "message": "Прихватљиви језици"
+ },
+ "chrome_extension_description": {
+ "message": "Језици које прегледач прихвата"
+ },
+ "click_here": {
+ "message": "Кликните да излистате дозвољене језике."
+ },
+ "chrome_accept_languages": {
+ "message": "$CHROME$ прихвата $languages$ језике.",
+ "placeholders": {
+ "chrome": {
+ "content": "Chrome",
+ "example": "Chrome"
+ },
+ "languages": {
+ "content": "$1",
+ "example": "en-US,sr,de"
+ }
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/manifest.json
new file mode 100644
index 00000000000..52997f29891
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/getMessage/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "__MSG_chrome_extension_name__",
+ "description": "__MSG_chrome_extension_description__",
+ "version": "0.2",
+ "default_locale": "en_US",
+ "browser_action": {
+ "default_title": "__MSG_browser_action_title__",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/de/messages.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/de/messages.json
new file mode 100644
index 00000000000..0d8e2f7757c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/de/messages.json
@@ -0,0 +1,8 @@
+{
+ "application_title": {
+ "message": "Eine lokalisierte gehostete Beispielanwendung"
+ },
+ "application_description": {
+ "message": "Hier steht eine Beschreibung der Applikation, die im Web Store auftauchen wird."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/en/messages.json
new file mode 100644
index 00000000000..ed87abfbf9c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/_locales/en/messages.json
@@ -0,0 +1,10 @@
+{
+ "application_title": {
+ "message": "Minimal Localized Hosted App",
+ "description": "The title of the application, displayed in the web store."
+ },
+ "application_description": {
+ "message": "This is the minimal set of data required to upload a localized hosted application to the web store.",
+ "description": "The description of the application, displayed in the web store."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/manifest.json
new file mode 100644
index 00000000000..9cb94fd72db
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/i18n/localizedHostedApp/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "__MSG_application_title__",
+ "description": "__MSG_application_description__",
+ "version": "0.2",
+ "default_locale": "en",
+ "app": {
+ "launch": {
+ "web_url": "http://example.com/"
+ }
+ },
+ "icons": {
+ "128": "icon128.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/idle/idle_simple/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/idle/idle_simple/manifest.json
new file mode 100644
index 00000000000..b6fba2a4d6b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/idle/idle_simple/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name" : "Idle - Simple Example",
+ "version" : "1.0.1",
+ "description" : "Demonstrates the Idle API",
+ "background" : {
+ "scripts": ["background.js"]
+ },
+ "permissions" : [ "idle" ],
+ "browser_action" : {
+ "default_icon" : "sample-19.png"
+ },
+ "icons" : {
+ "16" : "sample-16.png",
+ "48" : "sample-48.png",
+ "128" : "sample-128.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/infobars/sandwichbar/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/infobars/sandwichbar/manifest.json
new file mode 100644
index 00000000000..f14c8ad5006
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/infobars/sandwichbar/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name" : "SandwichBar",
+ "version" : "1.0.1",
+ "description" : "Shows an infobar on pages which contain the word 'sandwich'",
+ "background" : {
+ "scripts": ["background.js"]
+ },
+ "permissions" : [ "infobars" ],
+ "icons" : {
+ "16" : "sandwich-16.png",
+ "48" : "sandwich-48.png",
+ "128" : "sandwich-128.png"
+ },
+ "content_scripts" : [
+ {
+ "matches" : [ "http://*/*" ],
+ "js" : [ "contentscript.js" ],
+ "run_at" : "document_idle",
+ "all_frames" : false
+ }
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/input.ime/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/input.ime/basic/manifest.json
new file mode 100644
index 00000000000..e21aec11562
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/input.ime/basic/manifest.json
@@ -0,0 +1,22 @@
+{
+ "name": "Test IME",
+ "version": "1.0",
+ "manifest_version": 2,
+ "description": "A simple IME that converts all keystrokes to upper case.",
+ "background": {
+ "scripts": ["main.js"]
+ },
+ "permissions": [
+ "input"
+ ],
+ "input_components": [
+ {
+ "name": "Test IME",
+ "type": "ime",
+ "id": "test",
+ "description": "Test IME", // A user visible description
+ "language": "en-US", // The primary language this IME is used for
+ "layouts": ["us::eng"] // The supported keyboard layouts for this IME
+ }
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/messaging/timer/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/messaging/timer/manifest.json
new file mode 100644
index 00000000000..120eb147a19
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/messaging/timer/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "Message Timer",
+ "version": "1.3",
+ "description": "Times how long it takes to send a message to a content script and back.",
+ "content_scripts": [
+ {
+ "matches": ["http://*/*"],
+ "js": ["page.js"]
+ }
+ ],
+ "browser_action": {
+ "default_title": "Time to current page",
+ "default_icon": "clock.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/app/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/app/manifest.json
new file mode 100644
index 00000000000..a339e11dade
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/app/manifest.json
@@ -0,0 +1,19 @@
+{
+ // Extension ID: knldjmfmopnpolahpmmgbagdohdnhkik
+ "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
+ "name": "Native Messaging Example",
+ "version": "1.0",
+ "manifest_version": 2,
+ "description": "Send a message to a native application.",
+ "app": {
+ "launch": {
+ "local_path": "main.html"
+ }
+ },
+ "icons": {
+ "128": "icon-128.png"
+ },
+ "permissions": [
+ "nativeMessaging"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo-win.json b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo-win.json
new file mode 100644
index 00000000000..84e544847dd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo-win.json
@@ -0,0 +1,13 @@
+// Copyright 2013 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.
+
+{
+ "name": "com.google.chrome.example.echo",
+ "description": "Chrome Native Messaging API Example Host",
+ "path": "native-messaging-example-host.bat",
+ "type": "stdio",
+ "allowed_origins": [
+ "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo.json b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo.json
new file mode 100644
index 00000000000..dfeae04f627
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/nativeMessaging/host/com.google.chrome.example.echo.json
@@ -0,0 +1,13 @@
+// Copyright 2013 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.
+
+{
+ "name": "com.google.chrome.example.echo",
+ "description": "Chrome Native Messaging API Example Host",
+ "path": "HOST_PATH",
+ "type": "stdio",
+ "allowed_origins": [
+ "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/notifications/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/notifications/manifest.json
new file mode 100644
index 00000000000..1f77d635210
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/notifications/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "Notification Demo",
+ "version": "1.1",
+ "description":
+ "Shows off desktop notifications, which are \"toast\" windows that pop up on the desktop.",
+ "icons": {"16": "16.png", "48": "48.png", "128": "128.png"},
+ "permissions": [
+ "notifications"
+ ],
+ "options_page": "options.html",
+ "background": { "scripts": ["background.js"] },
+ "manifest_version": 2,
+
+ // crbug.com/134315
+ "web_accessible_resources": [
+ "48.png"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/omnibox/simple-example/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/omnibox/simple-example/manifest.json
new file mode 100644
index 00000000000..dfdc4cae6ad
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/omnibox/simple-example/manifest.json
@@ -0,0 +1,10 @@
+{
+ "name": "Omnibox Example",
+ "description" : "To use, type 'omnix' plus a search term into the Omnibox.",
+ "version": "1.1",
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "omnibox": { "keyword" : "omnix" },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/override/blank_ntp/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/override/blank_ntp/manifest.json
new file mode 100644
index 00000000000..9efcc231540
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/override/blank_ntp/manifest.json
@@ -0,0 +1,10 @@
+{
+ "name": "Blank new tab page",
+ "description": "Override the new tab page with a blank one",
+ "version": "0.2",
+ "incognito": "split",
+ "chrome_url_overrides": {
+ "newtab": "blank.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/override/override_igoogle/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/override/override_igoogle/manifest.json
new file mode 100644
index 00000000000..927faa3c1d6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/override/override_igoogle/manifest.json
@@ -0,0 +1,9 @@
+{
+ "name": "iGoogle new tab page",
+ "description": "Override the new tab page with iGoogle",
+ "version": "0.2",
+ "chrome_url_overrides": {
+ "newtab": "redirect.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_content/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_content/manifest.json
new file mode 100644
index 00000000000..2b09d279021
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_content/manifest.json
@@ -0,0 +1,29 @@
+{
+ "name" : "Page action by content",
+ "version" : "1.1",
+ "description" : "Shows a page action for HTML pages containing the word 'sandwich'",
+ "background" : {
+ "scripts": ["background.js"]
+ },
+ "page_action" :
+ {
+ "default_icon" : "sandwich-19.png",
+ "default_title" : "There's a 'sandwich' in this page!"
+ },
+ "content_scripts" : [
+ {
+ "matches" : [
+ "http://*/*",
+ "https://*/*"
+ ],
+ "js" : ["contentscript.js"],
+ "run_at" : "document_idle",
+ "all_frames" : false
+ }
+ ],
+ "icons" : {
+ "48" : "sandwich-48.png",
+ "128" : "sandwich-128.png"
+ },
+ "manifest_version": 2
+} \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/manifest.json
new file mode 100644
index 00000000000..631ed9e0795
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/pageAction/pageaction_by_url/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "Page action by URL",
+ "version": "1.0",
+ "description": "Shows a page action for urls which have the letter 'g' in them.",
+ "background": { "scripts": ["background.js"] },
+ "page_action" :
+ {
+ "default_icon" : "icon-19.png",
+ "default_title" : "There's a 'G' in this URL!"
+ },
+ "permissions" : [
+ "tabs"
+ ],
+ "icons" : {
+ "48" : "icon-48.png",
+ "128" : "icon-128.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/pageAction/set_icon/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/pageAction/set_icon/manifest.json
new file mode 100644
index 00000000000..115b8d0124a
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/pageAction/set_icon/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "Animated Page Action",
+ "description": "This extension adds an animated browser action to the toolbar.",
+ "version": "1.2",
+ "background": {
+ "page": "background.html"
+ },
+ "page_action": {
+ "default_title": "First icon"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/permissions/extension-questions/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/permissions/extension-questions/manifest.json
new file mode 100644
index 00000000000..2d8647edc30
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/permissions/extension-questions/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "Top Chrome Extension Questions",
+ "version": "0.3",
+ "description": "Sample demonstration of the optional permissions API.",
+ "icons": {
+ "128": "images/icon.png",
+ "48": "images/icon.png",
+ "16": "images/icon.png"
+ },
+ "browser_action": {
+ "default_icon": "images/icon.png",
+ "default_popup": "popup.html"
+ },
+ "options_page": "options.html",
+ "optional_permissions": ["http://api.stackoverflow.com/"],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/power/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/api/power/_locales/en/messages.json
new file mode 100644
index 00000000000..ef50944de10
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/power/_locales/en/messages.json
@@ -0,0 +1,22 @@
+{
+ "extensionName": {
+ "message": "Keep Awake",
+ "description": "Extension name."
+ },
+ "extensionDescription": {
+ "message": "Override system power-saving settings.",
+ "description": "Extension description."
+ },
+ "disabledTitle": {
+ "message": "Default power-saving settings",
+ "description": "Browser action title when disabled."
+ },
+ "displayTitle": {
+ "message": "Screen will be kept on",
+ "description": "Browser action title when preventing screen-off."
+ },
+ "systemTitle": {
+ "message": "System will stay awake",
+ "description": "Browser action title when preventing system sleep."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/power/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/power/manifest.json
new file mode 100644
index 00000000000..14eb8f131bd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/power/manifest.json
@@ -0,0 +1,30 @@
+{
+ "manifest_version": 2,
+
+ "name": "__MSG_extensionName__",
+ "description": "__MSG_extensionDescription__",
+ "version": "1.7",
+ "icons": {
+ "16": "images/icon-16.png",
+ "48": "images/icon-48.png",
+ "128": "images/icon-128.png"
+ },
+
+ "permissions": [
+ "power",
+ "storage"
+ ],
+ "browser_action": {
+ "default_title": "__MSG_disabledTitle__",
+ "default_icon": {
+ "19": "images/night-19.png",
+ "38": "images/night-38.png"
+ }
+ },
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+
+ "default_locale": "en"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/preferences/allowThirdPartyCookies/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/preferences/allowThirdPartyCookies/manifest.json
new file mode 100644
index 00000000000..25114067490
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/preferences/allowThirdPartyCookies/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name" : "Block/allow third-party cookies API example extension",
+ "version" : "0.1",
+ "description" : "Sample extension which demonstrates how to access a preference.",
+ "permissions": [ "privacy" ],
+ "browser_action": {
+ "default_icon": "advicedog.jpg",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/preferences/enableReferrer/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/preferences/enableReferrer/manifest.json
new file mode 100644
index 00000000000..c72e8959829
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/preferences/enableReferrer/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name" : "Block/allow referrer API example extension",
+ "version" : "0.1",
+ "description" : "Sample extension which demonstrates how to access a preference.",
+ "permissions": [ "privacy" ],
+ "browser_action": {
+ "default_icon": "advicedog.jpg",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/processes/process_monitor/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/processes/process_monitor/manifest.json
new file mode 100644
index 00000000000..2c1836a6f4a
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/processes/process_monitor/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "Process Monitor",
+ "version": "1.2",
+ "description": "Adds a browser action that monitors resource usage of all browser processes.",
+ "permissions": [
+ "processes"
+ ],
+ "browser_action": {
+ "default_title": "Process Monitor",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/processes/show_tabs/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/processes/show_tabs/manifest.json
new file mode 100644
index 00000000000..bdbdb1e2254
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/processes/show_tabs/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "Show Tabs in Process",
+ "version": "1.0",
+ "description": "Adds a browser action showing which tabs share the current tab's process.",
+ "permissions": [
+ "processes", "tabs", "chrome://favicon/*"
+ ],
+ "browser_action": {
+ "default_title": "Show Tabs in this Process",
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/storage/stylizr/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/storage/stylizr/manifest.json
new file mode 100644
index 00000000000..1c0b9cebf0d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/storage/stylizr/manifest.json
@@ -0,0 +1,20 @@
+{
+ "name": "Stylizr",
+ "description": "Spruce up your pages with custom CSS.",
+ "version": "1.0",
+
+ "permissions": [
+ "activeTab",
+ "storage"
+ ],
+
+ "options_page": "options.html",
+
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_title": "Stylize!",
+ "default_popup": "popup.html"
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/tabs/inspector/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/tabs/inspector/manifest.json
new file mode 100644
index 00000000000..68b7728ec3f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/tabs/inspector/manifest.json
@@ -0,0 +1,14 @@
+{
+ "name": "Tab Inspector",
+ "description": "Utility for working with the extension tabs api",
+ "version": "0.3",
+ "permissions": ["tabs"],
+ "background": {
+ "persistent": false,
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_title": "show tab inspector"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/tabs/pin/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/tabs/pin/manifest.json
new file mode 100644
index 00000000000..3154c8c9368
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/tabs/pin/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name": "Keyboard Pin",
+ "version": "0.3",
+ "description": "Creates a keyboard shortcut (Alt + Shift + P) to toggle the pinned state of the currently selected tab",
+ "background": {
+ "persistent": false,
+ "scripts": ["background.js"]
+ },
+ "commands": {
+ "toggle-pin": {
+ "suggested_key": { "default": "Alt+Shift+P" },
+ "description": "Toggle tab pin"
+ }
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/tabs/screenshot/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/tabs/screenshot/manifest.json
new file mode 100644
index 00000000000..c9ddae38f53
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/tabs/screenshot/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "Test Screenshot Extension",
+ "version": "1.2",
+ "description": "Demonstrate screenshot functionality in the chrome.tabs api. Note: only works for code.google.com",
+ "background": {
+ "persistent": false,
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_icon": "camera.png",
+ "default_title": "Take a screen shot!"
+ },
+ "permissions": [
+ "*://code.google.com/"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/topsites/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/topsites/basic/manifest.json
new file mode 100644
index 00000000000..c042c095a4e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/topsites/basic/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name": "Top Sites",
+ "version": "1.2",
+ "description": "Shows the top sites in a browser action",
+ "permissions": ["topSites"],
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/topsites/magic8ball/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/topsites/magic8ball/manifest.json
new file mode 100644
index 00000000000..84f12ac5aae
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/topsites/magic8ball/manifest.json
@@ -0,0 +1,13 @@
+{
+ "name": "NTP prototyping extension",
+ "version": "1.1",
+ "description": "extension to prototype new NTP designs",
+ "chrome_url_overrides" : {
+ "newtab": "newTab.html"
+ },
+ "permissions": [
+ "topSites",
+ "chrome://favicon/"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/ttsEngine/console_tts_engine/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/ttsEngine/console_tts_engine/manifest.json
new file mode 100644
index 00000000000..35be832ec8f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/ttsEngine/console_tts_engine/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "Console TTS Engine",
+ "manifest_version": 2,
+ "version": "2.1",
+ "description": "A \"silent\" TTS engine that prints text to a small window rather than synthesizing speech.",
+ "permissions": ["ttsEngine", "tabs"],
+ "background": {
+ "persistent": false,
+ "scripts": ["console_tts_engine.js"]
+ },
+ "tts_engine": {
+ "voices": [
+ {
+ "voice_name": "Console",
+ "event_types": ["start", "word", "sentence", "end"]
+ }
+ ]
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/_locales/en/messages.json
new file mode 100644
index 00000000000..e639880d7c4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/_locales/en/messages.json
@@ -0,0 +1,52 @@
+{
+ "extName": {
+ "message": "WebNavigation Tech Demo",
+ "description": "The extension name."
+ },
+ "extDescription": {
+ "message": "Demonstration of the WebNavigation extension API.",
+ "description": "The extension description."
+ },
+
+ "navigationDescription": {
+ "message": ", requested $NUM$ times. Loaded in an average of $LOAD$ miliseconds.",
+ "description": "The message posted in the popup for each stored navigation.",
+ "placeholders": {
+ "NUM": {
+ "content": "$1",
+ "example": "4 (The number of times this URL was accessed.)"
+ },
+ "LOAD": {
+ "content": "$2",
+ "example": "12.345 (The average load time in miliseconds.)"
+ }
+ }
+ },
+
+ "inHandler": {
+ "message": "In webNavigation[`%s`] handler: %o",
+ "description": "Notification displayed for each webNavigation event."
+ },
+
+ "inHandlerError": {
+ "message": "In webNavigation[`%s`] handler: No data!",
+ "description": "Notification displayed in a webNavigation event handler without data!"
+ },
+
+ "errorCommittedWithoutPending": {
+ "message": "Wha? `onCommitted` for `%s` called, though it's not pending: %o",
+ "description": "Error logged when `onCommitted` is triggered on a non-pending request."
+ },
+ "errorCompletedWithoutPending": {
+ "message": "Wha? `onCompleted` for `%s` called, though it's not pending: %o",
+ "description": "Error logged when `onCompleted` is triggered on a non-pending request."
+ },
+ "errorErrorOccurredWithoutPending": {
+ "message": "Wha? `onErrorOccurred` for `%s` called, though it's not pending: %o",
+ "description": "Error logged when `onErrorOccurred` is triggered on a non-pending request."
+ },
+ "errorCommittedWithoutPending": {
+ "message": "Wha? `onCompleted` for `%s` called, though it's not pending: %o",
+ "description": "Error logged when `onCompleted` is triggered on a non-pending request."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/manifest.json
new file mode 100644
index 00000000000..2c0d43519dc
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/webNavigation/basic/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "__MSG_extName__",
+ "version": "0.2",
+ "description": "__MSG_extDescription__",
+ "default_locale": "en",
+ "background": {
+ "persistent": false,
+ "scripts": ["navigation_collector.js", "background.js"]
+ },
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "permissions": [
+ "webNavigation", "storage"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/api/windows/merge_windows/manifest.json b/chromium/chrome/common/extensions/docs/examples/api/windows/merge_windows/manifest.json
new file mode 100644
index 00000000000..b5b51737667
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/api/windows/merge_windows/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "Merge Windows",
+ "version": "1.0.2",
+ "description": "Merges all of the browser's windows into the current window",
+ "icons": {
+ "48": "merge_windows_48.png",
+ "128": "merge_windows_128.png"
+ },
+ "background": {
+ "persistent": false,
+ "scripts": ["background.js"]
+ },
+ "browser_action": {
+ "default_icon": "arrow_in.png",
+ "default_title": "Merge Windows"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/apps/background-simple/manifest.json b/chromium/chrome/common/extensions/docs/examples/apps/background-simple/manifest.json
new file mode 100644
index 00000000000..086138459e6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/apps/background-simple/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "Simple Background App",
+ "version": "0.2",
+ "app": {
+ "urls": [ "http://SOME_SITE_WITHOUT_PORT_NUMBERS/SOME_PATH/" ],
+ "launch": {
+ "web_url": "http://SOME_SITE/SOME_PATH/index.html"
+ }
+ },
+ "permissions": ["background", "notifications"],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/apps/calculator/app/manifest.json b/chromium/chrome/common/extensions/docs/examples/apps/calculator/app/manifest.json
new file mode 100644
index 00000000000..76c570d8c7c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/apps/calculator/app/manifest.json
@@ -0,0 +1,13 @@
+{
+ "name": "Calculator",
+ "description": "A simple calculator.",
+ "manifest_version": 2,
+ "minimum_chrome_version": "23",
+ "version": "1.3.2",
+ "app": {"background": {"scripts": ["model.js", "view.js", "controller.js"]}},
+ "icons": {
+ "16": "images/icon-16x16.png",
+ "128": "images/icon-128x128.png"
+ },
+ "permissions": ["storage"]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json
new file mode 100644
index 00000000000..78e0c92406e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/app_launcher/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "App Launcher",
+ "description": "Get access to your apps in a browser action",
+ "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"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/benchmark/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/benchmark/manifest.json
new file mode 100644
index 00000000000..bff719b3a22
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/benchmark/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "Page Benchmarker",
+ "version": "1.3.4.0",
+ "manifest_version": 2,
+ "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
+ "description": "Chromium Page Benchmarker.",
+ "background": {
+ "page": "background.html",
+ "persistent": false
+ },
+ "browser_action": {
+ "default_title": "Benchmark page load time",
+ "default_icon": "stopwatch.jpg"
+ },
+ "options_page": "options.html",
+ "permissions": [
+ "tabs", "https://*/*", "http://*/*"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json
new file mode 100644
index 00000000000..1c1f5e0f2f8
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/buildbot/manifest.json
@@ -0,0 +1,28 @@
+{
+ "name": "Chromium Buildbot Monitor",
+ "version": "0.8.4",
+ "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": {
+ "scripts": ["utils.js",
+ "prefs.js",
+ "try_status.js",
+ "active_issues.js",
+ "bg.js"]
+ },
+ "permissions": [
+ "notifications",
+ "storage",
+ "http://build.chromium.org/",
+ "http://chromium-status.appspot.com/",
+ "https://codereview.chromium.org/"
+ ],
+ "browser_action": {
+ "default_title": "",
+ "default_icon": "chromium.png",
+ "default_popup": "popup.html"
+ },
+ "options_page": "options.html",
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ar/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ar/messages.json
new file mode 100644
index 00000000000..3fd46a01d4d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ar/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u062a\u062f\u0639\u0645\u0647\u0627 Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u064a\u0645\u0643\u0646\u0643 \u0628\u0633\u0631\u0639\u0629 \u0627\u0644\u062a\u0639\u0631\u0641 \u0639\u0644\u0649 \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0645\u062a\u0628\u0642\u064a \u0644\u0643 \u0625\u0644\u0649 \u0623\u0646 \u064a\u062d\u064a\u0646 \u0645\u0648\u0639\u062f \u0627\u062c\u062a\u0645\u0627\u0639\u0643 \u0627\u0644\u062a\u0627\u0644\u064a \u0645\u0646 \u0623\u064a \u062a\u0642\u0648\u064a\u0645 \u0645\u0646 \u062a\u0642\u0627\u0648\u064a\u0645\u0643. \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0632\u0631 \u0644\u064a\u062a\u0645 \u0646\u0642\u0644\u0643 \u0625\u0644\u0649 \u0627\u0644\u062a\u0642\u0648\u064a\u0645."},"direction":{"message":"rtl"},"notitle":{"message":"(\u0644\u064a\u0633 \u0647\u0646\u0627\u0643 \u0623\u064a \u0639\u0646\u0648\u0627\u0646)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 \u062f\u0642\u064a\u0642\u0629","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 \u0633\u0627\u0639\u0629","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 \u064a\u0648\u0645","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u062f\u0639\u0645 \u0645\u062a\u0639\u062f\u062f \u0644\u0644\u062a\u0642\u0648\u064a\u0645"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u062a\u0645 \u062d\u0641\u0638 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a."},"status_saving":{"message":"\u062c\u0627\u0631\u0650 \u0627\u0644\u062d\u0641\u0638..."},"multicalendartooltip":{"message":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0645\u0631\u0628\u0639 \u0644\u062a\u0645\u0643\u064a\u0646 \u0627\u0644\u062f\u0639\u0645 \u0627\u0644\u0645\u062a\u0639\u062f\u062f \u0644\u0644\u062a\u0642\u0648\u064a\u0645."},"imagetooltip":{"message":"\u062a\u0642\u0648\u064a\u0645 Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/bg/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/bg/messages.json
new file mode 100644
index 00000000000..e7dc1a674d5
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/bg/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (by Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u0412\u0438\u0436\u0442\u0435 \u0431\u044a\u0440\u0437\u043e \u043a\u043e\u043b\u043a\u043e \u0432\u0440\u0435\u043c\u0435 \u0432\u0438 \u043e\u0441\u0442\u0430\u0432\u0430 \u0434\u043e \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0430\u0442\u0430 \u0432\u0438 \u0441\u0440\u0435\u0449\u0430 \u043e\u0442 \u0432\u0441\u0435\u043a\u0438 \u0441\u0432\u043e\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440. \u041a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0431\u0443\u0442\u043e\u043d\u0430, \u0437\u0430 \u0434\u0430 \u0433\u043e \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435."},"direction":{"message":"ltr"},"notitle":{"message":"(\u0411\u0435\u0437 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0435)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 \u043c","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 \u0447","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 \u0434","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u041f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430 \u043d\u0430 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0430"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0441\u0430 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438."},"status_saving":{"message":"\u0417\u0430\u043f\u0430\u0437\u0432\u0430 \u0441\u0435...."},"multicalendartooltip":{"message":"\u041c\u043e\u043b\u044f, \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0447\u0435\u0442\u043e, \u0437\u0430 \u0434\u0430 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u0442\u0435 \u043f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430\u0442\u0430 \u043d\u0430 \u043d\u044f\u043a\u043e\u043b\u043a\u043e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0430"},"imagetooltip":{"message":"Google \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ca/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ca/messages.json
new file mode 100644
index 00000000000..b0ab0c644da
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ca/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (de Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Comproveu r\u00e0pidament el temps que falta per a la propera reuni\u00f3 a qualsevol dels vostres calendaris. Feu clic al bot\u00f3 per anar-hi."},"direction":{"message":"ltr"},"notitle":{"message":"(Sense t\u00edtol)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 dies","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Compatibilitat amb m\u00faltiples calendaris"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"S'ha desat la configuraci\u00f3."},"status_saving":{"message":"S'est\u00e0 desant..."},"multicalendartooltip":{"message":"Activeu la casella per activar la compatibilitat amb m\u00faltiples calendaris"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/cs/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/cs/messages.json
new file mode 100644
index 00000000000..6e31a42ee17
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/cs/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Kontrola Kalend\u00e1\u0159e Google (od spole\u010dnosti Google)"},"title":{"message":"Kontrola Kalend\u00e1\u0159e Google"},"description":{"message":"Umo\u017e\u0148uje rychle zobrazit \u010das, kter\u00fd zb\u00fdv\u00e1 do dal\u0161\u00ed sch\u016fzky napl\u00e1novan\u00e9 v kter\u00e9mkoli z va\u0161ich kalend\u00e1\u0159\u016f. Kliknut\u00edm na tla\u010d\u00edtko p\u0159ejdete do kalend\u00e1\u0159e."},"direction":{"message":"ltr"},"notitle":{"message":"(Bez n\u00e1zvu)"},"optionstitle":{"message":"Kontrola Kalend\u00e1\u0159e Google"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Podpora n\u011bkolika kalend\u00e1\u0159\u016f"},"extensionname":{"message":"Kontrola Kalend\u00e1\u0159e Google"},"status_saved":{"message":"Nastaven\u00ed byla ulo\u017eena."},"status_saving":{"message":"Ukl\u00e1d\u00e1n\u00ed...."},"multicalendartooltip":{"message":"Za\u0161krtnut\u00edm pol\u00ed\u010dka pros\u00edm povolte podporu v\u00edce kalend\u00e1\u0159\u016f"},"imagetooltip":{"message":"Kalend\u00e1\u0159 Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/da/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/da/messages.json
new file mode 100644
index 00000000000..209b6d90568
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/da/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (fra Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Tjek hurtigt hvor lang tid der er til n\u00e6ste m\u00f8de i en af dine kalendre. Klik p\u00e5 knappen for at \u00e5bne din kalender."},"direction":{"message":"ltr"},"notitle":{"message":"(Ingen titel)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 t","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Support til flere kalendere"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Indstillingerne er gemt."},"status_saving":{"message":"Gemmer..."},"multicalendartooltip":{"message":"S\u00e6t kryds i feltet for at aktivere support til flere kalendere"},"imagetooltip":{"message":"Google Kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/de/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/de/messages.json
new file mode 100644
index 00000000000..3892f3975a2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/de/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Werfen Sie schnell einen Blick auf die verbleibende Zeit bis zum n\u00e4chsten Termin in einem Ihrer Kalender. Klicken Sie zum \u00d6ffnen Ihres Kalenders auf die Schaltfl\u00e4che."},"direction":{"message":"ltr"},"notitle":{"message":"(Kein Titel)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 Min.","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 Std.","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 Tage","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Unterst\u00fctzung mehrerer Kalender"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Einstellungen gespeichert"},"status_saving":{"message":"Speichern...."},"multicalendartooltip":{"message":"Aktivieren Sie das Kontrollk\u00e4stchen, um die Unterst\u00fctzung mehrerer Kalender einzuschalten."},"imagetooltip":{"message":"Google Kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/el/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/el/messages.json
new file mode 100644
index 00000000000..9cd461d443e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/el/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u03b1\u03c0\u03cc \u03c4\u03b7\u03bd Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u0394\u03b5\u03af\u03c4\u03b5 \u03b3\u03c1\u03ae\u03b3\u03bf\u03c1\u03b1 \u03c0\u03cc\u03c4\u03b5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03b7 \u03c3\u03c5\u03bd\u03ac\u03bd\u03c4\u03b7\u03c3\u03ae \u03c3\u03b1\u03c2 \u03b1\u03c0\u03cc \u03bf\u03c0\u03bf\u03b9\u03bf\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b1 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03ac \u03c3\u03b1\u03c2. \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03c4\u03bf \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bc\u03b5\u03c4\u03b1\u03c6\u03b5\u03c1\u03b8\u03b5\u03af\u03c4\u03b5 \u03c3\u03c4\u03bf \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03cc \u03c3\u03b1\u03c2."},"direction":{"message":"ltr"},"notitle":{"message":"(\u03a7\u03c9\u03c1\u03af\u03c2 \u03c4\u03af\u03c4\u03bb\u03bf)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1\u03bb","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u03c9","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1\u03b7","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u03a5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 \u03c0\u03bf\u03bb\u03bb\u03ce\u03bd \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03c9\u03bd"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u039f\u03b9 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b1\u03bd."},"status_saving":{"message":"\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7...."},"multicalendartooltip":{"message":"\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03c4\u03bf \u03c0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03ae\u03c1\u03b9\u03be\u03b7 \u03c0\u03bf\u03bb\u03bb\u03ce\u03bd \u03b7\u03bc\u03b5\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03c9\u03bd"},"imagetooltip":{"message":"\u0397\u03bc\u03b5\u03c1\u03bf\u03bb\u03cc\u03b3\u03b9\u03bf Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en/messages.json
new file mode 100644
index 00000000000..2b19e00a5f3
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (by Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Quickly see the time until your next meeting from any of your calendars. Click on the button to be taken to your calendar."},"direction":{"message":"ltr"},"notitle":{"message":"(No Title)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Multi Calendar Support"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Settings Saved."},"status_saving":{"message":"Saving...."},"multicalendartooltip":{"message":"Please check the box to enable multiple calendar support"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en_GB/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en_GB/messages.json
new file mode 100644
index 00000000000..87ef60e9d36
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/en_GB/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (by Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Quickly see the time until your next meeting from any of your calendars. Click the button to be taken to your calendar."},"direction":{"message":"ltr"},"notitle":{"message":"(No Title)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Multi-Calendar Support"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Settings Saved."},"status_saving":{"message":"Saving...."},"multicalendartooltip":{"message":"Please tick the box to enable multiple calendar support"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es/messages.json
new file mode 100644
index 00000000000..03d60100222
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (de Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Consulta r\u00e1pidamente cu\u00e1nto tiempo falta para tu pr\u00f3xima reuni\u00f3n en cualquiera de tus calendarios. Haz clic en el bot\u00f3n para acceder al calendario."},"direction":{"message":"ltr"},"notitle":{"message":"(Sin t\u00edtulo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Compatibilidad con varios calendarios"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Se ha guardado la configuraci\u00f3n."},"status_saving":{"message":"Guardando...."},"multicalendartooltip":{"message":"Selecciona la casilla para habilitar la compatibilidad con varios calendarios"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es_419/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es_419/messages.json
new file mode 100644
index 00000000000..e7b2536a293
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/es_419/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (de Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"F\u00edjate r\u00e1pidamente cu\u00e1nto tiempo falta para tu pr\u00f3xima reuni\u00f3n en alguno de tus calendarios. Haz clic en el bot\u00f3n para que te lleve hasta tu calendario."},"direction":{"message":"ltr"},"notitle":{"message":"(Sin t\u00edtulo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1\u00a0m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u00a0h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Ayuda de Multi Calendar"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Configuraciones guardadas"},"status_saving":{"message":"Guardando...."},"multicalendartooltip":{"message":"Marca el casillero para habilitar la ayuda del calendario m\u00faltiple."},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/et/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/et/messages.json
new file mode 100644
index 00000000000..5828ccd7569
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/et/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Vaadake kiiresti oma j\u00e4rgmise koosolekuni j\u00e4\u00e4nud aega \u00fcksk\u00f5ik millisest oma kalendrist. Kalendrisse minekuks kl\u00f5psake nupul."},"direction":{"message":"ltr"},"notitle":{"message":"(Pealkiri puudub)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 p\u00e4ev(a)","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Multi-Calendari tugi"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Seaded salvestatud."},"status_saving":{"message":"Salvestamine ..."},"multicalendartooltip":{"message":"Mitme kalendri toe lubamiseks m\u00e4rkige ruut"},"imagetooltip":{"message":"Google'i kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fi/messages.json
new file mode 100644
index 00000000000..ddc20889a7e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fi/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (Googlen tekem\u00e4)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"N\u00e4et nopeasti ajan seuraavaan tapaamiseesi mist\u00e4 tahansa kalenteristasi. Siirryt kalenteriin napsauttamalla painiketta."},"direction":{"message":"ltr"},"notitle":{"message":"(Ei nime\u00e4)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 t","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 pv","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Useiden kalentereiden tuki"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Asetukset tallennettu."},"status_saving":{"message":"Tallennetaan..."},"multicalendartooltip":{"message":"Ota useiden kalentereiden tuki k\u00e4ytt\u00f6\u00f6n valitsemalla valintaruutu"},"imagetooltip":{"message":"Google-kalenteri"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fil/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fil/messages.json
new file mode 100644
index 00000000000..16cdebaed25
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fil/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (mula sa Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Mabilisang tingnan ang oras hanggang sa iyong susunod na pagpupulong mula sa alinman sa iyong mga kalendaryo. Mag-click sa pindutan upang mapunta sa iyong kalendaryo."},"direction":{"message":"ltr"},"notitle":{"message":"(Walang Pamagat)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1o","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1a","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Suporta sa Maramihang Kalendaryo"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Na-save ang Mga Setting."},"status_saving":{"message":"Sine-save...."},"multicalendartooltip":{"message":"Pakilagyan ng check ang kahon upang paganahin ang suporta sa maramihang kalendaryo"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fr/messages.json
new file mode 100644
index 00000000000..f8e413af922
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/fr/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google\u00a0Calendar Checker (par Google)"},"title":{"message":"Google\u00a0Calendar Checker"},"description":{"message":"V\u00e9rifiez rapidement dans vos agendas le temps qu'il vous reste avant votre prochaine r\u00e9union. Cliquez sur le bouton pour ouvrir l'agenda correspondant."},"direction":{"message":"ltr"},"notitle":{"message":"(Sans titre)"},"optionstitle":{"message":"Google\u00a0Calendar Checker"},"minutes":{"message":"$1\u00a0mn","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u00a0h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1\u00a0j","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Prise en charge multi-agendas"},"extensionname":{"message":"Google\u00a0Calendar Checker"},"status_saved":{"message":"Param\u00e8tres enregistr\u00e9s"},"status_saving":{"message":"Enregistrement...."},"multicalendartooltip":{"message":"Cocher la case pour activer la prise en charge multi-agendas"},"imagetooltip":{"message":"Google\u00a0Agenda"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/he/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/he/messages.json
new file mode 100644
index 00000000000..09f16548158
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/he/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u05de\u05d0\u05ea Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u05e8\u05d0\u05d4 \u05d1\u05de\u05d4\u05d9\u05e8\u05d5\u05ea \u05db\u05de\u05d4 \u05d6\u05de\u05df \u05d9\u05e9 \u05dc\u05da \u05e2\u05d3 \u05d4\u05e4\u05d2\u05d9\u05e9\u05d4 \u05d4\u05d1\u05d0\u05d4 \u05e9\u05dc\u05da \u05de\u05db\u05dc \u05dc\u05d5\u05d7 \u05e9\u05e0\u05d4 \u05e9\u05dc\u05da. \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \u05db\u05d3\u05d9 \u05dc\u05e2\u05d1\u05d5\u05e8 \u05dc\u05dc\u05d5\u05d7 \u05d4\u05e9\u05e0\u05d4 \u05e9\u05dc\u05da."},"direction":{"message":"rtl"},"notitle":{"message":"(\u05dc\u05dc\u05d0 \u05db\u05d5\u05ea\u05e8\u05ea)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1\u05d3'","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u05e9'","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1\u05d9'","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u05ea\u05de\u05d9\u05db\u05d4 \u05d1\u05d9\u05d5\u05de\u05e0\u05d9\u05dd \u05de\u05e8\u05d5\u05d1\u05d9\u05dd"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e0\u05e9\u05de\u05e8\u05d5."},"status_saving":{"message":"\u05e9\u05d5\u05de\u05e8...."},"multicalendartooltip":{"message":"\u05e1\u05de\u05df \u05d0\u05ea \u05d4\u05ea\u05d9\u05d1\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d4\u05e4\u05d5\u05da \u05d0\u05ea \u05d4\u05ea\u05de\u05d9\u05db\u05d4 \u05d1\u05d9\u05d5\u05de\u05e0\u05d9\u05dd \u05de\u05e8\u05d5\u05d1\u05d9\u05dd \u05dc\u05e4\u05e2\u05d9\u05dc\u05d4"},"imagetooltip":{"message":"\u05d9\u05d5\u05de\u05df Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hi/messages.json
new file mode 100644
index 00000000000..2b19e00a5f3
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hi/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (by Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Quickly see the time until your next meeting from any of your calendars. Click on the button to be taken to your calendar."},"direction":{"message":"ltr"},"notitle":{"message":"(No Title)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Multi Calendar Support"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Settings Saved."},"status_saving":{"message":"Saving...."},"multicalendartooltip":{"message":"Please check the box to enable multiple calendar support"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hr/messages.json
new file mode 100644
index 00000000000..f2ab5e5ce8e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hr/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (od Googlea)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Brzo pogledajte koliko imate vremena do idu\u0107eg sastanka iz svih svojih kalendara. Kliknite gumb koji \u0107e vas odvesti u va\u0161 kalendar."},"direction":{"message":"ltr"},"notitle":{"message":"(Nema naslova)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Podr\u0161ka za vi\u0161e kalendara"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Postavke su spremljene."},"status_saving":{"message":"Spremanje...."},"multicalendartooltip":{"message":"Uklju\u010dite potvrdni okvir za omogu\u0107avanje podr\u0161ke za vi\u0161e kalendara"},"imagetooltip":{"message":"Google Kalendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hu/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hu/messages.json
new file mode 100644
index 00000000000..6be01dc6fdb
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/hu/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (a Google-t\u00f3l)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Gyorsan megn\u00e9zheti b\u00e1rmelyik napt\u00e1r\u00e1ban, hogy mennyi ideje van m\u00e9g a k\u00f6vetkez\u0151 tal\u00e1lkoz\u00f3ig. Kattintson a gombra a napt\u00e1r megtekint\u00e9s\u00e9hez."},"direction":{"message":"ltr"},"notitle":{"message":"(Nincs c\u00edm)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1p","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u00f3","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1nap","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"T\u00f6bb napt\u00e1r t\u00e1mogat\u00e1sa"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Be\u00e1ll\u00edt\u00e1sok elmentve."},"status_saving":{"message":"Ment\u00e9s..."},"multicalendartooltip":{"message":"K\u00e9rj\u00fck, jel\u00f6lje be a jel\u00f6l\u0151n\u00e9gyzetet t\u00f6bb napt\u00e1r t\u00e1mogat\u00e1s\u00e1nak enged\u00e9lyez\u00e9s\u00e9hez"},"imagetooltip":{"message":"Google Napt\u00e1r"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/id/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/id/messages.json
new file mode 100644
index 00000000000..37056ba89e6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/id/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Pemeriksa Google Kalender (oleh Google)"},"title":{"message":"Pemeriksa Google Kalender"},"description":{"message":"Lihat waktu dengan cepat sampai pertemuan berikutnya dari kalender apa pun. Klik tombol untuk diarahkan ke kalender Anda."},"direction":{"message":"ltr"},"notitle":{"message":"(Tanpa Judul)"},"optionstitle":{"message":"Pemeriksa Google Kalender"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1j","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Dukungan Multi-Kalender"},"extensionname":{"message":"Pemeriksa Google Kalender"},"status_saved":{"message":"Setelan Disimpan."},"status_saving":{"message":"Menyimpan..."},"multicalendartooltip":{"message":"Harap periksa kotak untuk mengaktifkan dukungan multi-kalender"},"imagetooltip":{"message":"Google Kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/it/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/it/messages.json
new file mode 100644
index 00000000000..90e8dafa8f1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/it/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (di Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Usa uno dei tuoi calendari per controllare rapidamente quanto manca alla prossima riunione. Fai clic sul pulsante per accedere al calendario."},"direction":{"message":"ltr"},"notitle":{"message":"(Nessun titolo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 g","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Supporto di pi\u00f9 calendari"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Impostazioni salvate."},"status_saving":{"message":"Salvataggio in corso..."},"multicalendartooltip":{"message":"Seleziona la casella per attivare il supporto di pi\u00f9 calendari"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ja/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ja/messages.json
new file mode 100644
index 00000000000..30cdf0bbbb6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ja/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker\uff08by Google\uff09"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u3069\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u304b\u3089\u3067\u3082\u6b21\u306e\u4f1a\u8b70\u307e\u3067\u306e\u6642\u9593\u3092\u3059\u3070\u3084\u304f\u30c1\u30a7\u30c3\u30af\u3002\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u30ab\u30ec\u30f3\u30c0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002"},"direction":{"message":"ltr"},"notitle":{"message":"\uff08\u30bf\u30a4\u30c8\u30eb\u306a\u3057\uff09"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u8907\u6570\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u306b\u5bfe\u5fdc"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u8a2d\u5b9a\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002"},"status_saving":{"message":"\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059..."},"multicalendartooltip":{"message":"\u8907\u6570\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u30aa\u30f3\u306b\u3057\u3066\u304f\u3060\u3055\u3044"},"imagetooltip":{"message":"Google \u30ab\u30ec\u30f3\u30c0\u30fc"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ko/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ko/messages.json
new file mode 100644
index 00000000000..4e381a8cdce
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ko/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google \uce98\ub9b0\ub354 \uccb4\ud06c \ub3c4\uc6b0\ubbf8(Google \uc81c\uacf5)"},"title":{"message":"Google \uce98\ub9b0\ub354 \uccb4\ud06c \ub3c4\uc6b0\ubbf8"},"description":{"message":"\uce98\ub9b0\ub354 \uc5b4\ub514\uc5d0\uc11c\ub098 \ub2e4\uc74c \ubaa8\uc784\uae4c\uc9c0 \ub0a8\uc740 \uc2dc\uac04\uc744 \uc2e0\uc18d\ud558\uac8c \uc0b4\ud3b4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uce98\ub9b0\ub354\ub85c \uc774\ub3d9\ud558\ub824\uba74 \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc138\uc694."},"direction":{"message":"ltr"},"notitle":{"message":"(\uc81c\ubaa9 \uc5c6\uc74c)"},"optionstitle":{"message":"Google \uce98\ub9b0\ub354 \uccb4\ud06c \ub3c4\uc6b0\ubbf8"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\uc5ec\ub7ec \uce98\ub9b0\ub354 \uc9c0\uc6d0"},"extensionname":{"message":"Google \uce98\ub9b0\ub354 \uccb4\ud06c \ub3c4\uc6b0\ubbf8"},"status_saved":{"message":"\uc124\uc815\uc744 \uc800\uc7a5\ud588\uc2b5\ub2c8\ub2e4."},"status_saving":{"message":"\uc800\uc7a5 \uc911..."},"multicalendartooltip":{"message":"\uc5ec\ub7ec \uce98\ub9b0\ub354 \uc9c0\uc6d0\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud558\ub824\uba74 \ud655\uc778\ub780\uc744 \uc120\ud0dd\ud558\uc138\uc694."},"imagetooltip":{"message":"Google \uce98\ub9b0\ub354"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lt/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lt/messages.json
new file mode 100644
index 00000000000..aac503ff0f1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lt/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Bet kuriame i\u0161 savo kalendori\u0173 greitai \u017ei\u016br\u0117kite, kiek laiko liko iki kito susitikimo. Jei norite patekti \u012f kalendori\u0173, spustel\u0117kite mygtuk\u0105."},"direction":{"message":"ltr"},"notitle":{"message":"(N\u0117ra pavadinimo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min.","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 val.","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d.","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Keli\u0173 kalendori\u0173 palaikymas"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Nustatymai i\u0161saugoti."},"status_saving":{"message":"I\u0161saugoma..."},"multicalendartooltip":{"message":"Kad \u012fgalintum\u0117te keli\u0173 kalendori\u0173 palaikym\u0105, pa\u017eym\u0117kite laukel\u012f"},"imagetooltip":{"message":"\u201eGoogle\u201c kalendorius"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lv/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lv/messages.json
new file mode 100644
index 00000000000..be331835676
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/lv/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (nodro\u0161ina Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Varat \u0101tri skat\u012bt, cik daudz laika atlicis l\u012bdz n\u0101kamajai sapulcei, izmantojot jebkuru no saviem kalend\u0101riem. Lai atv\u0113rtu kalend\u0101ru, nospiediet pogu."},"direction":{"message":"ltr"},"notitle":{"message":"(Bez nosaukuma)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1\u00a0min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u00a0h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1\u00a0d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Vair\u0101ku kalend\u0101ru atbalsts"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Iestat\u012bjumi ir saglab\u0101ti."},"status_saving":{"message":"Notiek saglab\u0101\u0161ana..."},"multicalendartooltip":{"message":"L\u016bdzu, atz\u012bm\u0113jiet lodzi\u0146u, lai iesp\u0113jotu vair\u0101ku kalend\u0101ru atbalstu."},"imagetooltip":{"message":"Google kalend\u0101rs"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nb/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nb/messages.json
new file mode 100644
index 00000000000..666df6e58c2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nb/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (laget av Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Finn ut raskt hvor lenge det er til neste m\u00f8te fra alle kalendrene dine. Klikk p\u00e5 knappen for \u00e5 g\u00e5 videre til kalenderen."},"direction":{"message":"ltr"},"notitle":{"message":"(Ingen tittel)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 t","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"St\u00f8tte for flere kalendere"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Innstillinger lagret."},"status_saving":{"message":"Lagrer \u2026"},"multicalendartooltip":{"message":"Merk av i ruten for \u00e5 aktivere st\u00f8tte for flere kalendere"},"imagetooltip":{"message":"Google Kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nl/messages.json
new file mode 100644
index 00000000000..9ffa2224652
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/nl/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (van Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Snel in al uw agenda's bekijken hoe lang het nog duurt voordat uw volgende vergadering begint. Klik op de knop om naar uw agenda te gaan."},"direction":{"message":"ltr"},"notitle":{"message":"(Naamloos)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 u","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Ondersteuning voor meerdere agenda's"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Instellingen zijn opgeslagen."},"status_saving":{"message":"Opslaan..."},"multicalendartooltip":{"message":"Vink het selectievakje aan om de ondersteuning voor meerdere agenda's in te schakelen"},"imagetooltip":{"message":"Google Agenda"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pl/messages.json
new file mode 100644
index 00000000000..2a3d471d2a7
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pl/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (by Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Szybko sprawd\u017a w dowolnym kalendarzu, ile masz czasu do nast\u0119pnego zebrania. Kliknij przycisk, aby przej\u015b\u0107 do kalendarza."},"direction":{"message":"ltr"},"notitle":{"message":"(Bez tytu\u0142u)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1g","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Obs\u0142uga wielu kalendarzy"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Zapisano ustawienia."},"status_saving":{"message":"Zapisywanie..."},"multicalendartooltip":{"message":"Zaznacz pole, aby w\u0142\u0105czy\u0107 obs\u0142ug\u0119 wielu kalendarzy"},"imagetooltip":{"message":"Kalendarz Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_BR/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_BR/messages.json
new file mode 100644
index 00000000000..3a79f1ddd6d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_BR/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (do Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Veja rapidamente quanto tempo voc\u00ea tem at\u00e9 seu pr\u00f3ximo compromisso. Clique no bot\u00e3o para abrir sua agenda."},"direction":{"message":"ltr"},"notitle":{"message":"(Sem t\u00edtulo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Suporte para v\u00e1rias agendas"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Configura\u00e7\u00f5es salvas."},"status_saving":{"message":"Salvando..."},"multicalendartooltip":{"message":"Marque a caixa para ativar o suporte para v\u00e1rias agendas"},"imagetooltip":{"message":"Google Agenda"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_PT/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_PT/messages.json
new file mode 100644
index 00000000000..53f249fa8a4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/pt_PT/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (do Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Veja rapidamente quanto tempo falta para a sua pr\u00f3xima reuni\u00e3o a partir de qualquer um dos seus calend\u00e1rios. Clique no bot\u00e3o para aceder ao calend\u00e1rio."},"direction":{"message":"ltr"},"notitle":{"message":"(Sem t\u00edtulo)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Suporte para v\u00e1rios calend\u00e1rios"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Defini\u00e7\u00f5es guardadas."},"status_saving":{"message":"A guardar..."},"multicalendartooltip":{"message":"Marque a caixa para permitir o suporte de v\u00e1rios calend\u00e1rios."},"imagetooltip":{"message":"Calend\u00e1rio Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ro/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ro/messages.json
new file mode 100644
index 00000000000..3540609401b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ro/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (de la Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Vede\u0163i rapid timpul p\u00e2n\u0103 la urm\u0103toarea \u00eent\u00e2lnire, din oricare dintre calendarele dvs. Face\u0163i clic pe buton pentru a accesa calendarul."},"direction":{"message":"ltr"},"notitle":{"message":"(F\u0103r\u0103 titlu)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 z","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Asisten\u0163\u0103 pentru mai multe calendare"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Set\u0103rile au fost salvate."},"status_saving":{"message":"Se salveaz\u0103..."},"multicalendartooltip":{"message":"Bifa\u0163i caseta pentru a activa asisten\u0163a pentru mai multe calendare"},"imagetooltip":{"message":"Google Calendar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ru/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ru/messages.json
new file mode 100644
index 00000000000..343632602bd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/ru/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u0432 Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u044f. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u0439. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c."},"direction":{"message":"ltr"},"notitle":{"message":"(\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1\u043c.","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1\u0447.","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1\u0434.","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u0439"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b."},"status_saving":{"message":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435...."},"multicalendartooltip":{"message":"\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0435\u0439"},"imagetooltip":{"message":"\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sk/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sk/messages.json
new file mode 100644
index 00000000000..65257bf2c7c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sk/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Kontrola Kalend\u00e1ra Google (od spolo\u010dnosti Google)"},"title":{"message":"Kontrola Kalend\u00e1ra Google"},"description":{"message":"V \u013eubovo\u013enom z va\u0161ich kalend\u00e1rov si v r\u00fdchlosti si zobrazte, ko\u013eko \u010dasu m\u00e1te do \u010fal\u0161ej sch\u00f4dzky. Kliknut\u00edm na tla\u010didlo prejdete do svojho kalend\u00e1ra."},"direction":{"message":"ltr"},"notitle":{"message":"(Bez n\u00e1zvu)"},"optionstitle":{"message":"Kontrola Kalend\u00e1ra Google"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Podpora viacer\u00fdch Kalend\u00e1rov"},"extensionname":{"message":"Kontrola Kalend\u00e1ra Google"},"status_saved":{"message":"Nastavenia boli ulo\u017een\u00e9."},"status_saving":{"message":"Prebieha ukladanie...."},"multicalendartooltip":{"message":"Ak chcete povoli\u0165 podporu viacer\u00fdch kalend\u00e1rov, za\u010diarknite toto pol\u00ed\u010dko"},"imagetooltip":{"message":"Kalend\u00e1r Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sl/messages.json
new file mode 100644
index 00000000000..09a2113dd39
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sl/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Hitro preverite, koliko je \u0161e do naslednjega sestanka v katerem koli od va\u0161ih koledarjev. Kliknite gumb, da odprete koledar."},"direction":{"message":"ltr"},"notitle":{"message":"(Brez naslova)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Podpora za ve\u010d koledarjev"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Nastavitve shranjene."},"status_saving":{"message":"Shranjevanje ..."},"multicalendartooltip":{"message":"Potrdite polje, da omogo\u010dite podporo za ve\u010d koledarjev."},"imagetooltip":{"message":"Google Koledar"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sr/messages.json
new file mode 100644
index 00000000000..d55c41b7777
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sr/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u043e\u0434 Google-\u0430)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u0411\u0440\u0437\u043e \u043f\u043e\u0433\u043b\u0435\u0434\u0430\u0458\u0442\u0435 \u043a\u043e\u043b\u0438\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0438\u043c\u0430\u0442\u0435 \u0434\u043e \u0441\u043b\u0435\u0434\u0435\u045b\u0435\u0433 \u0441\u0430\u0441\u0442\u0430\u043d\u043a\u0430 \u0443 \u0431\u0438\u043b\u043e \u043a\u043e\u043c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0443. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0434\u0443\u0433\u043c\u0435 \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u043e\u0442\u0432\u043e\u0440\u0438\u043b\u0438 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440."},"direction":{"message":"ltr"},"notitle":{"message":"(\u0411\u0435\u0437 \u043d\u0430\u0441\u043b\u043e\u0432\u0430)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 \u043c\u0438\u043d","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 \u0441","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 \u0434","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u041f\u043e\u0434\u0440\u0448\u043a\u0430 \u0437\u0430 \u0432\u0438\u0448\u0435 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0430"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u041f\u043e\u0434\u0435\u0448\u0430\u0432\u0430\u045a\u0430 \u0441\u0443 \u0441\u0430\u0447\u0443\u0432\u0430\u043d\u0430."},"status_saving":{"message":"\u0427\u0443\u0432\u0430\u045a\u0435...."},"multicalendartooltip":{"message":"\u041f\u043e\u0442\u0432\u0440\u0434\u0438\u0442\u0435 \u0438\u0437\u0431\u043e\u0440 \u0443 \u043f\u043e\u0459\u0443 \u0437\u0430 \u043f\u043e\u0442\u0432\u0440\u0434\u0443 \u0434\u0430 \u0431\u0438\u0441\u0442\u0435 \u043e\u043c\u043e\u0433\u0443\u045b\u0438\u043b\u0438 \u043f\u043e\u0434\u0440\u0448\u043a\u0443 \u0437\u0430 \u0432\u0438\u0448\u0435 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0430"},"imagetooltip":{"message":"Google \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sv/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sv/messages.json
new file mode 100644
index 00000000000..edb0193ea9c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/sv/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (fr\u00e5n Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Se snabbt i dina kalendrar hur l\u00e4nge det \u00e4r till n\u00e4sta m\u00f6te. Klicka p\u00e5 knappen s\u00e5 kommer du till kalendern."},"direction":{"message":"ltr"},"notitle":{"message":"(Namnl\u00f6s)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1min","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1tim","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Support f\u00f6r flera kalendrar"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Inst\u00e4llningarna har sparats."},"status_saving":{"message":"Sparar..."},"multicalendartooltip":{"message":"Aktivera support f\u00f6r flera kalendrar genom att markera rutan"},"imagetooltip":{"message":"Google Kalender"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/th/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/th/messages.json
new file mode 100644
index 00000000000..c9680f1ca0d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/th/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u0e42\u0e14\u0e22 Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u0e14\u0e39\u0e40\u0e27\u0e25\u0e32\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e21\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e16\u0e36\u0e07\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e30\u0e0a\u0e38\u0e21\u0e04\u0e23\u0e31\u0e49\u0e07\u0e15\u0e48\u0e2d\u0e44\u0e1b\u0e44\u0e14\u0e49\u0e08\u0e32\u0e01\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e43\u0e14\u0e46 \u0e01\u0e47\u0e44\u0e14\u0e49\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e43\u0e2b\u0e49\u0e04\u0e25\u0e34\u0e01\u0e17\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e21\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13"},"direction":{"message":"ltr"},"notitle":{"message":"(\u0e44\u0e21\u0e48\u0e21\u0e35\u0e0a\u0e37\u0e48\u0e2d)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u0e01\u0e32\u0e23\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e2b\u0e25\u0e32\u0e22\u0e23\u0e30\u0e1a\u0e1a"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e41\u0e25\u0e49\u0e27"},"status_saving":{"message":"\u0e01\u0e33\u0e25\u0e31\u0e07\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01...."},"multicalendartooltip":{"message":"\u0e42\u0e1b\u0e23\u0e14\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e0a\u0e48\u0e2d\u0e07\u0e17\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19\u0e2b\u0e25\u0e32\u0e22\u0e23\u0e30\u0e1a\u0e1a"},"imagetooltip":{"message":"Google \u0e1b\u0e0f\u0e34\u0e17\u0e34\u0e19"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/tr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/tr/messages.json
new file mode 100644
index 00000000000..a54371eb347
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/tr/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (Google'dan)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Takvimlerinizden herhangi birine bakarak bir sonraki toplant\u0131n\u0131za ne kadar zaman kald\u0131\u011f\u0131n\u0131 hemen g\u00f6r\u00fcn. Takviminizi a\u00e7mak i\u00e7in d\u00fc\u011fmeyi t\u0131klay\u0131n."},"direction":{"message":"ltr"},"notitle":{"message":"(Ba\u015fl\u0131ks\u0131z)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1s","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1g","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"Birden Fazla Takvim Deste\u011fi"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"Ayarlar Kaydedildi."},"status_saving":{"message":"Kaydediliyor..."},"multicalendartooltip":{"message":"Birden fazla takvim deste\u011fini etkinle\u015ftirmek i\u00e7in l\u00fctfen kutuyu i\u015faretleyin"},"imagetooltip":{"message":"Google Takvim"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/uk/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/uk/messages.json
new file mode 100644
index 00000000000..21c7514d060
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/uk/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u0432\u0456\u0434 Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u0428\u0432\u0438\u0434\u043a\u043e \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0439\u0442\u0435 \u0441\u0432\u043e\u0457 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0456, \u0449\u043e\u0431 \u0434\u0456\u0437\u043d\u0430\u0442\u0438\u0441\u044f, \u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0447\u0430\u0441\u0443 \u0437\u0430\u043b\u0438\u0448\u0438\u043b\u043e\u0441\u044f \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457 \u0437\u0443\u0441\u0442\u0440\u0456\u0447\u0456. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0446\u044e \u043a\u043d\u043e\u043f\u043a\u0443, \u0449\u043e\u0431 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044f."},"direction":{"message":"ltr"},"notitle":{"message":"(\u0411\u0435\u0437 \u043d\u0430\u0437\u0432\u0438)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1 \u0445\u0432.","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1 \u0433\u043e\u0434.","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1 \u0434\u043d.","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0456\u0432"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e."},"status_saving":{"message":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u043d\u043d\u044f...."},"multicalendartooltip":{"message":"\u041f\u043e\u0441\u0442\u0430\u0432\u0442\u0435 \u043f\u0440\u0430\u043f\u043e\u0440\u0435\u0446\u044c, \u0449\u043e\u0431 \u0443\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0443 \u0434\u0435\u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0456\u0432"},"imagetooltip":{"message":"\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440 Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/vi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/vi/messages.json
new file mode 100644
index 00000000000..a54d48b6e0f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/vi/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (c\u1ee7a Google)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"Xem nhanh th\u1eddi gian tr\u01b0\u1edbc khi \u0111\u1ebfn cu\u1ed9c h\u1ecdp ti\u1ebfp theo t\u1eeb b\u1ea5t k\u1ef3 l\u1ecbch n\u00e0o c\u1ee7a b\u1ea1n. H\u00e3y nh\u1ea5p v\u00e0o n\u00fat \u0111\u1ec3 \u0111\u01b0\u1ee3c \u0111\u01b0a \u0111\u1ebfn l\u1ecbch c\u1ee7a b\u1ea1n."},"direction":{"message":"ltr"},"notitle":{"message":"(Kh\u00f4ng c\u00f3 ti\u00eau \u0111\u1ec1)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"H\u1ed7 tr\u1ee3 nhi\u1ec1u l\u1ecbch"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u0110\u00e3 l\u01b0u c\u00e0i \u0111\u1eb7t."},"status_saving":{"message":"\u0110ang l\u01b0u...."},"multicalendartooltip":{"message":"Vui l\u00f2ng ch\u1ecdn h\u1ed9p n\u00e0y \u0111\u1ec3 b\u1eadt t\u00ednh n\u0103ng h\u1ed7 tr\u1ee3 nhi\u1ec1u l\u1ecbch"},"imagetooltip":{"message":"L\u1ecbch Google"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_CN/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_CN/messages.json
new file mode 100644
index 00000000000..7c2ecea0c70
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_CN/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker\uff08\u7531 Google \u63d0\u4f9b\uff09"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u5feb\u901f\u67e5\u770b\u79bb\u60a8\u7684\u4efb\u610f\u65e5\u5386\u4e2d\u4e0b\u4e00\u6b21\u4f1a\u8bae\u8fd8\u6709\u591a\u957f\u65f6\u95f4\u3002\u60a8\u53ea\u9700\u70b9\u51fb\u8be5\u6309\u94ae\u5373\u53ef\u8fdb\u5165\u81ea\u5df1\u7684\u65e5\u5386\u3002"},"direction":{"message":"ltr"},"notitle":{"message":"\uff08\u65e0\u6807\u9898\uff09"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u591a\u65e5\u5386\u652f\u6301"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u8bbe\u7f6e\u5df2\u4fdd\u5b58\u3002"},"status_saving":{"message":"\u6b63\u5728\u4fdd\u5b58..."},"multicalendartooltip":{"message":"\u8bf7\u9009\u4e2d\u6b64\u6846\u4ee5\u542f\u7528\u591a\u65e5\u5386\u652f\u6301"},"imagetooltip":{"message":"Google \u65e5\u5386"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_TW/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_TW/messages.json
new file mode 100644
index 00000000000..5c99aba52f1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/_locales/zh_TW/messages.json
@@ -0,0 +1 @@
+{"name":{"message":"Google Calendar Checker (\u7531 Google \u63d0\u4f9b)"},"title":{"message":"Google Calendar Checker"},"description":{"message":"\u5f9e\u4efb\u4f55\u65e5\u66c6\u7686\u53ef\u8fc5\u901f\u67e5\u770b\u8ddd\u96e2\u4e0b\u6b21\u6703\u8b70\u9084\u5269\u4e0b\u591a\u5c11\u6642\u9593\u3002\u6309\u4e00\u4e0b\u6309\u9215\u5373\u53ef\u524d\u5f80\u60a8\u7684\u65e5\u66c6\u3002"},"direction":{"message":"ltr"},"notitle":{"message":"(\u7121\u6a19\u984c)"},"optionstitle":{"message":"Google Calendar Checker"},"minutes":{"message":"$1m","placeholders":{"1":{"content":"$1"}}},"hours":{"message":"$1h","placeholders":{"1":{"content":"$1"}}},"days":{"message":"$1d","placeholders":{"1":{"content":"$1"}}},"multicalendartext":{"message":"\u591a\u91cd\u65e5\u66c6\u652f\u63f4"},"extensionname":{"message":"Google Calendar Checker"},"status_saved":{"message":"\u8a2d\u5b9a\u5df2\u5132\u5b58\u3002"},"status_saving":{"message":"\u5132\u5b58\u4e2d...."},"multicalendartooltip":{"message":"\u8acb\u52fe\u9078\u6b64\u65b9\u584a\uff0c\u4ee5\u555f\u7528\u591a\u91cd\u65e5\u66c6\u652f\u63f4\u529f\u80fd"},"imagetooltip":{"message":"Google \u65e5\u66c6"}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/calendar/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/manifest.json
new file mode 100644
index 00000000000..60e78b49962
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/calendar/manifest.json
@@ -0,0 +1,22 @@
+{
+ "name": "__MSG_name__",
+ "description": "__MSG_description__",
+ "default_locale":"en",
+ "options_page": "views/options.html",
+ "version": "1.2.2",
+ "background": {
+ "page": "views/background.html"
+ },
+ "permissions": [
+ "tabs", "http://*.google.com/", "https://*.google.com/"
+ ],
+ "browser_action": {
+ "default_title": "__MSG_title__"
+ },
+ "icons": {
+ "128": "images/icon-128.gif",
+ "16":"images/icon-16.gif"
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/catblock/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/catblock/manifest.json
new file mode 100644
index 00000000000..e775432add4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/catblock/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "CatBlock",
+ "version": "1.0",
+ "description": "I can't has cheezburger!",
+ "permissions": ["webRequest", "webRequestBlocking",
+ "https://i.chzbgr.com/*"],
+ "background": {
+ "scripts": ["loldogs.js", "background.js"]
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/catifier/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/catifier/manifest.json
new file mode 100644
index 00000000000..ba372527a89
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/catifier/manifest.json
@@ -0,0 +1,12 @@
+{
+ "name": "Catifier",
+ "version": "1.0",
+ "description": "Moar cats!",
+ "permissions": ["declarativeWebRequest", "<all_urls>"],
+ "background": {
+ "scripts": ["event_page.js"],
+ "persistent": false
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json
new file mode 100644
index 00000000000..771783b91fc
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/chrome_search/manifest.json
@@ -0,0 +1,13 @@
+{
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "description": "Add support to the omnibox to search the Chromium source code.",
+ "name": "Chromium Search",
+ "omnibox": { "keyword" : "src" },
+ "permissions": [ "http://www.google.com/" ],
+ "version": "6.1",
+ "minimum_chrome_version": "9",
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/email_this_page/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/email_this_page/manifest.json
new file mode 100644
index 00000000000..3801b87910a
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/email_this_page/manifest.json
@@ -0,0 +1,20 @@
+{
+ "name": "Email this page (by Google)",
+ "description": "This extension adds an email button to the toolbar which allows you to email the page link using your default mail client or Gmail.",
+ "version": "1.2.6",
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "icons": { "128": "mail_128x128.png" },
+ "options_page": "options.html",
+ "permissions": [
+ "tabs", "http://*/*", "https://*/*"
+ ],
+ "browser_action": {
+ "default_title": "Email this page",
+ "default_icon": "email_16x16.png"
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/fx/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/fx/manifest.json
new file mode 100644
index 00000000000..962c5eec6d2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/fx/manifest.json
@@ -0,0 +1,22 @@
+{
+ "name": "Chrome Sounds",
+ "version": "1.2",
+ "description": "Enjoy a more magical and immersive experience when browsing the web using the power of sound.",
+ "background": {
+ "scripts": ["bg.js"]
+ },
+ "options_page": "options.html",
+ "icons": { "128": "icon.png" },
+ "permissions": [
+ "tabs",
+ "bookmarks",
+ "http://*/*",
+ "https://*/*"
+ ],
+ "content_scripts": [ {
+ "matches": ["http://*/*", "https://*/*"],
+ "js": ["content.js"],
+ "all_frames": true
+ }],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gdocs/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/gdocs/manifest.json
new file mode 100644
index 00000000000..03d17586f12
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gdocs/manifest.json
@@ -0,0 +1,25 @@
+{
+ "name": "Google Document List Viewer",
+ "version": "1.0.2",
+ "icons": {
+ "48": "img/docs_spreadsheets-48.gif",
+ "128": "img/docs_spreadsheets-128.gif"
+ },
+ "description": "Demonstrates how to use OAuth to connect the Google Documents List Data API.",
+ "background": {
+ "page": "background.html"
+ },
+ "options_page": "options.html",
+ "browser_action": {
+ "default_title": "List your Google Docs",
+ "default_icon": "img/docs_spreadsheets-32.gif",
+ "default_popup": "popup.html"
+ },
+ "permissions": [
+ "tabs",
+ "https://docs.google.com/feeds/*",
+ "https://www.google.com/accounts/OAuthGetRequestToken",
+ "https://www.google.com/accounts/OAuthAuthorizeToken",
+ "https://www.google.com/accounts/OAuthGetAccessToken"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ar/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ar/messages.json
new file mode 100644
index 00000000000..87faf6490f2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ar/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u0644\u0639\u0631\u0636 \u0639\u062f\u062f \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u063a\u064a\u0631 \u0627\u0644\u0645\u0642\u0631\u0648\u0621\u0629 \u0641\u064a \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0648\u0627\u0631\u062f \u0641\u064a Google Mail. \u0643\u0645\u0627 \u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0632\u0631 \u0644\u0641\u062a\u062d \u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0648\u0627\u0631\u062f."},"gmailcheck_node_error":{"message":"\u062e\u0637\u0623: \u062a\u0645 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u062e\u0644\u0627\u0635\u0629\u060c \u0648\u0644\u0643\u0646 \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 &lt;fullcount&gt; \u0645\u0646 \u0627\u0644\u0639\u064f\u0642\u062f"},"gmailcheck_exception":{"message":"\u0627\u0633\u062a\u062b\u0646\u0627\u0621: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/bg/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/bg/messages.json
new file mode 100644
index 00000000000..0903503a6e5
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/bg/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u043e\u0449\u0430\u0442\u0430"},"gmailcheck_description":{"message":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430 \u0431\u0440\u043e\u044f \u043d\u0435\u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u044a\u0432 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u0442\u0430 \u0432\u0438 \u043f\u043e\u0449\u0430 \u0432 Google Mail. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u044a\u0449\u043e \u0434\u0430 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u0432\u044a\u0440\u0445\u0443 \u0431\u0443\u0442\u043e\u043d\u0430, \u0437\u0430 \u0434\u0430 \u044f \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435."},"gmailcheck_node_error":{"message":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0415\u043c\u0438\u0441\u0438\u044f\u0442\u0430 \u0431\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0430, \u043d\u043e \u043d\u044f\u043c\u0430 \u043d\u0430\u043c\u0435\u0440\u0435\u043d \u0432\u044a\u0437\u0435\u043b &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"\u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ca/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ca/messages.json
new file mode 100644
index 00000000000..6c2b1b2769e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ca/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Verificador de Google Mail"},"gmailcheck_description":{"message":"Mostra el nombre de missatges no llegits que hi ha a la vostra safata d'entrada de Google Mail. Tamb\u00e9 podeu fer clic al bot\u00f3 per obrir la safata d'entrada."},"gmailcheck_node_error":{"message":"Error: s'ha recuperat el feed, per\u00f2 no s'ha trobat cap node &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"excepci\u00f3: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/cs/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/cs/messages.json
new file mode 100644
index 00000000000..394e6addd6e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/cs/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Kontrola e-mailu Google"},"gmailcheck_description":{"message":"Zobraz\u00ed po\u010det nep\u0159e\u010dten\u00fdch zpr\u00e1v ve slo\u017ece Doru\u010den\u00e1 po\u0161ta slu\u017eby Google Mail. Kliknut\u00edm na tla\u010d\u00edtko tuto slo\u017eku otev\u0159ete."},"gmailcheck_node_error":{"message":"Chyba: Zdroj byl na\u010dten, nebyl v\u0161ak nalezen \u017e\u00e1dn\u00fd uzel &lt;fullcount&gt;."},"gmailcheck_exception":{"message":"v\u00fdjimka: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/da/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/da/messages.json
new file mode 100644
index 00000000000..e1c2f82737f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/da/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google E-mail-t\u00e6ller"},"gmailcheck_description":{"message":"Viser antallet af ul\u00e6ste meddelelser i din Google Mail-indbakke. Du kan ogs\u00e5 klikke p\u00e5 knappen for at \u00e5bne din indbakke."},"gmailcheck_node_error":{"message":"Fejl: Feedet blev hentet, men der blev ikke fundet nogen &lt;fullcount&gt;-node"},"gmailcheck_exception":{"message":"undtagelse: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/de/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/de/messages.json
new file mode 100644
index 00000000000..6c2188616c0
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/de/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail-Checker"},"gmailcheck_description":{"message":"Zeigt die Anzahl ungelesener Nachrichten in Ihrem Google Mail-Posteingang an. Sie k\u00f6nnen auch auf diese Schaltfl\u00e4che klicken, um Ihren Posteingang zu \u00f6ffnen."},"gmailcheck_node_error":{"message":"Fehler: Feed abgerufen, aber kein &lt;fullcount&gt; Knoten gefunden"},"gmailcheck_exception":{"message":"Ausnahme: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/el/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/el/messages.json
new file mode 100644
index 00000000000..7db27143e6c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/el/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 \u03c4\u03bf\u03c5 Google Mail"},"gmailcheck_description":{"message":"\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c4\u03c9\u03bd \u03bc\u03b7 \u03b1\u03bd\u03b1\u03b3\u03bd\u03c9\u03c3\u03bc\u03ad\u03bd\u03c9\u03bd \u03bc\u03b7\u03bd\u03c5\u03bc\u03ac\u03c4\u03c9\u03bd \u03c3\u03c4\u03b1 \u03b5\u03b9\u03c3\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03c4\u03bf\u03c5 Google Mail \u03c3\u03b1\u03c2. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03b5\u03c0\u03af\u03c3\u03b7\u03c2 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03c3\u03c4\u03bf \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03c4\u03b5 \u03c4\u03b1 \u03b5\u03b9\u03c3\u03b5\u03c1\u03c7\u03cc\u03bc\u03b5\u03bd\u03ac \u03c3\u03b1\u03c2."},"gmailcheck_node_error":{"message":"\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1: \u03ad\u03b3\u03b9\u03bd\u03b5 \u03b1\u03bd\u03ac\u03ba\u03c4\u03b7\u03c3\u03b7 \u03c1\u03bf\u03ae\u03c2, \u03b1\u03bb\u03bb\u03ac \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5 \u03ba\u03cc\u03bc\u03b2\u03bf\u03c2 &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"\u03b5\u03be\u03b1\u03af\u03c1\u03b5\u03c3\u03b7: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en/messages.json
new file mode 100644
index 00000000000..063b9ca02a4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Displays the number of unread messages in your Google Mail inbox. You can also click the button to open your inbox."},"gmailcheck_node_error":{"message":"Error: feed retrieved, but no &lt;fullcount&gt; node found"},"gmailcheck_exception":{"message":"exception: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en_GB/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en_GB/messages.json
new file mode 100644
index 00000000000..d3fa3a3a1d8
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/en_GB/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Displays the number of unread messages in your Google Mail inbox. You can also click the button to open your inbox."},"gmailcheck_node_error":{"message":"Error: Feed retrieved, but no &lt;fullcount&gt; node found"},"gmailcheck_exception":{"message":"exception: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es/messages.json
new file mode 100644
index 00000000000..4d8364f7a0d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Permite ver el n\u00famero de mensajes sin leer en la bandeja de entrada de Google Mail. Tambi\u00e9n puedes hacer clic en el bot\u00f3n para abrir la bandeja de entrada."},"gmailcheck_node_error":{"message":"Se ha producido un error: el feed se ha recuperado, pero no se ha encontrado ning\u00fan nodo &lt;fullcount&gt;."},"gmailcheck_exception":{"message":"excepci\u00f3n: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es_419/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es_419/messages.json
new file mode 100644
index 00000000000..54bf27032ec
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/es_419/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Muestra el n\u00famero de mensajes sin leer en tu bandeja de entrada de Google Mail. Tambi\u00e9n puedes hacer clic en el bot\u00f3n para abrir tu bandeja de entrada."},"gmailcheck_node_error":{"message":"Error: se recuper\u00f3 el feed, pero no se encontr\u00f3 el nodo &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"excepci\u00f3n: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/et/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/et/messages.json
new file mode 100644
index 00000000000..20b1e844d81
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/et/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google'i meilikontrollija"},"gmailcheck_description":{"message":"Kuvab Google Maili postkastis olevate lugemata s\u00f5numite arvu. V\u00f5ite kl\u00f5psata ka nupul ja avada postkasti."},"gmailcheck_node_error":{"message":"Viga: voog vastuv\u00f5etud, kuid \u00fchtki &lt;fullcount&gt; s\u00f5lme ei leitud"},"gmailcheck_exception":{"message":"erand: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fi/messages.json
new file mode 100644
index 00000000000..f9da2c15ae9
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fi/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google-s\u00e4hk\u00f6postin tarkistus"},"gmailcheck_description":{"message":"N\u00e4ytt\u00e4\u00e4, kuinka monta lukematonta viesti\u00e4 Google Mail -postilaatikossasi on. Voit my\u00f6s avata postilaatikkosi napsauttamalla painiketta."},"gmailcheck_node_error":{"message":"Virhe: sy\u00f6te haettiin, mutta &lt;fullcount&gt;-solmua ei l\u00f6ytynyt"},"gmailcheck_exception":{"message":"poikkeus: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fil/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fil/messages.json
new file mode 100644
index 00000000000..1a019a60d93
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fil/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Ipinapakita ang bilang ng mga hindi pa nababasang mensahe sa inbox ng iyong Google Mail. Maaari mo ring i-click ang pindutan upang buksan ang iyong inbox."},"gmailcheck_node_error":{"message":"Error: nakuha ang feed, ngunit walang &lt;fullcount&gt; node na natagpuan"},"gmailcheck_exception":{"message":"pagbubukod: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fr/messages.json
new file mode 100644
index 00000000000..2900819e1c2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/fr/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"V\u00e9rificateur de messages Google"},"gmailcheck_description":{"message":"Affiche le nombre de messages non lus dans votre bo\u00eete de r\u00e9ception Google\u00a0Mail. Vous avez \u00e9galement la possibilit\u00e9 de cliquer sur ce bouton pour ouvrir cette derni\u00e8re."},"gmailcheck_node_error":{"message":"Erreur\u00a0: flux r\u00e9cup\u00e9r\u00e9, mais aucun n\u0153ud &lt;fullcount&gt; trouv\u00e9"},"gmailcheck_exception":{"message":"exception\u00a0: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/he/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/he/messages.json
new file mode 100644
index 00000000000..c32e98298ab
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/he/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u05de\u05e6\u05d9\u05d2 \u05d0\u05ea \u05de\u05e1\u05e4\u05e8 \u05d4\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05e9\u05dc\u05d0 \u05e0\u05e7\u05e8\u05d0\u05d5 \u05d1\u05ea\u05d9\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05e0\u05db\u05e0\u05e1 \u05e9\u05dc\u05da \u05d1-Google Mail. \u05d1\u05e0\u05d5\u05e1\u05e3, \u05ea\u05d5\u05db\u05dc \u05dc\u05dc\u05d7\u05d5\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df \u05db\u05d3\u05d9 \u05dc\u05e4\u05ea\u05d5\u05d7 \u05d0\u05ea \u05ea\u05d9\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05e0\u05db\u05e0\u05e1."},"gmailcheck_node_error":{"message":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05e2\u05d3\u05db\u05d5\u05df \u05d0\u05d5\u05d7\u05d6\u05e8, \u05d0\u05da \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e6\u05de\u05ea\u05d9\u05dd \u05e9\u05dc &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"\u05d7\u05e8\u05d9\u05d2: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hi/messages.json
new file mode 100644
index 00000000000..0056c565f25
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hi/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google \u092e\u0947\u0932 \u091c\u093e\u0902\u091a\u0915\u0930\u094d\u0924\u093e"},"gmailcheck_description":{"message":"\u0906\u092a\u0915\u0947 Google \u092e\u0947\u0932 \u0907\u0928\u092c\u0949\u0915\u094d\u0938 \u092e\u0947\u0902 \u0928 \u092a\u095d\u0947 \u0917\u090f \u0938\u0902\u0926\u0947\u0936\u094b\u0902 \u0915\u0940 \u0938\u0902\u0916\u094d\u092f\u093e \u092a\u094d\u0930\u0926\u0930\u094d\u0936\u093f\u0924 \u0915\u0930\u0924\u093e \u0939\u0948. \u0906\u092a \u0905\u092a\u0928\u093e \u0907\u0928\u092c\u0949\u0915\u094d\u0938 \u0916\u094b\u0932\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u092c\u091f\u0928 \u0915\u094d\u0932\u093f\u0915 \u092d\u0940 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902."},"gmailcheck_node_error":{"message":"\u0924\u094d\u0930\u0941\u091f\u093f: \u095e\u0940\u0921 \u092a\u0941\u0928\u0930\u094d\u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0915\u0940 \u0917\u0908, \u0932\u0947\u0915\u093f\u0928 \u0915\u094b\u0908 &lt;fullcount&gt; \u0928\u094b\u0921 \u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e"},"gmailcheck_exception":{"message":"\u0905\u092a\u0935\u093e\u0926: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hr/messages.json
new file mode 100644
index 00000000000..94dce1c1ae4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hr/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Provjera po\u0161te"},"gmailcheck_description":{"message":"Prikazuje broj nepro\u010ditanih poruka u ulaznom pretincu usluge Google Mail. Mo\u017eete tako\u0111er kliknuti gumb za otvaranje ulazne po\u0161te."},"gmailcheck_node_error":{"message":"Pogre\u0161ka: Feed je dohva\u0107en, ali nije prona\u0111eno \u010dvori\u0161te &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"izuzetak: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hu/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hu/messages.json
new file mode 100644
index 00000000000..8b3e6c967ca
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/hu/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Lev\u00e9lfigyel\u0151"},"gmailcheck_description":{"message":"Megjelen\u00edti az olvasatlan \u00fczeneteket a Google Mail be\u00e9rkez\u0151 levelei k\u00f6z\u00f6tt. A gombra kattintva is megnyithatja a be\u00e9rkez\u0151 leveleit."},"gmailcheck_node_error":{"message":"Hiba: h\u00edrcsatorna leh\u00edvva, de a csom\u00f3pont (&lt;fullcount&gt;) hi\u00e1nyzik"},"gmailcheck_exception":{"message":"kiv\u00e9tel: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/id/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/id/messages.json
new file mode 100644
index 00000000000..4a8d09c247f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/id/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Menampilkan jumlah pesan yang belum dibaca dalam kotak masuk Google Mail. Anda juga dapat mengeklik tombol ini untuk membuka kotak masuk."},"gmailcheck_node_error":{"message":"Galat: umpan diperoleh, tetapi tidak ada &lt;fullcount&gt; node yang ditemukan"},"gmailcheck_exception":{"message":"pengecualian: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/it/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/it/messages.json
new file mode 100644
index 00000000000..13b6e78749a
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/it/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Avvisi email"},"gmailcheck_description":{"message":"Visualizza il numero di messaggi da leggere nella posta in arrivo di Google Mail. Puoi anche fare clic sul pulsante per aprire la tua posta in arrivo."},"gmailcheck_node_error":{"message":"Errore: feed recuperato ma non sono stati trovati nodi &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"eccezione: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ja/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ja/messages.json
new file mode 100644
index 00000000000..3ce2669b789
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ja/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Google Mail \u306e\u53d7\u4fe1\u30c8\u30ec\u30a4\u306b\u3042\u308b\u672a\u8aad\u306e\u30e1\u30fc\u30eb\u6570\u3092\u8868\u793a\u3057\u307e\u3059\u3002\u3053\u306e\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u53d7\u4fe1\u30c8\u30ec\u30a4\u3092\u958b\u304f\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002"},"gmailcheck_node_error":{"message":"\u30a8\u30e9\u30fc: \u53d6\u5f97\u3057\u305f\u30d5\u30a3\u30fc\u30c9\u306b &lt;fullcount&gt; \u30ce\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093"},"gmailcheck_exception":{"message":"\u4f8b\u5916: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ko/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ko/messages.json
new file mode 100644
index 00000000000..934e49e4f01
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ko/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Gmaill \ubc1b\uc740\ud3b8\uc9c0\ud568\uc5d0\uc11c \uc77d\uc9c0 \uc54a\uc740 \uba54\uc77c\uc758 \uc218\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4. \ub610\ud55c \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ubc1b\uc740\ud3b8\uc9c0\ud568\uc744 \uc5f4 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."},"gmailcheck_node_error":{"message":"\uc624\ub958: \ud53c\ub4dc\ub97c \uac80\uc0c9\ud588\uc73c\ub098 \ucd1d &lt;fullcount&gt;\uac1c\uc758 \ub178\ub4dc\ub97c \ucc3e\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4."},"gmailcheck_exception":{"message":"\uc608\uc678: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lt/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lt/messages.json
new file mode 100644
index 00000000000..7da57e1c76c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lt/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"\u201eGoogle\u201c pa\u0161to tikrintuvas"},"gmailcheck_description":{"message":"Pateikiamas \u201eGoogle\u201c pa\u0161to gaut\u0173 lai\u0161k\u0173 aplanke esan\u010di\u0173 neperskaityt\u0173 prane\u0161im\u0173 skai\u010dius. Be to, jei norite atidaryti gaut\u0173 lai\u0161k\u0173 aplank\u0105, galite spustel\u0117ti mygtuk\u0105."},"gmailcheck_node_error":{"message":"Klaida: sklaidos kanalas nuskaitytas, ta\u010diau nerastas joks &lt;fullcount&gt; mazgas"},"gmailcheck_exception":{"message":"i\u0161imtis: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lv/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lv/messages.json
new file mode 100644
index 00000000000..52f2ca3e792
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/lv/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Tiek r\u0101d\u012bts nelas\u012bto zi\u0146ojumu skaits Google Mail ies\u016btn\u0113. Varat ar\u012b noklik\u0161\u0137in\u0101t uz pogas, lai atv\u0113rtu ies\u016btni."},"gmailcheck_node_error":{"message":"K\u013c\u016bda: pl\u016bsma ir izg\u016bta, ta\u010du netika atrasts neviens &lt;fullcount&gt; mezgls"},"gmailcheck_exception":{"message":"iz\u0146\u0113mums: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nb/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nb/messages.json
new file mode 100644
index 00000000000..ad8a09df4ba
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nb/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google e-post-sjekker"},"gmailcheck_description":{"message":"Viser antallet uleste meldinger i innboksen for Google Mail. Du kan ogs\u00e5 klikke p\u00e5 knappen for \u00e5 \u00e5pne innboksen."},"gmailcheck_node_error":{"message":"Feil: innmating hentet, men finner ingen &lt;fullcount&gt;-node"},"gmailcheck_exception":{"message":"unntak: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nl/messages.json
new file mode 100644
index 00000000000..c40d81fa105
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/nl/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Hiermee wordt het aantal ongelezen berichten in uw Postvak IN van Gmail weergegeven. U kunt ook op de knop klikken om het Postvak IN te openen."},"gmailcheck_node_error":{"message":"Fout: feed opgehaald, maar het knooppunt &lt;fullcount&gt; is niet gevonden"},"gmailcheck_exception":{"message":"uitzondering: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pl/messages.json
new file mode 100644
index 00000000000..d607a06d280
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pl/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Sprawdzanie poczty Google"},"gmailcheck_description":{"message":"Wy\u015bwietla liczb\u0119 nieprzeczytanych wiadomo\u015bci w Twojej skrzynce odbiorczej Google Mail. Mo\u017cesz te\u017c klikn\u0105\u0107 przycisk, aby otworzy\u0107 swoj\u0105 skrzynk\u0119 odbiorcz\u0105."},"gmailcheck_node_error":{"message":"B\u0142\u0105d: pobrano kana\u0142, ale nie odnaleziono w\u0119z\u0142a &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"wyj\u0105tek: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_BR/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_BR/messages.json
new file mode 100644
index 00000000000..1175d0c822e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_BR/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Verificador de mensagens do Google"},"gmailcheck_description":{"message":"Exibe o n\u00famero de mensagens n\u00e3o lidas na sua Caixa de entrada do Gmail. Voc\u00ea tamb\u00e9m pode clicar no bot\u00e3o para abrir a sua caixa de entrada."},"gmailcheck_node_error":{"message":"Erro: feed recuperado, mas nenhum n\u00f3 &lt;fullcount&gt; encontrado"},"gmailcheck_exception":{"message":"exce\u00e7\u00e3o: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_PT/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_PT/messages.json
new file mode 100644
index 00000000000..e6d8992af23
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/pt_PT/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Verificador do Google Mail"},"gmailcheck_description":{"message":"Apresenta o n\u00famero de mensagens n\u00e3o lidas existentes na sua caixa de entrada do Google Mail. Pode tamb\u00e9m clicar no bot\u00e3o para abrir a caixa de entrada."},"gmailcheck_node_error":{"message":"Erro: obteve-se o feed, mas n\u00e3o foi encontrado nenhum n\u00f3 &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"excep\u00e7\u00e3o: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ro/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ro/messages.json
new file mode 100644
index 00000000000..d0d5838ce51
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ro/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Verificator de e-mail"},"gmailcheck_description":{"message":"Afi\u015feaz\u0103 num\u0103rul mesajelor necitite din folderul Mesaje primite al contului Google Mail. De asemenea, pute\u0163i s\u0103 face\u0163i clic pe buton pentru a deschide folderul Mesaje primite."},"gmailcheck_node_error":{"message":"Eroare: s-a preluat feedul, dar nu s-a g\u0103sit niciun nod &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"excep\u0163ie: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ru/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ru/messages.json
new file mode 100644
index 00000000000..dedaef1344b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/ru/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u043c \u044f\u0449\u0438\u043a\u0435 Google Mail. \u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \"\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435\"."},"gmailcheck_node_error":{"message":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0444\u0438\u0434 \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d, \u043d\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0443\u0437\u0435\u043b &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sk/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sk/messages.json
new file mode 100644
index 00000000000..13d902a78c7
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sk/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Kontrola po\u0161ty Google"},"gmailcheck_description":{"message":"Zobraz\u00ed po\u010det nepre\u010d\u00edtan\u00fdch spr\u00e1v v prie\u010dinku doru\u010denej po\u0161ty v slu\u017ebe Gmail. Kliknut\u00edm na tla\u010didlo prie\u010dinok doru\u010denej po\u0161ty otvor\u00edte."},"gmailcheck_node_error":{"message":"Chyba: informa\u010dn\u00fd kan\u00e1l bol na\u010d\u00edtan\u00fd, nena\u0161iel sa v\u0161ak \u017eiadny uzol &lt;fullcount&gt;."},"gmailcheck_exception":{"message":"v\u00fdnimka: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sl/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sl/messages.json
new file mode 100644
index 00000000000..962a8c6efb4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sl/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Preverjevalnik za Google Mail"},"gmailcheck_description":{"message":"Prika\u017ee \u0161tevilo neprebranih sporo\u010dil v nabiralniku storitve Google Mail. Nabiralnik lahko odprete tudi s klikom gumba."},"gmailcheck_node_error":{"message":"Napaka: vir prejet, vendar ni bilo najdeno nobeno vozli\u0161\u010de &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"izjema: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sr/messages.json
new file mode 100644
index 00000000000..a2cfdb417e6
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sr/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google \u043f\u0440\u043e\u0432\u0435\u0440\u0430 \u043f\u043e\u0448\u0442\u0435"},"gmailcheck_description":{"message":"\u041f\u0440\u0438\u043a\u0430\u0437\u0443\u0458\u0435 \u0431\u0440\u043e\u0458 \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0459\u0435\u043d\u0438\u0445 \u043f\u043e\u0440\u0443\u043a\u0430 Google Mail-\u0430. \u041c\u043e\u0436\u0435\u0442\u0435 \u0438 \u0434\u0430 \u043a\u043b\u0438\u043a\u043d\u0435\u0442\u0435 \u043d\u0430 \u0434\u0443\u0433\u043c\u0435 \u0438 \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u043c\u0459\u0435\u043d\u0435 \u043f\u043e\u0440\u0443\u043a\u0435."},"gmailcheck_node_error":{"message":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0424\u0438\u0434 \u0458\u0435 \u043f\u0440\u0435\u0443\u0437\u0435\u0442, \u0430\u043b\u0438 \u0447\u0432\u043e\u0440 &lt;fullcount&gt; \u043d\u0438\u0458\u0435 \u043f\u0440\u043e\u043d\u0430\u0452\u0435\u043d"},"gmailcheck_exception":{"message":"\u0438\u0437\u0443\u0437\u0435\u0442\u0430\u043a: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sv/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sv/messages.json
new file mode 100644
index 00000000000..b4359f35bd1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/sv/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Visar hur m\u00e5nga ol\u00e4sta meddelanden du har i inkorgen i Google Mail. Du kan ocks\u00e5 klicka p\u00e5 knappen om du vill \u00f6ppna inkorgen."},"gmailcheck_node_error":{"message":"Fel: feeden h\u00e4mtades, men ingen &lt;fullcount&gt;-nod hittades"},"gmailcheck_exception":{"message":"undantag: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/th/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/th/messages.json
new file mode 100644
index 00000000000..e5bef6cd04b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/th/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u0e41\u0e2a\u0e14\u0e07\u0e08\u0e33\u0e19\u0e27\u0e19\u0e02\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e17\u0e35\u0e48\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e2d\u0e48\u0e32\u0e19\u0e43\u0e19\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e08\u0e14\u0e2b\u0e21\u0e32\u0e22 Google Mail \u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e04\u0e25\u0e34\u0e01\u0e1b\u0e38\u0e48\u0e21\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e08\u0e14\u0e2b\u0e21\u0e32\u0e22\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e14\u0e49\u0e40\u0e0a\u0e48\u0e19\u0e01\u0e31\u0e19"},"gmailcheck_node_error":{"message":"\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e40\u0e23\u0e35\u0e22\u0e01\u0e04\u0e37\u0e19\u0e1f\u0e35\u0e14\u0e41\u0e25\u0e49\u0e27 \u0e41\u0e15\u0e48\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e42\u0e2b\u0e19\u0e14 &lt;fullcount&gt;"},"gmailcheck_exception":{"message":"\u0e02\u0e49\u0e2d\u0e22\u0e01\u0e40\u0e27\u0e49\u0e19: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/tr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/tr/messages.json
new file mode 100644
index 00000000000..593057dc79f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/tr/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"Google Mail gelen kutunuzdaki okunmam\u0131\u015f iletilerin say\u0131s\u0131n\u0131 g\u00f6r\u00fcnt\u00fcler. Ayr\u0131ca, d\u00fc\u011fmeyi t\u0131klayarak gelen kutunuzu da a\u00e7abilirsiniz."},"gmailcheck_node_error":{"message":"Hata: yay\u0131n al\u0131nd\u0131, ancak &lt;fullcount&gt; d\u00fc\u011f\u00fcm\u00fc bulunamad\u0131"},"gmailcheck_exception":{"message":"\u00f6zel durum: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/uk/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/uk/messages.json
new file mode 100644
index 00000000000..0d196cc2503
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/uk/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043f\u043e\u0448\u0442\u0438 Google"},"gmailcheck_description":{"message":"\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u0445 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c \u0443 \u043f\u0430\u043f\u0446\u0456 \u0437 \u0432\u0445\u0456\u0434\u043d\u0438\u043c\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f\u043c\u0438 \u0441\u043b\u0443\u0436\u0431\u0438 Google Mail. \u0429\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 \u0437 \u0432\u0445\u0456\u0434\u043d\u0438\u043c\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f\u043c\u0438, \u043c\u043e\u0436\u043d\u0430 \u0442\u0430\u043a\u043e\u0436 \u043d\u0430\u0442\u0438\u0441\u043d\u0443\u0442\u0438 \u0446\u044e \u043a\u043d\u043e\u043f\u043a\u0443."},"gmailcheck_node_error":{"message":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043a\u0430\u043d\u0430\u043b \u0432\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043e, \u0430\u043b\u0435 \u0436\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0443\u0437\u043b\u0430 &lt;fullcount&gt; \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e"},"gmailcheck_exception":{"message":"\u0432\u0438\u043d\u044f\u0442\u043e\u043a: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/vi/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/vi/messages.json
new file mode 100644
index 00000000000..d26050fb329
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/vi/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Tr\u00ecnh Ki\u1ec3m tra Th\u01b0 c\u1ee7a Google"},"gmailcheck_description":{"message":"Hi\u1ec3n th\u1ecb s\u1ed1 th\u01b0 ch\u01b0a \u0111\u1ecdc trong h\u1ed9p th\u01b0 \u0111\u1ebfn Gmail c\u1ee7a b\u1ea1n. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 nh\u1ea5p v\u00e0o n\u00fat \u0111\u1ec3 m\u1edf h\u1ed9p th\u01b0 \u0111\u1ebfn c\u1ee7a m\u00ecnh."},"gmailcheck_node_error":{"message":"L\u1ed7i: ngu\u1ed3n c\u1ea5p d\u1eef li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c truy xu\u1ea5t nh\u01b0ng kh\u00f4ng t\u00ecm th\u1ea5y n\u00fat &lt;fullcount&gt; n\u00e0o"},"gmailcheck_exception":{"message":"ngo\u1ea1i l\u1ec7: $1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_CN/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_CN/messages.json
new file mode 100644
index 00000000000..ae6227f379e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_CN/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u663e\u793a Google Mail \u6536\u4ef6\u7bb1\u4e2d\u7684\u672a\u8bfb\u90ae\u4ef6\u6570\u3002\u70b9\u51fb\u8be5\u6309\u94ae\u8fd8\u53ef\u4ee5\u6253\u5f00\u60a8\u7684\u6536\u4ef6\u7bb1\u3002"},"gmailcheck_node_error":{"message":"\u9519\u8bef\uff1a\u7cfb\u7edf\u5df2\u68c0\u7d22\u4f9b\u7a3f\uff0c\u4f46\u672a\u53d1\u73b0 &lt;fullcount&gt; \u8282\u70b9"},"gmailcheck_exception":{"message":"\u5f02\u5e38\uff1a$1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_TW/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_TW/messages.json
new file mode 100644
index 00000000000..4c317934892
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/_locales/zh_TW/messages.json
@@ -0,0 +1 @@
+{"gmailcheck_name":{"message":"Google Mail Checker"},"gmailcheck_description":{"message":"\u5728 Google Mail \u6536\u4ef6\u5323\u4e2d\u986f\u793a\u672a\u8b80\u90f5\u4ef6\u7684\u6578\u76ee\u3002\u6309\u4e00\u4e0b\u6309\u9215\u4e5f\u53ef\u4ee5\u958b\u555f\u6536\u4ef6\u5323\u3002"},"gmailcheck_node_error":{"message":"\u932f\u8aa4\uff1a\u64f7\u53d6\u5230\u8cc7\u8a0a\u63d0\u4f9b\uff0c\u4f46\u627e\u4e0d\u5230 &lt;fullcount&gt; \u7bc0\u9ede"},"gmailcheck_exception":{"message":"\u4f8b\u5916\u72c0\u6cc1\uff1a$1","placeholders":{"1":{"content":"$1"}}}}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/gmail/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/manifest.json
new file mode 100644
index 00000000000..c181dcd3ca4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/gmail/manifest.json
@@ -0,0 +1,23 @@
+{
+ "background": {
+ "persistent": false,
+ "page": "background.html"
+ },
+ "browser_action": {
+ "default_icon": "gmail_not_logged_in.png"
+ },
+ "default_locale": "en",
+ "description": "__MSG_gmailcheck_description__",
+ "icons": {
+ "128": "icon_128.png"
+ },
+ "name": "__MSG_gmailcheck_name__",
+ "permissions": [
+ "alarms",
+ "tabs",
+ "webNavigation",
+ "*://*.google.com/"
+ ],
+ "version": "4.4.0",
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/imageinfo/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/imageinfo/manifest.json
new file mode 100644
index 00000000000..ecda1b16800
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/imageinfo/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name" : "Imageinfo",
+ "version" : "1.0.1",
+ "description" : "Get image info for images, including EXIF data",
+ "background" : { "scripts": ["background.js"] },
+ "permissions" : [
+ "contextMenus",
+ "tabs",
+ "http://*/*",
+ "https://*/*"
+ ],
+ "minimum_chrome_version" : "6.0.0.0",
+ "icons" : {
+ "16" : "imageinfo-16.png",
+ "48" : "imageinfo-48.png",
+ "128" : "imageinfo-128.png"
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/irc/app/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/irc/app/manifest.json
new file mode 100644
index 00000000000..9c6b31e67b0
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/irc/app/manifest.json
@@ -0,0 +1,11 @@
+{
+ "name": "Chromium IRC App",
+ "version": "0.1",
+ "app": {
+ "launch" : {
+ "url": "http://localhost:8080"
+ },
+ "origins": ["http://localhost:8080"]
+ },
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/_locales/en/messages.json
new file mode 100644
index 00000000000..958f7866477
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/_locales/en/messages.json
@@ -0,0 +1,10 @@
+{
+ "extName": {
+ "message": "Managed Bookmarks",
+ "description": "The extension name."
+ },
+ "extDescription": {
+ "message": "Adds bookmarks configured by your system administrator to Chrome.",
+ "description": "The extension description."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/manifest.json
new file mode 100644
index 00000000000..6ee3f29bfb4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "__MSG_extName__",
+ "description": "__MSG_extDescription__",
+ "default_locale": "en",
+ "version": "1.0",
+ "manifest_version": 2,
+ "minimum_chrome_version": "33",
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "permissions": [
+ "bookmarks"
+ ],
+ "storage": {
+ "managed_schema": "schema.json"
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/schema.json b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/schema.json
new file mode 100644
index 00000000000..11e7aeb544b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/managed_bookmarks/schema.json
@@ -0,0 +1,36 @@
+{
+ "type": "object",
+ "properties": {
+ "Bookmarks Bar": {
+ "title": "Bookmarks in the Bookmarks Bar",
+ "description": "Configures bookmarks that will appear in the Bookmarks Bar and can't be removed by the user.",
+ "type": "array",
+ "id": "ListOfBookmarks",
+ "items": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "title": "Bookmark name",
+ "description": "The name that appears on the bookmark.",
+ "type": "string"
+ },
+ "url": {
+ "title": "Bookmark URL",
+ "description": "The URL for the bookmark. If a URL is not set then this bookmark will be a folder.",
+ "type": "string"
+ },
+ "children": {
+ "title": "Contents of this bookmark folder",
+ "description": "A list of bookmarks that will be inside this bookmark folder. If this is set then the URL for this bookmark will be ignored.",
+ "$ref": "ListOfBookmarks"
+ }
+ }
+ }
+ },
+ "Other Bookmarks": {
+ "title": "Bookmarks in the Other Bookmarks folder",
+ "description": "Configures bookmarks that will appear in the Other Bookmarks folder and can't be removed by the user.",
+ "$ref": "ListOfBookmarks"
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/mappy/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/mappy/manifest.json
new file mode 100644
index 00000000000..45deeddd32b
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/mappy/manifest.json
@@ -0,0 +1,22 @@
+{
+ "name": "Mappy",
+ "version": "0.6.1",
+ "description": "Finds addresses in the web page you're on and pops up a map window.",
+ "icons": { "128": "icon.png" },
+ "background": { "scripts": ["background.js"] },
+ "content_scripts": [
+ { "matches": ["http://*/*"], "js": ["mappy_content_script.js"] }
+ ],
+ "permissions": [
+ "tabs",
+ "https://maps.google.com/*",
+ "https://maps.googleapis.com/*"
+ ],
+ "page_action": {
+ "default_name": "Display Map",
+ "default_icon": "marker.png",
+ "default_popup": "popup.html"
+ },
+ "manifest_version": 2,
+ "content_security_policy": "default-src 'none'; style-src 'self'; script-src 'self'; connect-src https://maps.googleapis.com; img-src https://maps.google.com"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/maps_app/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/maps_app/manifest.json
new file mode 100644
index 00000000000..bb1f2e81008
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/maps_app/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "Google Maps",
+ "version": "3",
+ "icons": { "24": "24.png", "128": "128.png" },
+ "app": {
+ "urls": [
+ "http://maps.google.com/"
+ ],
+ "launch": {
+ "web_url": "http://maps.google.com/"
+ }
+ },
+ "permissions": ["geolocation"],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/news/_locales/en/messages.json
new file mode 100644
index 00000000000..97e07c133ce
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news/_locales/en/messages.json
@@ -0,0 +1,102 @@
+{
+ "extName": {
+ "message": "News Reader (by Google)"
+ },
+ "extDesc": {
+ "message": "Displays the latest stories from Google News in a popup."
+ },
+ "ext_default_title": {
+ "message": "Google News"
+ },
+
+ "1": {
+ "message": "Top Stories"
+ },
+ "n": {
+ "message": "Nation"
+ },
+ "w": {
+ "message": "World"
+ },
+ "b": {
+ "message": "Business"
+ },
+ "t": {
+ "message": "Science/Technology"
+ },
+ "e": {
+ "message": "Entertainment"
+ },
+ "s": {
+ "message": "Sports"
+ },
+ "m": {
+ "message": "Health"
+ },
+ "po": {
+ "message": "Most Popular"
+ },
+
+ "options": {
+ "message": "Options"
+ },
+ "more_stories": {
+ "message": "More stories"
+ },
+
+ "direction": {
+ "message": "ltr"
+ },
+
+ "country": {
+ "message": "Country:"
+ },
+ "topic": {
+ "message": "Topics:"
+ },
+ "save": {
+ "message": "Save"
+ },
+ "saveStatus": {
+ "message": "Options saved"
+ },
+ "storyCount": {
+ "message": "Number of stories:"
+ },
+ "newsOption": {
+ "message": "Google News Options"
+ },
+ "customText": {
+ "message": "Custom Topics:"
+ },
+ "maximumTopics": {
+ "message": "(Maximum $count$)",
+ "placeholders": {
+ "count": {
+ "content": "$1"
+ }
+ }
+ },
+ "submitButton": {
+ "message": "Add"
+ },
+ "deleteTitle": {
+ "message": "Delete"
+ },
+ "invalidChars": {
+ "message": "Invalid character(s)"
+ },
+ "noTopic": {
+ "message": "At least one Topic must be selected"
+ },
+
+ "fetchError": {
+ "message": "Error: Failed to fetch news stories."
+ },
+ "wrongTopic": {
+ "message": "Error: Not a valid feed."
+ },
+ "noStory": {
+ "message": "No story right now"
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/news/manifest.json
new file mode 100644
index 00000000000..a64df9cb5aa
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news/manifest.json
@@ -0,0 +1,20 @@
+{
+ "name": "__MSG_extName__",
+ "version": "2.0",
+ "description": "__MSG_extDesc__",
+ "icons": { "128": "images/news_icon.png" },
+ "default_locale":"en",
+ "browser_action": {
+ "default_title": "__MSG_ext_default_title__",
+ "default_icon": "images/news_action.png",
+ "default_popup": "views/feed.html"
+ },
+ "permissions": [
+ "tabs",
+ "http://news.google.com/*"
+ ],
+ "options_page": "views/options.html",
+ "background": {
+ "page": "views/background.html"
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news_a11y/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/news_a11y/manifest.json
new file mode 100644
index 00000000000..496ad4f3c57
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news_a11y/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "News Reader",
+ "version": "1.1",
+ "description": "Displays the first 5 items from the 'Google News - top news' RSS feed in a popup.",
+ "icons": { "128": "news_icon.png" },
+ "browser_action": {
+ "default_title": "Google News",
+ "default_icon": "news_action.png",
+ "default_popup": "feed.html"
+ },
+ "permissions": [
+ "tabs",
+ "http://news.google.com/*"
+ ],
+ "manifest_version": 2,
+ "content_security_policy": "img-src 'self' http://* https://*; script-src 'self'; connect-src http://news.google.com; frame-src data:"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/en/messages.json
new file mode 100644
index 00000000000..9f5ea5db27e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/en/messages.json
@@ -0,0 +1,63 @@
+{
+ "name": {
+ "message": "News Reader",
+ "description": "Extension name in manifest."
+ },
+ "description": {
+ "message": "Displays the first 5 items from the '$Google$ News - top news' RSS feed in a popup.",
+ "description": "Extension description in manifest.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "default_title": {
+ "message": "$Google$ News",
+ "description": "Extension browser action tooltip text in manifest.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "unknown_title": {
+ "message": "Unknown title",
+ "description": "Unknown news title."
+ },
+ "error": {
+ "message": "Error: $error$",
+ "description": "Generic error template. Expects error parameter to be passed in.",
+ "placeholders": {
+ "error": {
+ "content": "$1",
+ "example": "Failed to fetch RSS feed."
+ }
+ }
+ },
+ "failed_to_fetch_rss": {
+ "message": "Failed to fetch RSS feed.",
+ "description": "User visible error message."
+ },
+ "not_a_valid_feed": {
+ "message": "Not a valid feed.",
+ "description": "User visible error message."
+ },
+ "more_stories": {
+ "message": "To $Google$ News \u00BB",
+ "description": "Link name to more Google News.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "newsUrl": {
+ "message": "http://news.google.com",
+ "description": "Url to Google News."
+ }
+}
+
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/es/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/es/messages.json
new file mode 100644
index 00000000000..2093149dd40
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/es/messages.json
@@ -0,0 +1,63 @@
+{
+ "name": {
+ "message": "Lector de noticias",
+ "description": "Nombre de la extensión en el manifiesto."
+ },
+ "description": {
+ "message": "Muestra los primeros 5 eventos de '$Google$ noticias - destacados' RSS feed en una ventana.",
+ "description": "Descripción de la extensión en el manifiesto.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "default_title": {
+ "message": "$Google$ noticias",
+ "description": "Texto de la accion de menú de la extension en el manifiesto.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "unknown_title": {
+ "message": "Título desconocido",
+ "description": "Noticia con título desconocido."
+ },
+ "error": {
+ "message": "Error: $error$",
+ "description": "Plantilla de error genérico. Hace falta pasar un parámetro de error.",
+ "placeholders": {
+ "error": {
+ "content": "$1",
+ "example": "Fallo al capturar el RSS feed."
+ }
+ }
+ },
+ "failed_to_fetch_rss": {
+ "message": "Fallo al capturar el RSS feed.",
+ "description": "Mensaje de error visible para el usuario."
+ },
+ "not_a_valid_feed": {
+ "message": "Feed no válido.",
+ "description": "Mensaje de error visible para el usuario."
+ },
+ "more_stories": {
+ "message": "Ir a $Google$ noticias \u00BB",
+ "description": "Nombre del enlace a Google noticias.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "newsUrl": {
+ "message": "http://news.google.es",
+ "description": "Dirección de Google News."
+ }
+}
+
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/sr/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/sr/messages.json
new file mode 100644
index 00000000000..7d43d7a0976
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/_locales/sr/messages.json
@@ -0,0 +1,59 @@
+{
+ "name": {
+ "message": "Читач вести",
+ "description": "Назив екстензије у манифесту."
+ },
+ "description": {
+ "message": "Приказује првих 5 вести са '$Google$ Вести - главне вести' у прозорчићу.",
+ "description": "Опис екстензије у манифесту.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "default_title": {
+ "message": "$Google$ Вести",
+ "description": "Назив дугмета екстензије.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ },
+ "unknown_title": {
+ "message": "Непознат наслов",
+ "description": "Непознат наслов вести."
+ },
+ "error": {
+ "message": "Грешка - $error$",
+ "description": "Општи облик грешке.",
+ "placeholders": {
+ "error": {
+ "content": "$1",
+ "example": "фид је недоступан."
+ }
+ }
+ },
+ "failed_to_fetch_rss": {
+ "message": "фид је недоступан.",
+ "description": "Порука грешке коју види корисник када је фид недоступан."
+ },
+ "not_a_valid_feed": {
+ "message": "неисправан фид.",
+ "description": "Порука грешке коју види корисник када је фид неисправан."
+ },
+ "more_stories": {
+ "message": "Ка $Google$ Вестима \u00BB",
+ "description": "Назив везе ка још вести.",
+ "placeholders": {
+ "google": {
+ "content": "Google",
+ "example": "Google"
+ }
+ }
+ }
+}
+
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/manifest.json
new file mode 100644
index 00000000000..32b4cc0e6ef
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/news_i18n/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "__MSG_name__",
+ "version": "1.1",
+ "description": "__MSG_description__",
+ "icons": { "128": "news_icon.png" },
+ "browser_action": {
+ "default_title": "__MSG_default_title__",
+ "default_icon": "news_action.png",
+ "default_popup": "feed.html"
+ },
+ "permissions": [
+ "tabs",
+ "http://news.google.com/*",
+ "http://news.google.es/*"
+ ],
+ "default_locale": "en"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/oauth_contacts/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/oauth_contacts/manifest.json
new file mode 100644
index 00000000000..5771b423999
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/oauth_contacts/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Sample - OAuth Contacts",
+ "version": "1.0.6",
+ "icons": { "48": "img/icon-48.png",
+ "128": "img/icon-128.png" },
+ "description": "Uses OAuth to connect to Google's contacts service and display a list of your contacts.",
+ "background": {
+ "scripts": [
+ "chrome_ex_oauthsimple.js",
+ "chrome_ex_oauth.js",
+ "background.js"
+ ]
+ },
+ "browser_action": {
+ "default_title": "",
+ "default_icon": "img/icon-19-off.png"
+ },
+ "permissions": [
+ "tabs",
+ "http://www.google.com/m8/feeds/*",
+ "https://www.google.com/accounts/OAuthGetRequestToken",
+ "https://www.google.com/accounts/OAuthAuthorizeToken",
+ "https://www.google.com/accounts/OAuthGetAccessToken"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/_locales/en/messages.json
new file mode 100644
index 00000000000..95524bd76b7
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/_locales/en/messages.json
@@ -0,0 +1,23 @@
+{
+ "extName": {
+ "message": "Per-plugin content settings"
+ },
+ "extDescription": {
+ "message": "Customize your content setting for different plug-ins."
+ },
+ "patternColumnHeader": {
+ "message": "Hostname Pattern"
+ },
+ "settingColumnHeader": {
+ "message": "Behavior"
+ },
+ "allowRule": {
+ "message": "Allow"
+ },
+ "blockRule": {
+ "message": "Block"
+ },
+ "addNewPattern": {
+ "message": "Add a new hostname pattern"
+ }
+} \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/manifest.json
new file mode 100644
index 00000000000..a6181e2c888
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/plugin_settings/manifest.json
@@ -0,0 +1,16 @@
+{
+ "name" : "__MSG_extName__",
+ "version" : "0.6",
+ "description" : "__MSG_extDescription__",
+ "options_page": "options.html",
+ "permissions": [
+ "contentSettings"
+ ],
+ "icons": {
+ "128": "bunny128.png",
+ "48": "bunny48.png"
+ },
+ "minimum_chrome_version": "16.0.912",
+ "default_locale": "en",
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/_locales/en/messages.json b/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/_locales/en/messages.json
new file mode 100644
index 00000000000..74bc6f35640
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/_locales/en/messages.json
@@ -0,0 +1,54 @@
+{
+ "extName": {
+ "message": "Proxy Extension API Sample",
+ "description": "The extension name."
+ },
+ "extDescription": {
+ "message": "Set Chrome-specific proxies; a demonstration of Chrome's Proxy API",
+ "description": "The extension description."
+ },
+ "headerDirectConnection": {
+ "message": "Direct Connection",
+ "description": "Header for 'Direct Connection' configuration `fieldset`."
+ },
+ "errorNoExtensionAccess": {
+ "message": "Sorry. This browser's proxy settings cannot be controlled via extensions.",
+ "description": "Error message displayed when `levelOfControl` is 'not_controllable'."
+ },
+ "errorOtherExtensionControls": {
+ "message": "Sorry. This browser's proxy settings are being controlled by another extension. Please visit chrome://extensions for details.",
+ "description": "Error message displayed when `levelOfControl` is 'controlled_by_other_extensions'."
+ },
+ "errorSettingRegularProxy": {
+ "message": "Setting regular proxy settings failed. Sorry!",
+ "description": "Error message, displayed when failing to set regular proxy settings."
+ },
+ "errorSettingIncognitoProxy": {
+ "message": "Setting incognito proxy settings failed. Sorry!",
+ "description": "Error message, displayed when failing to set incognito proxy settings."
+ },
+ "successfullySetProxy": {
+ "message": "Your proxy settings have been saved successfully; this window will close automagically. Have a nice day!",
+ "description": "Success message, displayed after proxy settings have been written."
+ },
+ "errorPopupTitle": {
+ "message": "Error: $1",
+ "description": "Error message used as popup title."
+ },
+ "errorProxyError": {
+ "message": "ProxyError: $1.",
+ "description": "Error message displayed in popup when an error occurs."
+ },
+ "errorProxyDetailedError": {
+ "message": "ProxyError: $1. $2.",
+ "description": "Error message displayed in popup when an error occurs."
+ },
+ "errorIdNotFound": {
+ "message": "Element with ID `$1` doesn't exist in the document",
+ "description": "Error message thrown when the given `id` doesn't exist"
+ },
+ "errorIdNotForm": {
+ "message": "Element with ID `$1` isn't a form element.",
+ "description": "Error message thrown when the given `id` isn't a form element."
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/manifest.json
new file mode 100644
index 00000000000..41e4e869678
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/proxy_configuration/manifest.json
@@ -0,0 +1,27 @@
+{
+ "name": "__MSG_extName__",
+ "version": "0.4",
+ "description": "__MSG_extDescription__",
+ "default_locale": "en",
+ "browser_action": {
+ "default_icon": "icon16.png",
+ "default_popup": "popup.html"
+ },
+ "icons": {
+ "16": "icon16.png",
+ "32": "icon32.png",
+ "48": "icon48.png",
+ "128": "icon128.png"
+ },
+ "background": {
+ "scripts": [
+ "proxy_form_controller.js",
+ "proxy_error_handler.js",
+ "background.js"
+ ]
+ },
+ "permissions": [
+ "proxy"
+ ],
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/speak_selection/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/speak_selection/manifest.json
new file mode 100644
index 00000000000..fed36081f99
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/speak_selection/manifest.json
@@ -0,0 +1,49 @@
+{
+ "name": "Speak Selection",
+ "version": "1.1",
+ "description": "Speaks the current selection out loud.",
+ "permissions": [
+ "<all_urls>",
+ "tts",
+ "tabs"
+ ],
+
+ "background": {
+ "scripts": [
+ "keycodes.js",
+ "tabs.js",
+ "background.js"
+ ]
+ },
+
+ "browser_action": {
+ "default_icon": "SpeakSel19.png",
+ "default_title": "Speak Selection"
+ },
+
+ "options_page": "options.html",
+
+ "minimum_chrome_version": "14",
+
+ "content_scripts": [
+ {
+ "matches": [
+ "<all_urls>"
+ ],
+ "all_frames": true,
+ "js": [
+ "keycodes.js",
+ "content_script.js"
+ ]
+ }
+ ],
+
+ "icons": {
+ "16": "SpeakSel16.png",
+ "48": "SpeakSel48.png",
+ "128": "SpeakSel128.png",
+ "256": "SpeakSel256.png"
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/manifest.json
new file mode 100644
index 00000000000..79f5b50a6d2
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/talking_alarm_clock/manifest.json
@@ -0,0 +1,23 @@
+{
+ "name": "Talking Alarm Clock",
+ "version": "1.3",
+ "description": "A clock with two configurable alarms that will play a sound and speak a phrase of your choice.",
+ "permissions": [ "background", "tts" ],
+
+ "background": { "scripts": ["common.js", "background.js"] },
+
+ "browser_action": {
+ "default_icon": "clock-19.png",
+ "default_title": "Talking Alarm Clock",
+ "default_popup": "popup.html"
+ },
+
+ "icons": {
+ "16": "clock-16.png",
+ "48": "clock-48.png",
+ "128": "clock-128.png",
+ "256": "clock-256.png"
+ },
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/ttsdebug/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/ttsdebug/manifest.json
new file mode 100644
index 00000000000..0a856f92856
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/ttsdebug/manifest.json
@@ -0,0 +1,18 @@
+{
+ "app": {
+ "launch": {
+ "local_path": "ttsdebug.html"
+ }
+ },
+ "description": "Tool for developers of Chrome TTS engine extensions to help them test their engines are implementing the API correctly.",
+ "icons": {
+ "16": "16.png",
+ "128": "128.png",
+ "256": "256.png"
+ },
+ "minimum_chrome_version": "14",
+ "name": "TTS Debug",
+ "permissions": [ "tts" ],
+ "version": "1.0",
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/extensions/ttsdemo/manifest.json b/chromium/chrome/common/extensions/docs/examples/extensions/ttsdemo/manifest.json
new file mode 100644
index 00000000000..ade1281d469
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/extensions/ttsdemo/manifest.json
@@ -0,0 +1,19 @@
+{
+ "app": {
+ "launch": {
+ "local_path": "ttsdemo.html"
+ }
+ },
+ "description": "Demo Chrome's synthesized text-to-speech capabilities.",
+ "icons": {
+ "16": "16.png",
+ "128": "128.png",
+ "256": "256.png"
+ },
+ "minimum_chrome_version": "14",
+ "name": "TTS Demo",
+ "permissions": [ "tts" ],
+ "version": "2.1",
+
+ "manifest_version": 2
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/howto/contentscript_xhr/manifest.json b/chromium/chrome/common/extensions/docs/examples/howto/contentscript_xhr/manifest.json
new file mode 100644
index 00000000000..982441479fc
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/howto/contentscript_xhr/manifest.json
@@ -0,0 +1,18 @@
+{
+ "name": "Content Script Cross-Domain XMLHttpRequest Example",
+ "version": "2.0.0",
+ "description": "Demonstrates making cross domain requests from a content script by putting Twitter trends on Google News.",
+ "permissions": [
+ "https://api.twitter.com/*"
+ ],
+ "icons": {
+ "48" : "sample-48.png",
+ "128" : "sample-128.png"
+ },
+ "content_scripts": [
+ {
+ "matches": ["http://news.google.com/*"],
+ "js" : ["contentscript.js"]
+ }
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/howto/sandbox/manifest.json b/chromium/chrome/common/extensions/docs/examples/howto/sandbox/manifest.json
new file mode 100644
index 00000000000..0fd7c52b674
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/howto/sandbox/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name": "Sandboxed Frame",
+ "description": "Demonstrate use of handlebars inside a sandboxed frame",
+ "version": "1.0",
+ "manifest_version": 2,
+ "permissions": ["notifications"],
+ "background": {
+ "page": "eventpage.html",
+ "persistent": false
+ },
+ "browser_action": {
+ "default_icon" : "icon.png",
+ "default_title": "Start Event Page"
+ },
+ "sandbox": {
+ "pages": ["sandbox.html"]
+ },
+ "web_accessible_resources": ["icon.png"]
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/howto/tab_shortcuts/manifest.json b/chromium/chrome/common/extensions/docs/examples/howto/tab_shortcuts/manifest.json
new file mode 100644
index 00000000000..198ac7a54f7
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/howto/tab_shortcuts/manifest.json
@@ -0,0 +1,26 @@
+{
+ "name": "Tab Shortcuts",
+ "version": "1.0",
+ "description": "Allows pinning and duplication of tabs via keyboard shortcuts.",
+ "manifest_version": 2,
+ "background": {
+ "scripts": ["tab_shortcuts.js"],
+ "persistent": false
+ },
+ "commands": {
+ "toggle-pin-tab": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+X",
+ "mac": "Command+Shift+X"
+ },
+ "description": "Toggles whether the current tab is pinned."
+ },
+ "duplicate-tab": {
+ "suggested_key": {
+ "default": "Ctrl+Shift+Z",
+ "mac": "Command+Shift+Z"
+ },
+ "description": "Duplicates the current tab."
+ }
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/tutorials/analytics/manifest.json b/chromium/chrome/common/extensions/docs/examples/tutorials/analytics/manifest.json
new file mode 100644
index 00000000000..11f90a07c7e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/tutorials/analytics/manifest.json
@@ -0,0 +1,17 @@
+{
+ "name": "Event Tracking with Google Analytics",
+ "version": "2.0.0",
+ "description": "A sample extension which uses Google Analytics to track usage.",
+ "browser_action": {
+ "default_title": "Open the popup",
+ "default_icon": "analytics-extension-icon-19.png",
+ "default_popup" : "popup.html"
+ },
+ "icons": {
+ "48": "analytics-extension-icon-48.png",
+ "128": "analytics-extension-icon-128.png"
+ },
+
+ "manifest_version": 2,
+ "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'"
+}
diff --git a/chromium/chrome/common/extensions/docs/examples/tutorials/getstarted/manifest.json b/chromium/chrome/common/extensions/docs/examples/tutorials/getstarted/manifest.json
new file mode 100644
index 00000000000..9496acae179
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/examples/tutorials/getstarted/manifest.json
@@ -0,0 +1,15 @@
+{
+ "manifest_version": 2,
+
+ "name": "One-click Kittens",
+ "description": "This extension demonstrates a 'browser action' with kittens.",
+ "version": "1.0",
+
+ "browser_action": {
+ "default_icon": "icon.png",
+ "default_popup": "popup.html"
+ },
+ "permissions": [
+ "https://secure.flickr.com/"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/known_broken_links.json b/chromium/chrome/common/extensions/docs/server2/known_broken_links.json
new file mode 100644
index 00000000000..468fe3c095d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/known_broken_links.json
@@ -0,0 +1,2030 @@
+[
+ [
+ 302,
+ "extensions/app_identity.html",
+ "extensions/publish_app.html",
+ "redirects to /apps/publish_app.html"
+ ],
+ [
+ 404,
+ "apps/manifest/storage.html",
+ "apps/manifest/chrome:/policy",
+ "target page not found"
+ ],
+ [
+ 200,
+ "apps/api_index.html",
+ "#manifest",
+ "target anchor not found"
+ ],
+ [
+ 404,
+ "apps/tut_oauth.html",
+ "apps/examples/extensions/oauth_contacts/chrome_ex_oauth.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tut_oauth.html",
+ "apps/examples/extensions/oauth_contacts/chrome_ex_oauth.js",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tut_oauth.html",
+ "apps/examples/extensions/oauth_contacts/chrome_ex_oauthsimple.js",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tut_oauth.html",
+ "apps/examples/extensions/oauth_contacts/onload.js",
+ "target page not found"
+ ],
+ [
+ 200,
+ "extensions/debugger.html",
+ "extensions/samples.html#debugger",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/privacy.html",
+ "extensions/samples.html#privacy",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/events.html",
+ "#filtered",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/contextMenus.html",
+ "extensions/samples.html#contextMenus",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/webRequest.html",
+ "extensions/samples.html#webrequest",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/browsingData.html",
+ "extensions/samples.html#browsingData",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/override.html",
+ "extensions/samples.html#chrome_url_overrides",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/types.html",
+ "apps/proxy.html#overview-examples",
+ "redirects to /extensions/proxy.html"
+ ],
+ [
+ 302,
+ "apps/types.html",
+ "apps/proxy.html#property-settings",
+ "redirects to /extensions/proxy.html"
+ ],
+ [
+ 302,
+ "apps/experimental_webInspector.html",
+ "apps/experimental_devtools.html",
+ "redirects to /extensions/experimental_devtools.html"
+ ],
+ [
+ 200,
+ "extensions/experimental_devtools_audits.html",
+ "extensions/samples.html#devtools.audits",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/experimental_devtools_network.html",
+ "apps/devtools_network.html",
+ "redirects to /extensions/devtools_network.html"
+ ],
+ [
+ 404,
+ "extensions/manifest/storage.html",
+ "extensions/manifest/chrome:/policy",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/tut_debugging.html",
+ "apps/getstarted.html",
+ "redirects to /extensions/getstarted.html"
+ ],
+ [
+ 302,
+ "apps/tut_debugging.html",
+ "apps/getstarted.html#unpacked",
+ "redirects to /extensions/getstarted.html"
+ ],
+ [
+ 302,
+ "apps/tut_debugging.html",
+ "apps/getstarted.html#next-steps",
+ "redirects to /extensions/getstarted.html"
+ ],
+ [
+ 302,
+ "apps/storage.html",
+ "apps/manifest/incognito.html",
+ "redirects to /extensions/manifest/incognito.html"
+ ],
+ [
+ 302,
+ "apps/messaging.html",
+ "apps/tabs.html#method-sendMessage",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/messaging.html",
+ "apps/tabs.html#method-connect",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/messaging.html",
+ "apps/tabs.html#method-connect",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "extensions/notifications.html",
+ "extensions/app_external.html",
+ "redirects to /apps/app_external.html"
+ ],
+ [
+ 302,
+ "extensions/notifications.html",
+ "extensions/app_lifecycle.html#create_event_page",
+ "redirects to /apps/app_lifecycle.html"
+ ],
+ [
+ 302,
+ "apps/app_codelab8_webresources.html",
+ "apps/webview_tag.html",
+ "redirects to /apps/tags/webview.html"
+ ],
+ [
+ 302,
+ "apps/app_codelab8_webresources.html",
+ "apps/webview_tag.html",
+ "redirects to /apps/tags/webview.html"
+ ],
+ [
+ 200,
+ "apps/contextMenus.html",
+ "apps/samples.html#contextMenus",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/contextMenus.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/contextMenus.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/contextMenus.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 404,
+ "extensions/manifest/externally_connectable.html",
+ "extensions/manifest/runtime.html#method-connect",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/manifest/externally_connectable.html",
+ "extensions/manifest/runtime.html#method-sendMessage",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/manifest/externally_connectable.html",
+ "extensions/manifest/runtime.html#property-MessageSender-tlsChannelId",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/manifest/externally_connectable.html",
+ "extensions/manifest/runtime.html#property-MessageSender-tlsChannelId",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/declare_permissions.html",
+ "extensions/dns.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/declare_permissions.html",
+ "extensions/idltest.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/declare_permissions.html",
+ "extensions/system_display.html",
+ "redirects to /apps/system_display.html"
+ ],
+ [
+ 200,
+ "extensions/experimental.html",
+ "extensions/samples.html#experimental",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_runtime.html",
+ "redirects to /apps/app_runtime.html"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_runtime.html#event-onLaunched",
+ "redirects to /apps/app_runtime.html"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_window.html#method-create",
+ "redirects to /apps/app_window.html"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_runtime.html#event-onLaunched",
+ "redirects to /apps/app_runtime.html"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_runtime.html#event-onRestarted",
+ "redirects to /apps/app_runtime.html"
+ ],
+ [
+ 302,
+ "extensions/samples.html",
+ "extensions/app_window.html#method-create",
+ "redirects to /apps/app_window.html"
+ ],
+ [
+ 200,
+ "extensions/contentSettings.html",
+ "extensions/samples.html#contentSettings",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_network.html",
+ "redirects to /extensions/devtools_network.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_network.html",
+ "redirects to /extensions/devtools_network.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/extension.html",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html#method-ExtensionSidebarPane-setPage",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html#method-ExtensionSidebarPane-setObject",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_panels.html#method-ExtensionSidebarPane-setExpression",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/tabs.html#method-executeScript",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html#property-tabId",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/tabs.html#method-executeScript",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html#method-eval",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/tabs.html#method-executeScript",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html#method-eval",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/devtools_inspectedWindow.html#method-eval",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/devtools.html",
+ "apps/tabs.html#method-sendMessage",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/event_pages.html",
+ "apps/declarativeWebRequest.html",
+ "redirects to /extensions/declarativeWebRequest.html"
+ ],
+ [
+ 302,
+ "apps/event_pages.html",
+ "apps/extension.html#method-getBackgroundPage",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 200,
+ "apps/event_pages.html",
+ "apps/events.html#filtered",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/event_pages.html",
+ "apps/tabs.html#event-onUpdated",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/event_pages.html",
+ "apps/webNavigation.html#event-onCompleted",
+ "redirects to /extensions/webNavigation.html"
+ ],
+ [
+ 200,
+ "extensions/declarativeWebRequest.html",
+ "#type-Rule",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/topSites.html",
+ "extensions/samples.html#topsites",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/content_scripts.html",
+ "apps/extension.html",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/content_scripts.html",
+ "apps/tabs.html#method-executeScript",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/content_scripts.html",
+ "apps/tabs.html#method-insertCSS",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 200,
+ "apps/content_scripts.html",
+ "apps/samples.html#script",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/content_scripts.html",
+ "apps/samples.html#message-timer",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/content_scripts.html",
+ "apps/samples.html#page-redder",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/content_scripts.html",
+ "apps/samples.html#email-this-page-(by-google)",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/experimental_devtools_inspectedWindow.html",
+ "apps/devtools_inspectedWindow.html",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/background_pages.html",
+ "apps/manifest/incognito.html",
+ "redirects to /extensions/manifest/incognito.html"
+ ],
+ [
+ 302,
+ "apps/background_pages.html",
+ "apps/overview.html#arch",
+ "redirects to /extensions/overview.html"
+ ],
+ [
+ 200,
+ "apps/background_pages.html",
+ "apps/declare_permissions.html#background",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/background_pages.html",
+ "apps/extension.html#method-getViews",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/background_pages.html",
+ "apps/extension.html#method-getBackgroundPage",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/background_pages.html",
+ "apps/tabs.html#method-create",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/packaging.html",
+ "apps/overview.html",
+ "redirects to /extensions/overview.html"
+ ],
+ [
+ 302,
+ "apps/declare_permissions.html",
+ "apps/cookies.html",
+ "redirects to /extensions/cookies.html"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/adview.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/declare_permissions.html",
+ "apps/desktopCapture.html",
+ "redirects to /extensions/desktopCapture.html"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/diagnostics.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/dns.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/declare_permissions.html",
+ "apps/fileBrowserHandler.html",
+ "redirects to /extensions/fileBrowserHandler.html"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/fileSystemProvider.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/declare_permissions.html",
+ "apps/infobars.html",
+ "redirects to /extensions/infobars.html"
+ ],
+ [
+ 302,
+ "apps/declare_permissions.html",
+ "apps/signedInDevices.html",
+ "redirects to /extensions/signedInDevices.html"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/system_network.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/declare_permissions.html",
+ "apps/webview.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/app_deprecated.html",
+ "apps/webview_tag.html",
+ "redirects to /apps/tags/webview.html"
+ ],
+ [
+ 200,
+ "extensions/content_scripts.html",
+ "extensions/samples.html#script",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/experimental_webInspector_audits.html",
+ "apps/experimental_devtools_audits.html",
+ "redirects to /extensions/experimental_devtools_audits.html"
+ ],
+ [
+ 302,
+ "apps/samples.html",
+ "apps/extension.html#property-lastError",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/samples.html",
+ "apps/extension.html#property-lastError-message",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/samples.html",
+ "apps/extension.html#property-lastError",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/activityLogPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/adview.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/app.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/bookmarkManagerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/bookmarks.html",
+ "redirects to /extensions/bookmarks.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/override.html",
+ "redirects to /extensions/override.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/brailleDisplayPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/browserAction.html",
+ "redirects to /extensions/browserAction.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/browsingData.html",
+ "redirects to /extensions/browsingData.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/cast_channel.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/cast_streaming_rtpStream.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/cast_streaming_session.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/cast_streaming_udpTransport.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/chromeosInfoPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/cloudPrintPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/commandLinePrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/commands.html",
+ "redirects to /extensions/commands.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/contentSettings.html",
+ "redirects to /extensions/contentSettings.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/cookies.html",
+ "redirects to /extensions/cookies.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/debugger.html",
+ "redirects to /extensions/debugger.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/declarativeContent.html",
+ "redirects to /extensions/declarativeContent.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/declarativeWebRequest.html",
+ "redirects to /extensions/declarativeWebRequest.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/webRequest.html",
+ "redirects to /extensions/webRequest.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/desktopCapture.html",
+ "redirects to /extensions/desktopCapture.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/developerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/devtools_inspectedWindow.html",
+ "redirects to /extensions/devtools_inspectedWindow.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/devtools_network.html",
+ "redirects to /extensions/devtools_network.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/devtools_panels.html",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/diagnostics.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/dial.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/dns.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/downloads.html",
+ "redirects to /extensions/downloads.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/echoPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/enterprise_platformKeysPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/experimental_accessibility.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/experimental_devtools_audits.html",
+ "redirects to /extensions/experimental_devtools_audits.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/experimental_devtools_console.html",
+ "redirects to /extensions/experimental_devtools_console.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/experimental_discovery.html",
+ "redirects to /extensions/experimental_discovery.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/experimental_history.html",
+ "redirects to /extensions/experimental_history.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/extension.html",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/feedbackPrivate.html",
+ "redirects to /extensions/feedbackPrivate.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/fileBrowserHandler.html",
+ "redirects to /extensions/fileBrowserHandler.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/fileBrowserHandlerInternal.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/fileBrowserPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/fileSystemProvider.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/firstRunPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/fontSettings.html",
+ "redirects to /extensions/fontSettings.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/hangoutsPrivate.html",
+ "redirects to /extensions/hangoutsPrivate.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/history.html",
+ "redirects to /extensions/history.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/override.html",
+ "redirects to /extensions/override.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/identityPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/idltest.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/infobars.html",
+ "redirects to /extensions/infobars.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/input_ime.html",
+ "redirects to /extensions/input_ime.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/inputMethodPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/logPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/management.html",
+ "redirects to /extensions/management.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/override.html",
+ "redirects to /extensions/override.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/manifestTypes.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/mdns.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/mediaGalleriesPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/mediaPlayerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/metricsPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/networkingPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/omnibox.html",
+ "redirects to /extensions/omnibox.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/pageAction.html",
+ "redirects to /extensions/pageAction.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/pageActions.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/pageCapture.html",
+ "redirects to /extensions/pageCapture.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/preferencesPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/privacy.html",
+ "redirects to /extensions/privacy.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/processes.html",
+ "redirects to /extensions/processes.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/proxy.html",
+ "redirects to /extensions/proxy.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/screenlockPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/scriptBadge.html",
+ "redirects to /extensions/scriptBadge.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/sessions.html",
+ "redirects to /extensions/sessions.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/signedInDevices.html",
+ "redirects to /extensions/signedInDevices.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/sockets_tcp.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/sockets_tcpServer.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/sockets_udp.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/streamsPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/system_network.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/systemIndicator.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/systemPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/tabCapture.html",
+ "redirects to /extensions/tabCapture.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/tabs.html",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/terminalPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/test.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/topSites.html",
+ "redirects to /extensions/topSites.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/ttsEngine.html",
+ "redirects to /extensions/ttsEngine.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/virtualKeyboardPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/wallpaperPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/webNavigation.html",
+ "redirects to /extensions/webNavigation.html"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/webRequest.html",
+ "redirects to /extensions/webRequest.html"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/webRequestInternal.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/webstorePrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/webview.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/private_apis.html",
+ "apps/webviewTag.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/private_apis.html",
+ "apps/windows.html",
+ "redirects to /extensions/windows.html"
+ ],
+ [
+ 200,
+ "apps/private_apis.html",
+ "#icon",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/private_apis.html",
+ "#tooltip",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/private_apis.html",
+ "#badge",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/private_apis.html",
+ "#popups",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "apps/private_apis.html",
+ "#usage",
+ "target anchor not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-ContentWindow",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-WebRequestEventInteface",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-ClearDataOptions",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-ClearDataTypeSet",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-ClearDataOptions",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-ClearDataTypeSet",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-InjectDetails",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-InjectDetails",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-InjectDetails",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-InjectDetails",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#method-setUserAgentOverride",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-DialogController",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-NewWindow",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-MediaPermissionRequest",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-GeolocationPermissionRequest",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-PointerLockPermissionRequest",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-DownloadPermissionRequest",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/tags/webview.html",
+ "apps/tags/webviewTag.html#type-LoadPluginPermissionRequest",
+ "target page not found"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/bookmarks.html",
+ "redirects to /extensions/bookmarks.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/history.html",
+ "redirects to /extensions/history.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/topSites.html",
+ "redirects to /extensions/topSites.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/tabs.html",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/windows.html",
+ "redirects to /extensions/windows.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/webNavigation.html",
+ "redirects to /extensions/webNavigation.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/contentSettings.html",
+ "redirects to /extensions/contentSettings.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/debugger.html",
+ "redirects to /extensions/debugger.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/proxy.html",
+ "redirects to /extensions/proxy.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/activeTab.html",
+ "redirects to /extensions/activeTab.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/management.html",
+ "redirects to /extensions/management.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/privacy.html",
+ "redirects to /extensions/privacy.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/signedInDevices.html",
+ "redirects to /extensions/signedInDevices.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/ttsEngine.html",
+ "redirects to /extensions/ttsEngine.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/permission_warnings.html",
+ "apps/management.html#method-getPermissionWarningsByManifest",
+ "redirects to /extensions/management.html"
+ ],
+ [
+ 404,
+ "extensions/whats_new.html",
+ "extensions/manifest/geolocation.html",
+ "target page not found"
+ ],
+ [
+ 200,
+ "extensions/devtools_inspectedWindow.html",
+ "extensions/samples.html#devtools",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/runtime.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/runtime.html",
+ "apps/tabs.html#type-Tab",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/runtime.html",
+ "apps/tabs.html#method-connect",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 302,
+ "apps/runtime.html",
+ "apps/tabs.html#method-sendMessage",
+ "redirects to /extensions/tabs.html"
+ ],
+ [
+ 200,
+ "extensions/devtools_network.html",
+ "extensions/samples.html#devtools.network",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/desktop_notifications.html",
+ "apps/extension.html#method-getBackgroundPage",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 302,
+ "apps/desktop_notifications.html",
+ "apps/extension.html#method-getViews",
+ "redirects to /extensions/extension.html"
+ ],
+ [
+ 404,
+ "apps/manifest/externally_connectable.html",
+ "apps/manifest/runtime.html#method-connect",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/manifest/externally_connectable.html",
+ "apps/manifest/runtime.html#method-sendMessage",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/manifest/externally_connectable.html",
+ "apps/manifest/runtime.html#property-MessageSender-tlsChannelId",
+ "target page not found"
+ ],
+ [
+ 404,
+ "apps/manifest/externally_connectable.html",
+ "apps/manifest/runtime.html#property-MessageSender-tlsChannelId",
+ "target page not found"
+ ],
+ [
+ 200,
+ "extensions/omnibox.html",
+ "extensions/samples.html#omnibox",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/experimental_devtools_panels.html",
+ "apps/devtools_panels.html",
+ "redirects to /extensions/devtools_panels.html"
+ ],
+ [
+ 200,
+ "extensions/api_index.html",
+ "#icon",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/api_index.html",
+ "#tooltip",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/api_index.html",
+ "#badge",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/api_index.html",
+ "#popups",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/api_index.html",
+ "#manifest",
+ "target anchor not found"
+ ],
+ [
+ 302,
+ "apps/faq.html",
+ "apps/browserAction.html",
+ "redirects to /extensions/browserAction.html"
+ ],
+ [
+ 302,
+ "apps/faq.html",
+ "apps/pageAction.html",
+ "redirects to /extensions/pageAction.html"
+ ],
+ [
+ 302,
+ "apps/faq.html",
+ "apps/management.html",
+ "redirects to /extensions/management.html"
+ ],
+ [
+ 302,
+ "extensions/runtime.html",
+ "extensions/app_lifecycle.html",
+ "redirects to /apps/app_lifecycle.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/activityLogPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/adview.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/app.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/app_runtime.html",
+ "redirects to /apps/app_runtime.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/app_window.html",
+ "redirects to /apps/app_window.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/audio.html",
+ "redirects to /apps/audio.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/bluetooth.html",
+ "redirects to /apps/bluetooth.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/bookmarkManagerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/brailleDisplayPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/cast_channel.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/cast_streaming_rtpStream.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/cast_streaming_session.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/cast_streaming_udpTransport.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/chromeosInfoPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/cloudPrintPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/commandLinePrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/developerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/diagnostics.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/dial.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/dns.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/echoPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/enterprise_platformKeysPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/experimental_accessibility.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/fileBrowserHandlerInternal.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/fileBrowserPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/fileSystem.html",
+ "redirects to /apps/fileSystem.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/fileSystemProvider.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/firstRunPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/identityPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/idltest.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/inputMethodPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/logPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/manifestTypes.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/mdns.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/mediaGalleries.html",
+ "redirects to /apps/mediaGalleries.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/mediaGalleriesPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/mediaPlayerPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/metricsPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/networkingPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/pageActions.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/preferencesPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/screenlockPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/serial.html",
+ "redirects to /apps/serial.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/socket.html",
+ "redirects to /apps/socket.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/sockets_tcp.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/sockets_tcpServer.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/sockets_udp.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/streamsPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/syncFileSystem.html",
+ "redirects to /apps/syncFileSystem.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/app_storage.html",
+ "redirects to /apps/app_storage.html"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/system_display.html",
+ "redirects to /apps/system_display.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/system_network.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/systemIndicator.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/systemPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/terminalPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/test.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/usb.html",
+ "redirects to /apps/usb.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/virtualKeyboardPrivate.html",
+ "target page not found"
+ ],
+ [
+ 302,
+ "extensions/private_apis.html",
+ "extensions/wallpaper.html",
+ "redirects to /apps/wallpaper.html"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/wallpaperPrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/webRequestInternal.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/webstorePrivate.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/webview.html",
+ "target page not found"
+ ],
+ [
+ 404,
+ "extensions/private_apis.html",
+ "extensions/webviewTag.html",
+ "target page not found"
+ ],
+ [
+ 200,
+ "extensions/private_apis.html",
+ "#usage",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/tabs.html",
+ "#type-ImageDetails",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/tabs.html",
+ "#type-ImageDetails",
+ "target anchor not found"
+ ],
+ [
+ 200,
+ "extensions/declarativeContent.html",
+ "#type-Rule",
+ "target anchor not found"
+ ]
+] \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/first.json b/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/first.json
new file mode 100644
index 00000000000..6c8d5411d92
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/first.json
@@ -0,0 +1,310 @@
+[
+ {
+ "os": "win",
+ "versions": [
+ {
+ "base_trunk_revision": "r?",
+ "base_webkit_revision": "r?",
+ "branch_revision": "NA",
+ "channel": "canary",
+ "date": "00/00/00",
+ "prev_date": "05/13/13",
+ "prev_version": "29.0.1506.0",
+ "true_branch": null,
+ "v8_ver": null,
+ "version": "0.0.0.0",
+ "wk_ver": null
+ },
+ {
+ "base_trunk_revision": 198577,
+ "base_webkit_revision": 149738,
+ "branch_revision": 199640,
+ "channel": "dev",
+ "date": "05/13/13",
+ "prev_date": "05/09/13",
+ "prev_version": "28.0.1500.5",
+ "true_branch": "1500",
+ "v8_ver": "3.18.5.2",
+ "version": "28.0.1500.11",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 198567,
+ "channel": "beta",
+ "date": "05/08/13",
+ "prev_date": "05/01/13",
+ "prev_version": "27.0.1453.73",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.81",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 193017,
+ "channel": "stable",
+ "date": "04/09/13",
+ "prev_date": "03/26/13",
+ "prev_version": "26.0.1410.43",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.64",
+ "wk_ver": "537.31"
+ }
+ ]
+ },
+ {
+ "os": "ios",
+ "versions": [
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 191487,
+ "channel": "beta",
+ "date": "05/10/13",
+ "prev_date": "05/07/13",
+ "prev_version": "27.0.1453.9",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.1",
+ "version": "27.0.1453.10",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": "NA",
+ "channel": "stable",
+ "date": "04/29/13",
+ "prev_date": "04/09/13",
+ "prev_version": "26.0.1410.50",
+ "true_branch": null,
+ "v8_ver": null,
+ "version": "26.0.1410.53",
+ "wk_ver": null
+ }
+ ]
+ },
+ {
+ "os": "cros",
+ "versions": [
+ {
+ "base_trunk_revision": 198577,
+ "base_webkit_revision": 149738,
+ "branch_revision": 199640,
+ "channel": "dev",
+ "date": "05/14/13",
+ "prev_date": "05/09/13",
+ "prev_version": "28.0.1500.4",
+ "true_branch": "1500",
+ "v8_ver": "3.18.5.2",
+ "version": "28.0.1500.11",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 198939,
+ "channel": "beta",
+ "date": "05/10/13",
+ "prev_date": "05/03/13",
+ "prev_version": "27.0.1453.76",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.83",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 191765,
+ "channel": "stable",
+ "date": "04/11/13",
+ "prev_date": "04/04/13",
+ "prev_version": "25.0.1364.173",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.57",
+ "wk_ver": "537.31"
+ }
+ ]
+ },
+ {
+ "os": "cf",
+ "versions": [
+ {
+ "base_trunk_revision": 198577,
+ "base_webkit_revision": 149738,
+ "branch_revision": 199640,
+ "channel": "dev",
+ "date": "05/13/13",
+ "prev_date": "05/09/13",
+ "prev_version": "28.0.1500.5",
+ "true_branch": "1500",
+ "v8_ver": "3.18.5.2",
+ "version": "28.0.1500.11",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 198567,
+ "channel": "beta",
+ "date": "05/08/13",
+ "prev_date": "05/01/13",
+ "prev_version": "27.0.1453.73",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.81",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 193017,
+ "channel": "stable",
+ "date": "04/09/13",
+ "prev_date": "03/26/13",
+ "prev_version": "26.0.1410.43",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.64",
+ "wk_ver": "537.31"
+ }
+ ]
+ },
+ {
+ "os": "mac",
+ "versions": [
+ {
+ "base_trunk_revision": 199851,
+ "base_webkit_revision": 150220,
+ "branch_revision": "NA",
+ "channel": "canary",
+ "date": "05/14/13",
+ "prev_date": "05/13/13",
+ "prev_version": "29.0.1506.0",
+ "true_branch": "trunk",
+ "v8_ver": "3.19.0.2",
+ "version": "29.0.1507.0",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 198577,
+ "base_webkit_revision": 149738,
+ "branch_revision": 199640,
+ "channel": "dev",
+ "date": "05/13/13",
+ "prev_date": "05/09/13",
+ "prev_version": "28.0.1500.6",
+ "true_branch": "1500",
+ "v8_ver": "3.18.5.2",
+ "version": "28.0.1500.11",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 198567,
+ "channel": "beta",
+ "date": "05/08/13",
+ "prev_date": "05/01/13",
+ "prev_version": "27.0.1453.73",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.81",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 193261,
+ "channel": "stable",
+ "date": "04/10/13",
+ "prev_date": "04/09/13",
+ "prev_version": "26.0.1410.63",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.65",
+ "wk_ver": "537.31"
+ }
+ ]
+ },
+ {
+ "os": "linux",
+ "versions": [
+ {
+ "base_trunk_revision": 198577,
+ "base_webkit_revision": 149738,
+ "branch_revision": 199640,
+ "channel": "dev",
+ "date": "05/14/13",
+ "prev_date": "05/09/13",
+ "prev_version": "28.0.1500.5",
+ "true_branch": "1500",
+ "v8_ver": "3.18.5.2",
+ "version": "28.0.1500.11",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 198567,
+ "channel": "beta",
+ "date": "05/09/13",
+ "prev_date": "05/02/13",
+ "prev_version": "27.0.1453.73",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.81",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 192696,
+ "channel": "stable",
+ "date": "04/09/13",
+ "prev_date": "03/26/13",
+ "prev_version": "26.0.1410.43",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.63",
+ "wk_ver": "537.31"
+ }
+ ]
+ },
+ {
+ "os": "android",
+ "versions": [
+ {
+ "base_trunk_revision": 190564,
+ "base_webkit_revision": 146842,
+ "branch_revision": 199333,
+ "channel": "beta",
+ "date": "05/11/13",
+ "prev_date": "05/02/13",
+ "prev_version": "27.0.1453.74",
+ "true_branch": "1453",
+ "v8_ver": "3.17.6.13",
+ "version": "27.0.1453.85",
+ "wk_ver": "537.36"
+ },
+ {
+ "base_trunk_revision": 181864,
+ "base_webkit_revision": 142426,
+ "branch_revision": 191860,
+ "channel": "stable",
+ "date": "04/18/13",
+ "prev_date": "03/12/13",
+ "prev_version": "25.0.1364.169",
+ "true_branch": "1410",
+ "v8_ver": "3.16.14.11",
+ "version": "26.0.1410.58",
+ "wk_ver": "537.31"
+ }
+ ]
+ }
+] \ No newline at end of file
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/second.json b/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/second.json
new file mode 100644
index 00000000000..73264879175
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/branch_utility/second.json
@@ -0,0 +1,1112 @@
+{
+ "dateTimeFormat": "Gregorian",
+ "events": [
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 05 2013 18:19:28 PST-0800",
+ "title": "win\ndev - 28.0.1500.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 02 2013 17:53:25 PST-0800",
+ "title": "win\ndev - 27.0.1453.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Mar 29 2013 18:16:49 PST-0800",
+ "title": "win\ndev - 27.0.1453.9"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 28 2013 18:59:48 PST-0800",
+ "title": "win\ndev - 27.0.1453.6"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 27 2013 01:53:23 PST-0800",
+ "title": "win\ndev - 27.0.1453.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 21 2013 21:49:11 PST-0800",
+ "title": "win\ndev - 27.0.1448.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Mar 19 2013 00:30:49 PST-0800",
+ "title": "win\ndev - 27.0.1444.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 13 2013 17:35:03 PST-0800",
+ "title": "win\ndev - 27.0.1438.7"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 06 2013 18:32:27 PST-0800",
+ "title": "win\ndev - 27.0.1430.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Mar 05 2013 23:32:37 PST-0800",
+ "title": "win\ndev - 27.0.1430.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Mar 01 2013 01:11:51 PST-0800",
+ "title": "win\ndev - 27.0.1425.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Feb 26 2013 22:03:01 PST-0800",
+ "title": "win\ndev - 27.0.1423.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Feb 22 2013 00:09:52 PST-0800",
+ "title": "win\ndev - 26.0.1410.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 20 2013 00:15:47 PST-0800",
+ "title": "win\ndev - 26.0.1410.10"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Feb 14 2013 20:18:49 PST-0800",
+ "title": "win\ndev - 26.0.1410.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 13 2013 01:49:23 PST-0800",
+ "title": "win\ndev - 26.0.1410.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Feb 05 2013 00:43:13 PST-0800",
+ "title": "win\ndev - 26.0.1403.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jan 30 2013 21:11:13 PST-0800",
+ "title": "win\ndev - 26.0.1397.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 17 2013 22:44:44 PST-0800",
+ "title": "win\ndev - 26.0.1386.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jan 16 2013 01:48:57 PST-0800",
+ "title": "win\ndev - 26.0.1384.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 10 2013 23:07:12 PST-0800",
+ "title": "win\ndev - 25.0.1364.29"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jan 08 2013 00:05:42 PST-0800",
+ "title": "win\ndev - 25.0.1364.26"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Dec 20 2012 22:09:26 PST-0800",
+ "title": "win\ndev - 25.0.1364.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Dec 19 2012 02:42:39 PST-0800",
+ "title": "win\ndev - 25.0.1364.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 14 2012 02:37:09 PST-0800",
+ "title": "win\ndev - 25.0.1359.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Dec 10 2012 22:13:57 PST-0800",
+ "title": "win\ndev - 25.0.1354.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 07 2012 00:16:59 PST-0800",
+ "title": "win\ndev - 25.0.1349.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Nov 28 2012 23:28:57 PST-0800",
+ "title": "win\ndev - 25.0.1337.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Nov 13 2012 00:52:33 PST-0800",
+ "title": "win\ndev - 25.0.1323.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Nov 06 2012 19:47:19 PST-0800",
+ "title": "win\ndev - 24.0.1312.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Nov 01 2012 19:24:01 PST-0800",
+ "title": "win\ndev - 24.0.1312.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 31 2012 00:02:11 PST-0800",
+ "title": "win\ndev - 24.0.1312.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 24 2012 19:15:16 PST-0800",
+ "title": "win\ndev - 24.0.1305.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Oct 16 2012 21:19:13 PST-0800",
+ "title": "win\ndev - 24.0.1297.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Oct 09 2012 21:43:57 PST-0800",
+ "title": "win\ndev - 24.0.1290.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 03 2012 00:26:19 PST-0800",
+ "title": "win\ndev - 24.0.1284.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Sep 27 2012 18:02:10 PST-0800",
+ "title": "win\ndev - 23.0.1271.10"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 25 2012 21:21:48 PST-0800",
+ "title": "win\ndev - 23.0.1271.6"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Sep 20 2012 19:44:35 PST-0800",
+ "title": "win\ndev - 23.0.1271.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 18 2012 22:20:03 PST-0800",
+ "title": "win\ndev - 23.0.1270.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 11 2012 00:20:53 PST-0800",
+ "title": "win\ndev - 23.0.1262.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 04 2012 22:21:13 PST-0800",
+ "title": "win\ndev - 23.0.1255.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Aug 31 2012 18:17:38 PST-0800",
+ "title": "win\ndev - 23.0.1251.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 28 2012 00:25:54 PST-0800",
+ "title": "win\ndev - 23.0.1246.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 23 2012 23:54:55 PST-0800",
+ "title": "win\ndev - 23.0.1243.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 21 2012 23:18:47 PST-0800",
+ "title": "win\ndev - 22.0.1229.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 16 2012 23:21:39 PST-0800",
+ "title": "win\ndev - 22.0.1229.8"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 14 2012 23:47:34 PST-0800",
+ "title": "win\ndev - 22.0.1229.6"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 09 2012 20:31:55 PST-0800",
+ "title": "win\ndev - 22.0.1229.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Aug 08 2012 00:27:15 PST-0800",
+ "title": "win\ndev - 22.0.1229.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Jul 30 2012 23:47:10 PST-0800",
+ "title": "win\ndev - 22.0.1221.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jul 25 2012 18:00:05 PST-0800",
+ "title": "win\ndev - 22.0.1215.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jul 25 2012 17:44:05 PST-0800",
+ "title": "win\ndev - 22.0.1207.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Jul 23 2012 23:56:27 PST-0800",
+ "title": "win\ndev - 22.0.1215.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jul 17 2012 00:55:20 PST-0800",
+ "title": "win\ndev - 22.0.1207.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jul 10 2012 00:02:30 PST-0800",
+ "title": "win\ndev - 22.0.1201.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jun 29 2012 02:43:02 PST-0800",
+ "title": "win\ndev - 21.0.1180.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jun 26 2012 02:18:28 PST-0800",
+ "title": "win\ndev - 21.0.1180.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jun 22 2012 00:00:03 PST-0800",
+ "title": "win\ndev - 21.0.1180.4"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jun 19 2012 23:29:49 PST-0800",
+ "title": "win\ndev - 21.0.1180.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Jun 11 2012 23:44:12 PST-0800",
+ "title": "win\ndev - 21.0.1171.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jun 05 2012 00:47:31 PST-0800",
+ "title": "win\ndev - 21.0.1163.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed May 30 2012 00:52:58 PST-0800",
+ "title": "win\ndev - 21.0.1155.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue May 22 2012 00:44:35 PST-0800",
+ "title": "win\ndev - 21.0.1145.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu May 17 2012 23:34:11 PST-0800",
+ "title": "win\ndev - 20.0.1132.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed May 16 2012 00:34:12 PST-0800",
+ "title": "win\ndev - 20.0.1132.8"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri May 11 2012 20:57:40 PST-0800",
+ "title": "win\ndev - 20.0.1132.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed May 09 2012 01:08:05 PST-0800",
+ "title": "win\ndev - 20.0.1130.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri May 04 2012 01:43:59 PST-0800",
+ "title": "win\ndev - 20.0.1123.4"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed May 02 2012 06:26:54 PST-0800",
+ "title": "win\ndev - 20.0.1123.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Apr 25 2012 00:17:05 PST-0800",
+ "title": "win\ndev - 20.0.1115.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Apr 19 2012 19:17:27 PST-0800",
+ "title": "win\ndev - 20.0.1105.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Apr 18 2012 00:32:32 PST-0800",
+ "title": "win\ndev - 20.0.1105.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 10 2012 22:39:50 PST-0800",
+ "title": "win\ndev - 20.0.1096.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 06 2012 00:24:37 PST-0800",
+ "title": "win\ndev - 19.0.1084.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 03 2012 22:45:44 PST-0800",
+ "title": "win\ndev - 19.0.1084.9"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 29 2012 23:53:38 PST-0800",
+ "title": "win\ndev - 19.0.1084.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 28 2012 20:19:37 PST-0800",
+ "title": "win\ndev - 19.0.1081.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Mar 23 2012 22:11:16 PST-0800",
+ "title": "win\ndev - 19.0.1077.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 15 2012 15:39:24 PST-0800",
+ "title": "win\ndev - 19.0.1068.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Mar 13 2012 23:14:16 PST-0800",
+ "title": "win\ndev - 19.0.1068.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 07 2012 02:29:03 PST-0800",
+ "title": "win\ndev - 19.0.1061.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 29 2012 00:35:00 PST-0800",
+ "title": "win\ndev - 19.0.1055.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Feb 24 2012 00:15:03 PST-0800",
+ "title": "win\ndev - 19.0.1049.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 15 2012 01:26:52 PST-0800",
+ "title": "win\ndev - 19.0.1041.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Feb 10 2012 22:28:43 PST-0800",
+ "title": "win\ndev - 19.0.1036.7"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 08 2012 02:11:36 PST-0800",
+ "title": "win\ndev - 18.0.1025.7"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Feb 03 2012 02:05:01 PST-0800",
+ "title": "win\ndev - 18.0.1025.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 01 2012 00:50:43 PST-0800",
+ "title": "win\ndev - 18.0.1025.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jan 25 2012 01:52:32 PST-0800",
+ "title": "win\ndev - 18.0.1017.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jan 18 2012 02:18:21 PST-0800",
+ "title": "win\ndev - 18.0.1010.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jan 11 2012 04:43:37 PST-0800",
+ "title": "win\ndev - 18.0.1003.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 05 2012 00:02:51 PST-0800",
+ "title": "win\ndev - 17.0.963.26"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 16 2011 02:56:07 PST-0800",
+ "title": "win\ndev - 17.0.963.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Dec 13 2011 00:20:16 PST-0800",
+ "title": "win\ndev - 17.0.963.6"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 09 2011 00:45:52 PST-0800",
+ "title": "win\ndev - 17.0.963.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Dec 06 2011 23:45:11 PST-0800",
+ "title": "win\ndev - 17.0.963.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Nov 18 2011 00:13:13 PST-0800",
+ "title": "win\ndev - 17.0.942.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Nov 15 2011 00:36:36 PST-0800",
+ "title": "win\ndev - 17.0.938.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Nov 08 2011 00:01:54 PST-0800",
+ "title": "win\ndev - 17.0.932.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Nov 03 2011 23:38:13 PST-0800",
+ "title": "win\ndev - 17.0.928.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Nov 01 2011 23:05:53 PST-0800",
+ "title": "win\ndev - 16.0.912.21"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Oct 27 2011 23:08:29 PST-0800",
+ "title": "win\ndev - 16.0.912.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 26 2011 00:33:00 PST-0800",
+ "title": "win\ndev - 16.0.912.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Oct 20 2011 23:31:54 PST-0800",
+ "title": "win\ndev - 16.0.912.4"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Oct 18 2011 23:21:28 PST-0800",
+ "title": "win\ndev - 16.0.912.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Oct 10 2011 23:51:01 PST-0800",
+ "title": "win\ndev - 16.0.904.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Oct 04 2011 00:00:02 PST-0800",
+ "title": "win\ndev - 16.0.899.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 27 2011 00:01:19 PST-0800",
+ "title": "win\ndev - 16.0.891.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Sep 23 2011 00:00:04 PST-0800",
+ "title": "win\ndev - 16.0.889.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Sep 21 2011 00:29:45 PST-0800",
+ "title": "win\ndev - 15.0.874.21"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Sep 15 2011 23:35:15 PST-0800",
+ "title": "win\ndev - 15.0.874.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 13 2011 23:00:02 PST-0800",
+ "title": "win\ndev - 15.0.874.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Sep 09 2011 01:15:01 PST-0800",
+ "title": "win\ndev - 15.0.874.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Sep 07 2011 23:28:26 PST-0800",
+ "title": "win\ndev - 15.0.874.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 30 2011 00:53:44 PST-0800",
+ "title": "win\ndev - 15.0.865.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Aug 24 2011 23:45:01 PST-0800",
+ "title": "win\ndev - 15.0.861.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Aug 17 2011 17:50:57 PST-0800",
+ "title": "win\ndev - 15.0.854.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 16 2011 23:32:55 PST-0800",
+ "title": "win\ndev - 15.0.849.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 16 2011 23:17:42 PST-0800",
+ "title": "win\ndev - 15.0.854.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 11 2011 23:58:00 PST-0800",
+ "title": "win\ndev - 15.0.849.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Aug 10 2011 23:45:12 PST-0800",
+ "title": "win\ndev - 14.0.835.35"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Aug 08 2011 23:39:27 PST-0800",
+ "title": "win\ndev - 14.0.835.29"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Aug 05 2011 00:20:22 PST-0800",
+ "title": "win\ndev - 14.0.835.18"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Aug 01 2011 23:30:39 PST-0800",
+ "title": "win\ndev - 14.0.835.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jul 29 2011 00:07:02 PST-0800",
+ "title": "win\ndev - 14.0.835.8"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jul 27 2011 00:29:22 PST-0800",
+ "title": "win\ndev - 14.0.835.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jul 19 2011 00:18:39 PST-0800",
+ "title": "win\ndev - 14.0.825.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jul 12 2011 00:19:19 PST-0800",
+ "title": "win\ndev - 14.0.814.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jun 28 2011 00:25:51 PST-0800",
+ "title": "win\ndev - 14.0.803.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Jun 20 2011 23:31:21 PST-0800",
+ "title": "win\ndev - 14.0.797.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 16 2011 23:24:40 PST-0800",
+ "title": "win\ndev - 14.0.794.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 16 2011 00:50:32 PST-0800",
+ "title": "win\ndev - 13.0.782.24"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jun 14 2011 01:22:42 PST-0800",
+ "title": "win\ndev - 13.0.782.20"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jun 10 2011 00:54:02 PST-0800",
+ "title": "win\ndev - 13.0.782.14"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jun 08 2011 21:28:42 PST-0800",
+ "title": "win\ndev - 13.0.782.13"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jun 08 2011 00:42:42 PST-0800",
+ "title": "win\ndev - 13.0.782.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Jun 06 2011 05:45:01 PST-0800",
+ "title": "win\ndev - 13.0.782.10"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 02 2011 00:18:23 PST-0800",
+ "title": "win\ndev - 13.0.782.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue May 24 2011 00:23:25 PST-0800",
+ "title": "win\ndev - 13.0.772.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue May 17 2011 21:36:01 PST-0800",
+ "title": "win\ndev - 13.0.767.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu May 12 2011 21:30:02 PST-0800",
+ "title": "win\ndev - 13.0.761.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Sat May 07 2011 00:26:42 PST-0800",
+ "title": "win\ndev - 12.0.742.30"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri May 06 2011 00:50:01 PST-0800",
+ "title": "win\ndev - 12.0.742.21"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue May 03 2011 01:32:45 PST-0800",
+ "title": "win\ndev - 12.0.742.16"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 29 2011 00:47:01 PST-0800",
+ "title": "win\ndev - 12.0.742.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 26 2011 00:48:15 PST-0800",
+ "title": "win\ndev - 12.0.742.9"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 22 2011 21:52:40 PST-0800",
+ "title": "win\ndev - 12.0.742.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Apr 21 2011 01:07:21 PST-0800",
+ "title": "win\ndev - 12.0.742.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Apr 13 2011 00:18:03 PST-0800",
+ "title": "win\ndev - 12.0.733.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Apr 06 2011 01:25:31 PST-0800",
+ "title": "win\ndev - 12.0.725.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 24 2011 23:56:50 PST-0800",
+ "title": "win\ndev - 12.0.712.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Mar 21 2011 23:12:14 PST-0800",
+ "title": "win\ndev - 11.0.696.16"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 17 2011 23:35:19 PST-0800",
+ "title": "win\ndev - 11.0.696.14"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 16 2011 00:37:36 PST-0800",
+ "title": "win\ndev - 11.0.696.12"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Mar 11 2011 02:25:22 PST-0800",
+ "title": "win\ndev - 11.0.696.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Mar 09 2011 02:42:49 PST-0800",
+ "title": "win\ndev - 11.0.696.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Mar 03 2011 22:40:08 PST-0800",
+ "title": "win\ndev - 11.0.686.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Mar 01 2011 20:35:16 PST-0800",
+ "title": "win\ndev - 11.0.686.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Mar 01 2011 02:36:12 PST-0800",
+ "title": "win\ndev - 11.0.686.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Feb 17 2011 23:15:13 PST-0800",
+ "title": "win\ndev - 11.0.672.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 16 2011 23:02:09 PST-0800",
+ "title": "win\ndev - 10.0.648.82"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Feb 09 2011 01:08:19 PST-0800",
+ "title": "win\ndev - 10.0.648.45"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Feb 04 2011 01:31:33 PST-0800",
+ "title": "win\ndev - 10.0.648.18"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Feb 01 2011 04:02:58 PST-0800",
+ "title": "win\ndev - 10.0.648.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 27 2011 01:58:03 PST-0800",
+ "title": "win\ndev - 10.0.648.6"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 20 2011 20:34:10 PST-0800",
+ "title": "win\ndev - 10.0.642.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Jan 11 2011 20:29:22 PST-0800",
+ "title": "win\ndev - 10.0.634.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jan 06 2011 06:16:24 PST-0800",
+ "title": "win\ndev - 10.0.628.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Dec 20 2010 19:43:27 PST-0800",
+ "title": "win\ndev - 10.0.612.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Dec 16 2010 23:09:02 PST-0800",
+ "title": "win\ndev - 10.0.612.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Dec 14 2010 01:51:30 PST-0800",
+ "title": "win\ndev - 9.0.597.19"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 10 2010 17:40:35 PST-0800",
+ "title": "win\ndev - 9.0.597.16"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Dec 10 2010 02:13:57 PST-0800",
+ "title": "win\ndev - 9.0.597.15"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Dec 07 2010 02:02:57 PST-0800",
+ "title": "win\ndev - 9.0.597.10"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Dec 01 2010 22:58:13 PST-0800",
+ "title": "win\ndev - 9.0.597.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Nov 19 2010 01:08:11 PST-0800",
+ "title": "win\ndev - 9.0.587.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Nov 10 2010 00:46:46 PST-0800",
+ "title": "win\ndev - 9.0.576.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Nov 05 2010 01:20:03 PST-0800",
+ "title": "win\ndev - 9.0.570.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Nov 03 2010 01:02:56 PST-0800",
+ "title": "win\ndev - 9.0.570.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Sat Oct 30 2010 01:11:40 PST-0800",
+ "title": "win\ndev - 8.0.552.23"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 27 2010 01:07:18 PST-0800",
+ "title": "win\ndev - 8.0.552.18"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Oct 21 2010 23:21:07 PST-0800",
+ "title": "win\ndev - 8.0.552.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Oct 19 2010 03:29:35 PST-0800",
+ "title": "win\ndev - 8.0.552.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 13 2010 00:03:39 PST-0800",
+ "title": "win\ndev - 8.0.552.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Oct 06 2010 22:51:53 PST-0800",
+ "title": "win\ndev - 7.0.544.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Sep 30 2010 20:34:16 PST-0800",
+ "title": "win\ndev - 7.0.536.2"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Sep 28 2010 22:49:52 PST-0800",
+ "title": "win\ndev - 7.0.517.24"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Sep 24 2010 23:15:18 PST-0800",
+ "title": "win\ndev - 7.0.517.17"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Sep 17 2010 01:02:24 PST-0800",
+ "title": "win\ndev - 7.0.517.8"
+ },
+ {
+ "durationEvent": false,
+ "start": "Mon Sep 13 2010 21:15:08 PST-0800",
+ "title": "win\ndev - 7.0.517.5"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Sep 09 2010 01:03:59 PST-0800",
+ "title": "win\ndev - 7.0.517.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 26 2010 00:05:03 PST-0800",
+ "title": "win\ndev - 7.0.503.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Aug 17 2010 22:28:45 PST-0800",
+ "title": "win\ndev - 6.0.495.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Aug 13 2010 14:23:58 PST-0800",
+ "title": "win\ndev - 6.0.490.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Aug 06 2010 22:53:12 PST-0800",
+ "title": "win\ndev - 6.0.472.25"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Aug 05 2010 00:22:02 PST-0800",
+ "title": "win\ndev - 6.0.472.22"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jul 30 2010 23:14:34 PST-0800",
+ "title": "win\ndev - 6.0.472.14"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jul 28 2010 23:49:30 PST-0800",
+ "title": "win\ndev - 6.0.472.11"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jul 22 2010 00:09:53 PST-0800",
+ "title": "win\ndev - 6.0.472.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jul 15 2010 22:58:14 PST-0800",
+ "title": "win\ndev - 6.0.466.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jul 09 2010 14:18:49 PST-0800",
+ "title": "win\ndev - 6.0.458.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jul 02 2010 23:12:13 PST-0800",
+ "title": "win\ndev - 6.0.453.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jun 25 2010 01:37:06 PST-0800",
+ "title": "win\ndev - 6.0.447.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Jun 18 2010 19:49:04 PST-0800",
+ "title": "win\ndev - 6.0.437.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 17 2010 23:02:50 PST-0800",
+ "title": "win\ndev - 6.0.427.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 17 2010 18:31:39 PST-0800",
+ "title": "win\ndev - 6.0.437.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Jun 09 2010 17:42:14 PST-0800",
+ "title": "win\ndev - 6.0.427.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu Jun 03 2010 18:37:41 PST-0800",
+ "title": "win\ndev - 6.0.422.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Thu May 20 2010 21:03:10 PST-0800",
+ "title": "win\ndev - 6.0.408.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri May 14 2010 03:19:25 PST-0800",
+ "title": "win\ndev - 6.0.401.1"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri May 07 2010 01:36:38 PST-0800",
+ "title": "win\ndev - 5.0.396.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue May 04 2010 01:31:54 PST-0800",
+ "title": "win\ndev - 5.0.375.29"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 30 2010 22:08:37 PST-0800",
+ "title": "win\ndev - 5.0.375.28"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 27 2010 20:56:13 PST-0800",
+ "title": "win\ndev - 5.0.375.23"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 23 2010 00:30:19 PST-0800",
+ "title": "win\ndev - 5.0.375.17"
+ },
+ {
+ "durationEvent": false,
+ "start": "Sat Apr 17 2010 01:18:06 PST-0800",
+ "title": "win\ndev - 5.0.375.9"
+ },
+ {
+ "durationEvent": false,
+ "start": "Wed Apr 14 2010 23:39:10 PST-0800",
+ "title": "win\ndev - 5.0.375.7"
+ },
+ {
+ "durationEvent": false,
+ "start": "Tue Apr 13 2010 01:11:37 PST-0800",
+ "title": "win\ndev - 5.0.375.3"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 09 2010 01:12:39 PST-0800",
+ "title": "win\ndev - 5.0.371.0"
+ },
+ {
+ "durationEvent": false,
+ "start": "Fri Apr 02 2010 18:16:57 PST-0800",
+ "title": "win\ndev - 5.0.366.2"
+ }
+ ],
+ "wiki-section": "A brief history of Chrome",
+ "wiki-url": "http://simile.mit.edu/shelf/"
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/file_system/stat_result.json b/chromium/chrome/common/extensions/docs/server2/test_data/file_system/stat_result.json
new file mode 100644
index 00000000000..a6c93703063
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/file_system/stat_result.json
@@ -0,0 +1,87 @@
+{
+ "extension_api.h": "146163",
+ "_permission_features.json": "150186",
+ "file_system.idl": "150515",
+ "input_ime.json": "149101",
+ "context_menus.json": "140112",
+ "app.json": "133722",
+ "browser_action.json": "148043",
+ "test.json": "145505",
+ "chromeos_info_private.json": "150737",
+ "font_settings.json": "147621",
+ "management.json": "151113",
+ "bookmark_manager.json": "140864",
+ "experimental_commands.json": "149147",
+ "web_navigation.json": "148204",
+ "echo_private.json": "136747",
+ "i18n.json": "149045",
+ "storage.json": "149837",
+ "experimental_media_galleries.idl": "150164",
+ "web_request_internal.json": "138481",
+ "app_window.idl": "147710",
+ "web_request.json": "138481",
+ "windows.json": "140947",
+ "terminal_private.json": "136747",
+ "experimental_rlz.json": "136747",
+ "system_private.json": "136747",
+ "content_settings.json": "136747",
+ "file_browser_handler.json": "149101",
+ "devtools.json": "124878",
+ "experimental_dns.idl": "136747",
+ "experimental_speech_input.json": "136747",
+ "api.gyp": "151113",
+ "experimental_identity.idl": "147523",
+ "runtime.json": "148956",
+ "alarms.idl": "143049",
+ "declarative_web_request.json": "150421",
+ "devtools/": "149291",
+ "experimental_idltest.idl": "138707",
+ "script_badge.json": "146930",
+ "extension_api_unittest.cc": "149819",
+ "events.json": "143168",
+ "tts.json": "134209",
+ "metrics_private.json": "136747",
+ "experimental_usb.idl": "144221",
+ "webstore.json": "127930",
+ "managed_mode_private.json": "142720",
+ "downloads.idl": "146201",
+ "serial.idl": "150186",
+ "page_capture.json": "147890",
+ "_manifest_features.json": "150827",
+ "browsing_data.json": "142133",
+ "top_sites.json": "136747",
+ "page_actions.json": "136747",
+ "page_action.json": "137065",
+ "experimental_discovery.idl": "149243",
+ "history.json": "129086",
+ "bookmarks.json": "149307",
+ "permissions.json": "124878",
+ "experimental_app.json": "148848",
+ "media_player_private.json": "136747",
+ "experimental_input_virtual_keyboard.json": "138223",
+ "privacy.json": "136588",
+ "tabs.json": "149631",
+ "tts_engine.json": "136747",
+ "experimental_bluetooth.idl": "150898",
+ "idle.json": "124878",
+ "input_method_private.json": "136747",
+ "experimental_accessibility.json": "136747",
+ "push_messaging.idl": "149536",
+ "webstore_private.json": "150455",
+ "extension.json": "146855",
+ "extension_api.cc": "149819",
+ "file_browser_private.json": "150806",
+ "cloud_print_private.json": "149303",
+ "omnibox.json": "124878",
+ "processes.json": "137690",
+ "proxy.json": "136588",
+ "file_browser_handler_internal.json": "142683",
+ "types.json": "146093",
+ "experimental_record.json": "145342",
+ "debugger.json": "147894",
+ "socket.idl": "150190",
+ "OWNERS": "150079",
+ "cookies.json": "124878",
+ "infobars.json": "136747",
+ "wallpaper_private.json": "148400"
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/github_file_system/expected_list.json b/chromium/chrome/common/extensions/docs/server2/test_data/github_file_system/expected_list.json
new file mode 100644
index 00000000000..78ef29670b4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/github_file_system/expected_list.json
@@ -0,0 +1,41 @@
+{
+ "/": [
+ ".gitignore",
+ "README.md",
+ "analytics/",
+ "appsquare/",
+ "browser-tag/",
+ "calculator/",
+ "camera-capture/",
+ "clock/",
+ "context-menu/",
+ "diff/",
+ "dojo/",
+ "filesystem-access/",
+ "frameless-window/",
+ "gdocs/",
+ "hello-world/",
+ "identity/",
+ "io2012-presentation/",
+ "ioio/",
+ "mdns-browser/",
+ "mini-code-edit/",
+ "nodejs-net.coffee",
+ "sandbox/",
+ "sandboxed-content/",
+ "serial-control-signals/",
+ "serial/",
+ "servo/",
+ "singleton/",
+ "storage/",
+ "telnet/",
+ "text-editor/",
+ "udp/",
+ "usb/",
+ "weather/",
+ "webgl/",
+ "webintents/",
+ "windows/",
+ "zephyr_hxm/"
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/rietveld_patcher/expected/extensions_sidenav.json b/chromium/chrome/common/extensions/docs/server2/test_data/rietveld_patcher/expected/extensions_sidenav.json
new file mode 100644
index 00000000000..e5c4cc2e831
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/rietveld_patcher/expected/extensions_sidenav.json
@@ -0,0 +1,6 @@
+[
+ {
+ "title": "Test Foo",
+ "fileName": "test_foo.html"
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/expected.json b/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/expected.json
new file mode 100644
index 00000000000..904e5d809b4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/expected.json
@@ -0,0 +1,10 @@
+[
+ {
+ "api_calls": [
+ { "name": "bobaloo.foop" },
+ { "name": "jimmy.bobaloo.loopoo" },
+ { "name": "jimmy.jimmy" },
+ { "name": "hallo.bobaloo" }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/samples.json b/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/samples.json
new file mode 100644
index 00000000000..4c0152718c1
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/samples_data_source/samples.json
@@ -0,0 +1,24 @@
+[
+ {
+ "api_calls": [
+ { "name": "bobaloo.foop" },
+ { "name": "jimmy.bobaloo.loopoo" },
+ { "name": "jimmy.jimmy" },
+ { "name": "hallo.bobaloo" }
+ ]
+ },
+ {
+ "api_calls": [
+ { "name": "timmy.bobaloo.affa" },
+ { "name": "jimmy.baloo.loopoo" },
+ { "name": "jimmy.jimmy" }
+ ]
+ },
+ {
+ "api_calls": [
+ { "name": "torta.lamb.paco" },
+ { "name": "jimmy.baloo.loopoo" },
+ { "name": "jimmy.jimmy" }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/template_data_source/partials/input.json b/chromium/chrome/common/extensions/docs/server2/test_data/template_data_source/partials/input.json
new file mode 100644
index 00000000000..e089d8b493e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/template_data_source/partials/input.json
@@ -0,0 +1,7 @@
+{
+ "name": {
+ "first": "Bob",
+ "last": "Jones"
+ },
+ "part": "elbow"
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/test_json/add_rules_def_test.json b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/add_rules_def_test.json
new file mode 100644
index 00000000000..01fbab60cc8
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/add_rules_def_test.json
@@ -0,0 +1,19 @@
+{
+ "namespace": "events",
+ "description": "A namespace to contain addRules.",
+ "types": [
+ {
+ "name": "Event",
+ "type": "object",
+ "description": "The object to contain addRules.",
+ "functions": [
+ {
+ "name": "addRules",
+ "type": "function",
+ "description": "Registers rules to handle events.",
+ "parameters": [ { "name": "notable_name_to_check_for" } ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/test_json/expected_tester.json b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/expected_tester.json
new file mode 100644
index 00000000000..4c91dfd8da8
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/expected_tester.json
@@ -0,0 +1,218 @@
+{
+ "functions": [
+ {
+ "name": "get",
+ "parameters": [
+ {
+ "parentName": "get",
+ "functions": [],
+ "choices": [
+ {
+ "properties": [],
+ "name": "string",
+ "simple_type": "string",
+ "functions": [],
+ "events": [],
+ "id": "type-a-string",
+ "description": null
+ },
+ {
+ "properties": [],
+ "last": true,
+ "name": "array",
+ "functions": [],
+ "events": [],
+ "array": {
+ "properties": [],
+ "name": "arrayType",
+ "simple_type": "string",
+ "functions": [],
+ "events": [],
+ "id": "type-array-arrayType",
+ "description": null
+ },
+ "id": "type-a-array",
+ "description": null
+ }
+ ],
+ "name": "a",
+ "parameters": [],
+ "id": "property-get-a",
+ "returns": null,
+ "optional": null,
+ "properties": [],
+ "description": "a param"
+ },
+ {
+ "parentName": "get",
+ "last": true,
+ "name": "callback",
+ "simple_type": "function",
+ "optional": false,
+ "id": "property-get-callback",
+ "description": null
+ }
+ ],
+ "callback": {
+ "parameters": [
+ {
+ "description": null,
+ "array": {
+ "properties": [],
+ "name": "resultsType",
+ "functions": [],
+ "events": [],
+ "link": {
+ "text": "TypeA",
+ "href": "tester.html#type-TypeA",
+ "name": "TypeA"
+ },
+ "id": "type-results-resultsType",
+ "description": null
+ },
+ "optional": null,
+ "id": "property-callback-results",
+ "parentName": "callback",
+ "functions": [],
+ "last": true,
+ "name": "results",
+ "parameters": [],
+ "properties": [],
+ "returns": null
+ }
+ ],
+ "optional": false,
+ "name": "callback",
+ "simple_type": {
+ "simple_type": "function"
+ }
+ },
+ "returns": null,
+ "id": "method-get",
+ "description": "Gets stuff."
+ }
+ ],
+ "properties": [],
+ "name": "tester",
+ "description": "a test api",
+ "introList": [
+ {
+ "content": [
+ {
+ "text": "a test api"
+ }
+ ],
+ "title": "Description"
+ },
+ {
+ "content": [
+ {
+ "message": true,
+ "trunk": true,
+ "version": null
+ }
+ ],
+ "title": "Availability"
+ },
+ {
+ "content": [
+ {
+ "text": "\"thing1\", \"thing2\"",
+ "perm": "tester"
+ },
+ {
+ "text": "is an API for testing things."
+ }
+ ],
+ "title": "Permissions"
+ },
+ {
+ "content": [
+ {
+ "text": "Welcome!",
+ "link": "https://tester.test.com/welcome.html"
+ }
+ ],
+ "title": "Learn More"
+ }
+ ],
+ "types": [
+ {
+ "properties": [
+ {
+ "parentName": "TypeA",
+ "functions": [],
+ "name": "b",
+ "parameters": [],
+ "id": "property-TypeA-b",
+ "array": {
+ "properties": [],
+ "name": "bType",
+ "functions": [],
+ "events": [],
+ "link": {
+ "text": "TypeA",
+ "href": "tester.html#type-TypeA",
+ "name": "TypeA"
+ },
+ "id": "type-b-bType",
+ "description": null
+ },
+ "returns": null,
+ "optional": true,
+ "properties": [],
+ "description": "List of TypeA."
+ }
+ ],
+ "name": "TypeA",
+ "simple_type": "object",
+ "functions": [],
+ "events": [],
+ "id": "type-TypeA",
+ "description": "A cool thing."
+ }
+ ],
+ "events": [
+ {
+ "callback": null,
+ "name": "EventA",
+ "parameters": [
+ {
+ "parentName": "EventA",
+ "functions": [],
+ "simple_type": "string",
+ "name": "id",
+ "parameters": [],
+ "id": "property-EventA-id",
+ "returns": null,
+ "optional": null,
+ "properties": [],
+ "description": null
+ },
+ {
+ "description": null,
+ "link": {
+ "text": "TypeA",
+ "href": "tester.html#type-TypeA",
+ "name": "TypeA"
+ },
+ "optional": null,
+ "id": "property-EventA-bookmark",
+ "parentName": "EventA",
+ "functions": [],
+ "last": true,
+ "name": "bookmark",
+ "parameters": [],
+ "properties": [],
+ "returns": null
+ }
+ ],
+ "supportsRules": false,
+ "filters": [],
+ "conditions": [],
+ "id": "event-EventA",
+ "actions": [],
+ "description": "A cool event."
+ }
+ ]
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/test_json/fake_data_source.json b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/fake_data_source.json
new file mode 100644
index 00000000000..49a4b1ce5a5
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/fake_data_source.json
@@ -0,0 +1,112 @@
+{
+ "baz": {
+ "events": [
+ { "name": "baz_e1" },
+ { "name": "baz_e2" },
+ { "name": "baz_e3" }
+ ],
+ "functions": [
+ { "name": "baz_f1" },
+ { "name": "baz_f2" },
+ { "name": "baz_f3" }
+ ],
+ "types": [
+ { "name": "baz_t1" },
+ { "name": "baz_t2" },
+ { "name": "baz_t3" }
+ ],
+ "properties": [
+ { "name": "baz_p1" },
+ { "name": "baz_p2" },
+ { "name": "baz_p3" }
+ ]
+ },
+ "bar.bon": {
+ "events": [
+ { "name": "bar_bon_e1" },
+ { "name": "bar_bon_e2" },
+ { "name": "bar_bon_e3" }
+ ],
+ "functions": [
+ { "name": "bar_bon_f1" },
+ { "name": "bar_bon_f2" },
+ { "name": "bar_bon_f3" }
+ ],
+ "types": [
+ { "name": "bar_bon_t1" },
+ { "name": "bar_bon_t2" },
+ { "name": "bar_bon_t3" }
+ ],
+ "properties": [
+ { "name": "bar_bon_p1" },
+ { "name": "bar_bon_p2" },
+ { "name": "bar_bon_p3" }
+ ]
+ },
+ "bar": {
+ "events": [
+ { "name": "bar_e1" },
+ { "name": "bar_e2" },
+ { "name": "bar_e3" }
+ ],
+ "functions": [
+ { "name": "bar_f1" },
+ { "name": "bar_f2" },
+ { "name": "bar_f3" }
+ ],
+ "types": [
+ {
+ "name": "bar_t1",
+ "properties": [
+ { "name": "bar_t1_p1" }
+ ]
+ },
+ {
+ "name": "bar_t2",
+ "properties": [
+ { "name": "bar_t2_p1" }
+ ]
+ },
+ { "name": "bar_t3" },
+ { "name": "bon" }
+ ],
+ "properties": [
+ { "name": "bar_p1" },
+ { "name": "bar_p2" },
+ {
+ "name": "bar_p3",
+ "link": { "name": "bar_t1" }
+ }
+ ]
+ },
+ "foo": {
+ "events": [
+ { "name": "foo_e1" },
+ { "name": "foo_e2" },
+ { "name": "foo_e3" }
+ ],
+ "functions": [
+ { "name": "foo_f1" },
+ { "name": "foo_f2" },
+ { "name": "foo_f3" }
+ ],
+ "types": [
+ { "name": "foo_t1" },
+ { "name": "foo_t2" },
+ {
+ "name": "foo_t3",
+ "events": [
+ { "name": "foo_t3_e1" }
+ ]
+ }
+ ],
+ "properties": [
+ {
+ "name": "foo_p1",
+ "link": { "name": "foo_t3" }
+ },
+ { "name": "foo_p2" },
+ { "name": "foo_p3" }
+ ]
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/test_json/ref_test_data_source.json b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/ref_test_data_source.json
new file mode 100644
index 00000000000..11216091a63
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/ref_test_data_source.json
@@ -0,0 +1,23 @@
+{
+ "ref_test": {
+ "types": [
+ { "name": "type1" },
+ { "name": "type2" },
+ { "name": "type3" }
+ ],
+ "events": [
+ { "name": "event1" }
+ ],
+ "properties": [
+ { "name": "prop1" }
+ ],
+ "functions": [
+ { "name": "func1" }
+ ]
+ },
+ "other": {
+ "types": [
+ { "name": "type2" }
+ ]
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/server2/test_data/test_json/test_file_data_source.json b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/test_file_data_source.json
new file mode 100644
index 00000000000..13bd52a48b0
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/server2/test_data/test_json/test_file_data_source.json
@@ -0,0 +1,13 @@
+{
+ "tester": {
+ "types": [
+ { "name": "TypeA" }
+ ],
+ "functions": [
+ { "name": "get" }
+ ],
+ "events": [
+ { "name": "EventA" }
+ ]
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/api_availabilities.json b/chromium/chrome/common/extensions/docs/templates/json/api_availabilities.json
new file mode 100644
index 00000000000..5dc1fe7eef4
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/api_availabilities.json
@@ -0,0 +1,47 @@
+// Availability for these APIs either can't be accurately found or would take a
+// significant amount of specific logic to determine (devtools).
+// The versions listed here were drawn either from hardcoded HTML intro tables
+// or from the whats_new page.
+{
+ "devtools.inspectedWindow": {
+ "channel": "stable",
+ "version": 18
+ },
+ "devtools.network": {
+ "channel": "stable",
+ "version": 18
+ },
+ "devtools.panels": {
+ "channel": "stable",
+ "version": 18
+ },
+ "input.ime": {
+ "channel": "stable",
+ "version": 21
+ },
+ "mediaGalleries": {
+ "channel": "stable",
+ "version": 23
+ },
+ "notifications": {
+ "channel": "stable",
+ "version": 28
+ },
+ "storage": {
+ "channel": "stable",
+ "version": 20
+ },
+ "pageCapture": {
+ "channel": "stable",
+ "version": 18
+ },
+ "webstore": {
+ // Only 'webstorePrivate' is present before version 19.
+ "channel": "stable",
+ "version": 15
+ },
+ "webviewTag": {
+ "channel": "stable",
+ "version": 25
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/apps_sidenav.json b/chromium/chrome/common/extensions/docs/templates/json/apps_sidenav.json
new file mode 100644
index 00000000000..0d6d1cdecbd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/apps_sidenav.json
@@ -0,0 +1,278 @@
+[
+ {
+ "title": "Discover",
+ "items": [
+ {
+ "title": "What Are Chrome Apps?",
+ "href": "/apps/about_apps.html"
+ }
+ ]
+ },
+ {
+ "title": "Develop",
+ "items": [
+ {
+ "title": "Create Your First App",
+ "href": "/apps/first_app.html"
+ },
+ {
+ "title": "Tutorials",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Learn with a Codelab",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "About this Codelab",
+ "href": "/apps/app_codelab.html"
+ },
+ {
+ "title": "1 - Set Up Development Environment",
+ "href": "/apps/app_codelab1_setup.html"
+ },
+ {
+ "title": "2 - Create Basic App",
+ "href": "/apps/app_codelab2_basic.html"
+ },
+ {
+ "title": "3 - Create MVC",
+ "href": "/apps/app_codelab3_mvc.html"
+ },
+ {
+ "title": "4 - Save and Fetch Data",
+ "href": "/apps/app_codelab5_data.html"
+ },
+ {
+ "title": "5 - Manage App Lifecycle",
+ "href": "/apps/app_codelab6_lifecycle.html"
+ },
+ {
+ "title": "6 - Access User's Data",
+ "href": "/apps/app_codelab7_useridentification.html"
+ },
+ {
+ "title": "7 - Access Web Resources",
+ "href": "/apps/app_codelab8_webresources.html"
+ },
+ {
+ "title": "8 - Publish App",
+ "href": "/apps/app_codelab_10_publishing.html"
+ }
+ ]
+ },
+ {
+ "title": "MVC Architecture & Frameworks",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "About MVC Architecture",
+ "href": "/apps/app_frameworks.html"
+ },
+ {
+ "title": "Build Apps with AngularJS",
+ "href": "/apps/angular_framework.html"
+ },
+ {
+ "title": "Build Apps with Sencha Ext JS",
+ "href": "/apps/sencha_framework.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Chrome App Concepts",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "The Fundamentals",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "App Architecture",
+ "href": "/apps/app_architecture.html"
+ },
+ {
+ "title": "App Lifecycle",
+ "href": "/apps/app_lifecycle.html"
+ },
+ {
+ "title": "Offline First",
+ "href": "/apps/offline_apps.html"
+ },
+ {
+ "title": "External Content",
+ "href": "/apps/app_external.html"
+ }
+ ]
+ },
+ {
+ "title": "Security",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Content Security Policy",
+ "href": "/apps/contentSecurityPolicy.html"
+ }
+ ]
+ },
+ {
+ "title": "Cloud-Enable Your App",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Cloud Messaging",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "About Cloud Messaging",
+ "href": "/apps/cloudMessaging.html"
+ },
+ {
+ "title": "Client Reference",
+ "href": "/apps/pushMessaging.html"
+ },
+ {
+ "title": "Service Reference",
+ "href": "/apps/gcm_server.html"
+ },
+ {
+ "title": "Terms of Service",
+ "href": "/apps/gcm_tos.html"
+ }
+ ]
+ },
+ {
+ "title": "Cloud Storage",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "chrome.storage",
+ "href": "/apps/storage.html"
+ }
+ ]
+ },
+ {
+ "title": "User Authentication",
+ "href": "/apps/app_identity.html"
+ }
+ ]
+ },
+ {
+ "title": "Store and Retrieve Data",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Storage APIs",
+ "href": "/apps/app_storage.html"
+ }
+ ]
+ },
+ {
+ "title": "Use Low-Level System Services",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "USB",
+ "href": "/apps/app_usb.html"
+ },
+ {
+ "title": "Serial",
+ "href": "/apps/app_serial.html"
+ },
+ {
+ "title": "Network Communications",
+ "href": "/apps/app_network.html"
+ }
+ ]
+ },
+ {
+ "title": "Interact with the Host Platform",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Rich Notifications",
+ "href": "/apps/desktop_notifications.html"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Distribute",
+ "items": [
+ {
+ "title": "Publish Your App",
+ "href": "/apps/publish_app.html"
+ },
+ {
+ "title": "Monetize Your App",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Google Wallet for Digital Goods",
+ "href": "/apps/google_wallet.html"
+ }
+ ]
+ },
+ {
+ "title": "Analytics",
+ "href": "/apps/analytics.html"
+ }
+ ]
+ },
+ {
+ "title": "Reference",
+ "items": [
+ {
+ "title": "Chrome Platform APIs",
+ "href": "/apps/api_index.html"
+ },
+ {
+ "title": "Webview Tag",
+ "href": "/apps/tags/webview.html"
+ },
+ {
+ "title": "Web APIs",
+ "href": "/apps/api_other.html"
+ },
+ {
+ "title": "Manifest File Format",
+ "href": "/apps/manifest.html"
+ },
+ {
+ "title": "Disabled Web Features",
+ "href": "/apps/app_deprecated.html"
+ }
+ ]
+ },
+ {
+ "title": "Samples",
+ "items": [
+ {
+ "title": "Sample Apps",
+ "href": "/apps/samples.html"
+ }
+ ]
+ },
+ {
+ "title": "Help",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/apps/faq.html"
+ },
+ {
+ "title": "Google Groups",
+ "href": "https://groups.google.com/a/chromium.org/forum/#!forum/chromium-apps"
+ },
+ {
+ "title": "Stack Overflow",
+ "href": "http://stackoverflow.com/questions/tagged/google-chrome-app"
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/templates/json/chrome_sidenav.json b/chromium/chrome/common/extensions/docs/templates/json/chrome_sidenav.json
new file mode 100644
index 00000000000..bc7b1e31d8c
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/chrome_sidenav.json
@@ -0,0 +1,1111 @@
+[
+ {
+ "title": "DEVTOOLS",
+ "items": [
+ {
+ "title": "OVERVIEW",
+ "items": [
+ {
+ "title": "Getting Started",
+ "items": [
+ {
+ "title": "What Are Chrome DevTools?",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Authoring & Development Workflow",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Using the Console",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Tips & Tricks",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Inspecting & Tweaking",
+ "items": [
+ {
+ "title": "Editing Styles & DOM",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Editing Styles",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Working with CSS Preprocessors",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Managing Application Storage",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Network Performance & Profiling",
+ "items": [
+ {
+ "title": "Evaluating Network Performance",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Performance Profiling with Timeline",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Demo: Finding Forced Synchronoush Layouts",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Working with Mobile",
+ "items": [
+ {
+ "title": "Mobile Emulation",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Remote Debugging on Android",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Remote Debugging Protocol",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Additional Resources",
+ "items": [
+ {
+ "title": "Creating Clean Testing Environment",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Videos",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Blogposts",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Mailing List",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Contributing to DevTools",
+ "href": "/devtools/index.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "WORKING WITH JAVASCRIPT",
+ "items": [
+ {
+ "title": "Debugging & Profiling",
+ "items": [
+ {
+ "title": "Debugging JavaScript",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Profiling JavaScript Performance",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "JavaScript Memory Profiling",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Heap Profiler Demos",
+ "items": [
+ {
+ "title": "Gathering Scattered Objects",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Verifying Action Cleanness",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Exploring the Heap Contents",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Uncovering DOM Leaks",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Finding Accumulation Points",
+ "href": "/devtools/index.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "INTEGRATING WITH DEVTOOLS",
+ "items": [
+ {
+ "title": "DevTools Extensions",
+ "items": [
+ {
+ "title": "Sample DevTools Extensions",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Sample Debugging Protocol Clients",
+ "href": "/devtools/index.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "REFERENCE",
+ "items": [
+ {
+ "title": "API",
+ "items": [
+ {
+ "title": "Console API Reference",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Command Line API Reference",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Shortcuts & Settings",
+ "items": [
+ {
+ "title": "Console API Reference",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Command Line API Reference",
+ "href": "/devtools/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Remote Debugging Protocol",
+ "items": [
+ {
+ "title": "Version 1.1",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Version 1.0",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Version .1",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Tip-of-tree",
+ "href": "/devtools/index.html"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "MULTIDEVICE",
+ "items": [
+ {
+ "title": "OVERVIEW",
+ "items": [
+ {
+ "title": "Getting Started",
+ "items": [
+ {
+ "title": "Develop Apps for Chrome Mobile Browsers",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Data Compression Proxy",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "User Agents",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Develop Apps for Chrome Mobile Browsers",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Chrome for Android",
+ "items": [
+ {
+ "title": "Overview",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Android Intents with Chrome",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Add to Hoomescreen",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Chrome for iOS",
+ "items": [
+ {
+ "title": "Overview",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Opening Links in Chrome",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Case Studies",
+ "items": [
+ {
+ "title": "Overview",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Pocket",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Feedly",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Related DevTools Content",
+ "items": [
+ {
+ "title": "Mobile Emulation",
+ "href": "/devtools/index.html"
+ },
+ {
+ "title": "Remote Debugging",
+ "href": "/devtools/index.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "CHROME WEBVIEW",
+ "items": [
+ {
+ "title": "Overview",
+ "items": [
+ {
+ "title": "WebView for Android",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Getting Started",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Design & Develop",
+ "items": [
+ {
+ "title": "Pixel-Perfect UI",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "WebView Workflow",
+ "href": "/multidevice/index.html"
+ },
+ {
+ "title": "Tips & Tricks",
+ "href": "/multidevice/index.html"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "PLATFORM",
+ "items": [
+ {
+ "title": "APPS",
+ "items": [
+ {
+ "title": "Discover",
+ "items": [
+ {
+ "title": "What are Chrome Apps?",
+ "href": "/apps/about_apps.html"
+ },
+ {
+ "title": "Create Your First App",
+ "href": "/apps/first_app.html"
+ },
+ {
+ "title": "App Architecture",
+ "href": "/apps/app_architecture.html"
+ },
+ {
+ "title": "App Lifecycle",
+ "href": "/apps/app_lifecycle.html"
+ },
+ {
+ "title": "Samples",
+ "href": "/apps/samples.html"
+ }
+ ]
+ },
+ {
+ "title": "Chrome Apps Codelab",
+ "items": [
+ {
+ "title": "Learn with a Codelab",
+ "href": "/apps/app_codelab.html"
+ },
+ {
+ "title": "1 - Set Up Development Environment",
+ "href": "/apps/app_codelab1_setup.html"
+ },
+ {
+ "title": "2 - Create Basic App",
+ "href": "/apps/app_codelab2_basic.html"
+ },
+ {
+ "title": "3 - Create MVC",
+ "href": "/apps/app_codelab3_mvc.html"
+ },
+ {
+ "title": "4 - Save & Fetch Data",
+ "href": "/apps/app_codelab5_data.html"
+ },
+ {
+ "title": "5 - Manage App Lifecycle",
+ "href": "/apps/app_codelab6_lifecycle.html"
+ },
+ {
+ "title": "6 - Access User's Data",
+ "href": "/apps/app_codelab7_useridentification.html"
+ },
+ {
+ "title": "7 - Access Web Resources",
+ "href": "/apps/app_codelab8_webresources.html"
+ },
+ {
+ "title": "8 - Publish App",
+ "href": "/apps/app_codelab_10_publishing.html"
+ }
+ ]
+ },
+ {
+ "title": "Develop",
+ "items": [
+ {
+ "title": "Offline First",
+ "href": "/apps/offline_apps.html"
+ },
+ {
+ "title": "Handling External Content",
+ "href": "/apps/app_external.html"
+ },
+ {
+ "title": "Content Security Policy",
+ "href": "/apps/contentSecurityPolicy.html"
+ },
+ {
+ "title": "User Authentication",
+ "href": "/apps/app_identity.html"
+ },
+ {
+ "title": "Storing Data in the Cloud",
+ "href": "/apps/app_storage.html"
+ },
+ {
+ "title": "Cloud Messaging",
+ "href": "/apps/cloudMessaging.html"
+ },
+ {
+ "title": "Rich Notifications",
+ "href": "/apps/desktop_notifications.html"
+ }
+ ]
+ },
+ {
+ "title": "User Low-Level System Services",
+ "items": [
+ {
+ "title": "USB",
+ "href": "/apps/app_usb.html"
+ },
+ {
+ "title": "Serial",
+ "href": "/apps/app_serial.html"
+ },
+ {
+ "title": "Network Communications",
+ "href": "/apps/app_network.html"
+ }
+ ]
+ },
+ {
+ "title": "MVC Architecture & Frameworks",
+ "items": [
+ {
+ "title": "About MVC Architecture",
+ "href": "/apps/app_frameworks.html"
+ },
+ {
+ "title": "Build Apps with AngularJS",
+ "href": "/apps/angular_framework.html"
+ },
+ {
+ "title": "Build Apps with SenchaJS",
+ "href": "/apps/sencha_framework.html"
+ }
+ ]
+ },
+ {
+ "title": "Distribute",
+ "items": [
+ {
+ "title": "Publish Your App",
+ "href": "/apps/publish_app.html"
+ },
+ {
+ "title": "Monetize Your App",
+ "href": "/apps/google_wallet.html"
+ },
+ {
+ "title": "Analytics",
+ "href": "/apps/analytics.html"
+ }
+ ]
+ },
+ {
+ "title": "Reference",
+ "items": [
+ {
+ "title": "Chrome Platform APIs",
+ "href": "/apps/api_index.html"
+ },
+ {
+ "title": "Webview Tag",
+ "href": "/apps/webview.html"
+ },
+ {
+ "title": "Web APIs",
+ "href": "/apps/api_other.html"
+ },
+ {
+ "title": "Manifest File Format",
+ "href": "/apps/manifest.html"
+ },
+ {
+ "title": "Disabled Web Features",
+ "href": "/apps/app_deprecated.html"
+ }
+ ]
+ },
+ {
+ "title": "Help",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/apps/faq.html"
+ },
+ {
+ "title": "Google Groups",
+ "href": "https://groups.google.com/a/chromium.org/forum/#!forum/chromium-apps"
+ },
+ {
+ "title": "Stack Overflow",
+ "href": "http://stackoverflow.com/questions/tagged/google-chrome-app"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "EXTENSIONS",
+ "items": [
+ {
+ "title": "Discover",
+ "items": [
+ {
+ "title": "Getting Started",
+ "href": "/extensions/getstarted.html"
+ },
+ {
+ "title": "Overview",
+ "href": "/extensions/overview.html"
+ },
+ {
+ "title": "Event Pages",
+ "href": "/extensions/event_pages.html"
+ },
+ {
+ "title": "Content Scripts",
+ "href": "/extensions/content_scripts.html"
+ },
+ {
+ "title": "activeTab Permission",
+ "href": "/extensions/activeTab.html"
+ },
+ {
+ "title": "What's New",
+ "href": "/extensions/whats_new.html"
+ },
+ {
+ "title": "Samples",
+ "href": "/extensions/samples.html"
+ }
+ ]
+ },
+ {
+ "title": "Browser UI",
+ "items": [
+ {
+ "title": "Browser Actions",
+ "href": "/extensions/browserAction.html"
+ },
+ {
+ "title": "Context Menus",
+ "href": "/extensions/contextMenus.html"
+ },
+ {
+ "title": "Desktop Notifications",
+ "href": "/extensions/desktop_notifications.html"
+ },
+ {
+ "title": "Omnibox",
+ "href": "/extensions/omnibox.html"
+ },
+ {
+ "title": "Options Pages",
+ "href": "/extensions/options.html"
+ },
+ {
+ "title": "Override Pages",
+ "href": "/extensions/override.html"
+ },
+ {
+ "title": "Page Actions",
+ "href": "/extensions/pageAction.html"
+ }
+ ]
+ },
+ {
+ "title": "Browser Interaction",
+ "items": [
+ {
+ "title": "Bookmarks",
+ "href": "/extensions/bookmarks.html"
+ },
+ {
+ "title": "Cookies",
+ "href": "/extensions/cookies.html"
+ },
+ {
+ "title": "Events",
+ "href": "/extensions/events.html"
+ },
+ {
+ "title": "History",
+ "href": "/extensions/history.html"
+ },
+ {
+ "title": "Management",
+ "href": "/extensions/management.html"
+ },
+ {
+ "title": "Tabs",
+ "href": "/extensions/tabs.html"
+ },
+ {
+ "title": "Windows",
+ "href": "/extensions/windows.html"
+ }
+ ]
+ },
+ {
+ "title": "Develop",
+ "items": [
+ {
+ "title": "Accessibility",
+ "href": "/extensions/a11y.html"
+ },
+ {
+ "title": "Content Security Policy",
+ "href": "/extensions/contentSecurityPolicy.html"
+ },
+ {
+ "title": "Cross-Origin XHR",
+ "href": "/extensions/xhr.html"
+ },
+ {
+ "title": "Debugging",
+ "href": "/extensions/tut_debugging.html"
+ },
+ {
+ "title": "Extending DevTools",
+ "href": "/extensions/devtools.html"
+ },
+ {
+ "title": "Google Analytics",
+ "href": "/extensions/tut_analytics.html"
+ },
+ {
+ "title": "Internationalization",
+ "href": "/extensions/i18n.html"
+ },
+ {
+ "title": "Message Passing",
+ "href": "/extensions/messaging.html"
+ },
+ {
+ "title": "OAuth",
+ "href": "/extensions/tut_oauth.html"
+ }
+ ]
+ },
+ {
+ "title": "Distribute",
+ "items": [
+ {
+ "title": "Hosting",
+ "href": "/extensions/hosting.html"
+ },
+ {
+ "title": "Packaging",
+ "href": "/extensions/packaging.html"
+ },
+ {
+ "title": "Autoupdating",
+ "href": "/extensions/autoupdate.html"
+ },
+ {
+ "title": "Other Deployment Options",
+ "href": "/extensions/external_extensions.html"
+ }
+ ]
+ },
+ {
+ "title": "Reference",
+ "items": [
+ {
+ "title": "Chrome Platform APIs",
+ "href": "/extensions/api_index.html"
+ },
+ {
+ "title": "Web APIs",
+ "href": "/extensions/api_other.html"
+ },
+ {
+ "title": "Manifest File Format",
+ "href": "/extensions/manifest.html"
+ },
+ {
+ "title": "Migrate to Manifest 2",
+ "href": "/extensions/tut_migration_to_manifest_v2.html"
+ },
+ {
+ "title": "Permission Warnings",
+ "href": "/extensions/permission_warnings.html"
+ },
+ {
+ "title": "Optional Permissions",
+ "href": "/extensions/permissions.html"
+ },
+ {
+ "title": "Match Patterns",
+ "href": "/extensions/match_patterns.html"
+ }
+ ]
+ },
+ {
+ "title": "Help",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/extensions/faq.html"
+ },
+ {
+ "title": "Stack Overflow",
+ "href": "http://stackoverflow.com/tags/google-chrome-extension/info"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "STORE",
+ "items": [
+ {
+ "title": "Discover",
+ "items": [
+ {
+ "title": "What Is the Chrome Web Store?",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "What Can You Publish?",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Tutorial: Getting Started",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Best Practices",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Samples",
+ "href": "/webstore/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Branding",
+ "items": [
+ {
+ "title": "Branding Guidelines",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Supplying Images",
+ "href": "/webstore/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Monetizing",
+ "items": [
+ {
+ "title": "Seller Options",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Using Google Accounts",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Checking for Payment",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Payments: Regions, Fees, & Tiers",
+ "href": "/webstore/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Publishing",
+ "items": [
+ {
+ "title": "Step-by-step Tutorial",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Using Inline Installation",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Terms of Service",
+ "href": "/webstore/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Help",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Google Groups",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Articles",
+ "href": "/webstore/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Related Content",
+ "items": [
+ {
+ "title": "Develop Chrome Apps",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Develop Chrome Extensions",
+ "href": "/webstore/index.html"
+ },
+ {
+ "title": "Develop Chrome Themes",
+ "href": "/webstore/index.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "NATIVE CLIENT",
+ "items": [
+ {
+ "title": "Discover",
+ "items": [
+ {
+ "title": "What Is Native Client?",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "NaCl and PNaCl",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Demos",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Download SDK",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "SDK Examples",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "SDK Release Notes",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Getting Started Tutorial",
+ "items": [
+ {
+ "title": "Part 1: Simple PNaCl Web App",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Part 2: SDK Build System and Chrome Apps",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Development Cycle",
+ "items": [
+ {
+ "title": "Building",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Running",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Debugging",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Debugging with Visual Studio",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Dynamic Linking and Loading with glibc",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Coding Your Application",
+ "items": [
+ {
+ "title": "Application Structure",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Native Client Modules",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "3D Graphics",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Audio",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "File I/O",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "The nacl_io Library",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Messaging System",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Progress Events",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "URL Loading",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "View Change, Focus, & Input Events",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Distribute",
+ "items": [
+ {
+ "title": "Portable Native Client",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Non-portable Native Client",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Pepper API Reference",
+ "items": [
+ {
+ "title": "Structures",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Functions",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Enums",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Typedefs",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Macros",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Files",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Pepper C++ Classes",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Pepper C++ Files",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Additional Reference",
+ "items": [
+ {
+ "title": "Glossary",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Native Client Manifest (nmf) Format",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "PNaCl Bitcode Reference Manual",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "PNaCl C/C++ Language Support",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Help",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Forums & Issues Tracker",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Publications & Presentations",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Security Contest Archive",
+ "href": "/nacl/index.html"
+ }
+ ]
+ },
+ {
+ "title": "Previous Versions",
+ "items": [
+ {
+ "title": "Beta (Pepper 30)",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Stable (Pepper 29)",
+ "href": "/nacl/index.html"
+ },
+ {
+ "title": "Deprecated",
+ "href": "/nacl/index.html"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/templates/json/content_providers.json b/chromium/chrome/common/extensions/docs/templates/json/content_providers.json
new file mode 100644
index 00000000000..fc003a408c3
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/content_providers.json
@@ -0,0 +1,95 @@
+// === Overview ===
+//
+// This file configures where to find and how to serve content in the docserver.
+// It's the most fundamentally important file in all of the docserver.
+//
+// === Format ===
+//
+// Each entry declares a rule with:
+// * An arbitrary identifier key e.g. "cr-extensions-examples".
+// * What URL the rule should be invoked with, given by "serveFrom", e.g.
+// "extensions/examples".
+// * An object describing where the content originates, either "chromium"
+// or "github".
+// * "chromium" must provide a "dir" value specifying which chromium directory
+// to look in, e.g. "extensions/samples".
+// * "github" must provide "owner" and "repo" values specifying the owner of
+// the GitHub repository, and the repository name, e.g. "GoogleChrome" and
+// "chrome-app-samples" respectively.
+//
+// In the chromium example, when the user navigates to
+//
+// developer.chrome.com/extensions/examples/some/sample/path
+//
+// then
+// 1. The "cr-extensions-examples" rule is invoked (since it's served from
+// "extensions/examples").
+// 2. The docserver will look up the path "docs/examples/some/sample/path"
+// in chromium - the URL after the "serveFrom" path (some/sample/path)
+// prefixed by the chromium directory (docs/examples).
+// 3. Then render and serve it.
+//
+// === Special properties ===
+//
+// There are some other properties that can be specified:
+// * "supportsZip" indicates whether directories are allowed to be served as
+// zip files. For safety this isn't supported for arbitrary URLs, only those
+// within a rule that has "supportsZip": true.
+// * "supportsTemplates" indicates whether HTML files should be treated and
+// renderered as templates, versus just plain text. Complex documentation
+// which interacts with docserver features (like API listing) need to set
+// this to true. Otherwise, it's safer and more efficient to omit it.
+
+{
+ "cr-extensions-examples": {
+ "chromium": {
+ "dir": "chrome/common/extensions/docs/examples"
+ },
+ "serveFrom": "extensions/examples",
+ "supportsZip": true
+ },
+ "cr-public": {
+ "chromium": {
+ "dir": "chrome/common/extensions/docs/templates/public"
+ },
+ "serveFrom": "",
+ "supportsTemplates": true
+ },
+ "cr-static": {
+ "chromium": {
+ "dir": "chrome/common/extensions/docs/static"
+ },
+ "serveFrom": "static"
+ },
+ "cr-native-client": {
+ "chromium": {
+ "dir": "components/nacl/docs/dev"
+ },
+ "serveFrom": "nacl",
+ "supportsTemplates": true
+ },
+ //"devtools-docs": {
+ // "github": {
+ // "owner": "GoogleChrome",
+ // "repo": "devtools-docs-migration"
+ // },
+ // "serveFrom": "devtools",
+ // "supportsTemplates": true
+ //},
+ "multidevice-docs": {
+ "github": {
+ "owner": "GoogleChrome",
+ "repo": "multi-device"
+ },
+ "serveFrom": "multidevice",
+ "supportsTemplates": true
+ },
+ "webstore-docs": {
+ "github": {
+ "owner": "GoogleChrome",
+ "repo": "webstore-docs"
+ },
+ "serveFrom": "webstore",
+ "supportsTemplates": true
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/extensions_sidenav.json b/chromium/chrome/common/extensions/docs/templates/json/extensions_sidenav.json
new file mode 100644
index 00000000000..5ec43b7f02f
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/extensions_sidenav.json
@@ -0,0 +1,222 @@
+[
+ {
+ "title": "Getting Started",
+ "href": "/extensions/getstarted.html"
+ },
+ {
+ "title": "Overview",
+ "href": "/extensions/overview.html"
+ },
+ {
+ "title": "What's New?",
+ "href": "/extensions/whats_new.html"
+ },
+ {
+ "title": "Developer's Guide",
+ "href": "/extensions/devguide.html",
+ "items": [
+ {
+ "title": "Browser UI",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Browser Actions",
+ "href": "/extensions/browserAction.html"
+ },
+ {
+ "title": "Context Menus",
+ "href": "/extensions/contextMenus.html"
+ },
+ {
+ "title": "Desktop Notifications",
+ "href": "/extensions/desktop_notifications.html"
+ },
+ {
+ "title": "Omnibox",
+ "href": "/extensions/omnibox.html"
+ },
+ {
+ "title": "Options Pages",
+ "href": "/extensions/options.html"
+ },
+ {
+ "title": "Override Pages",
+ "href": "/extensions/override.html"
+ },
+ {
+ "title": "Page Actions",
+ "href": "/extensions/pageAction.html"
+ }
+ ]
+ },
+ {
+ "title": "Browser Interaction",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Bookmarks",
+ "href": "/extensions/bookmarks.html"
+ },
+ {
+ "title": "Cookies",
+ "href": "/extensions/cookies.html"
+ },
+ {
+ "title": "Extending DevTools",
+ "href": "/extensions/devtools.html"
+ },
+ {
+ "title": "Events",
+ "href": "/extensions/events.html"
+ },
+ {
+ "title": "History",
+ "href": "/extensions/history.html"
+ },
+ {
+ "title": "Management",
+ "href": "/extensions/management.html"
+ },
+ {
+ "title": "Tabs",
+ "href": "/extensions/tabs.html"
+ },
+ {
+ "title": "Windows",
+ "href": "/extensions/windows.html"
+ }
+ ]
+ },
+ {
+ "title": "Implementation",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Accessibility",
+ "href": "/extensions/a11y.html"
+ },
+ {
+ "title": "Event Pages",
+ "href": "/extensions/event_pages.html"
+ },
+ {
+ "title": "Content Security Policy",
+ "href": "/extensions/contentSecurityPolicy.html"
+ },
+ {
+ "title": "Content Scripts",
+ "href": "/extensions/content_scripts.html"
+ },
+ {
+ "title": "Cross-Origin XHR",
+ "href": "/extensions/xhr.html"
+ },
+ {
+ "title": "Internationalization",
+ "href": "/extensions/i18n.html"
+ },
+ {
+ "title": "Message Passing",
+ "href": "/extensions/messaging.html"
+ },
+ {
+ "title": "Optional Permissions",
+ "href": "/extensions/permissions.html"
+ },
+ {
+ "title": "NPAPI Plugins",
+ "href": "/extensions/npapi.html"
+ }
+ ]
+ },
+ {
+ "title": "Finishing",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Hosting",
+ "href": "/extensions/hosting.html"
+ },
+ {
+ "title": "Other Deployment Options",
+ "href": "/extensions/external_extensions.html"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "title": "Tutorials",
+ "href": "/extensions/tutorials.html",
+ "items": [
+ {
+ "title": "Manifest V2",
+ "href": "/extensions/tut_migration_to_manifest_v2.html"
+ },
+ {
+ "title": "Debugging",
+ "href": "/extensions/tut_debugging.html"
+ },
+ {
+ "title": "Google Analytics",
+ "href": "/extensions/tut_analytics.html"
+ },
+ {
+ "title": "OAuth",
+ "href": "/extensions/tut_oauth.html"
+ }
+ ]
+ },
+ {
+ "title": "Reference",
+ "items": [
+ {
+ "title": "Formats",
+ "toggleable": true,
+ "items": [
+ {
+ "title": "Manifest Files",
+ "href": "/extensions/manifest.html"
+ },
+ {
+ "title": "Match Patterns",
+ "href": "/extensions/match_patterns.html"
+ }
+ ]
+ },
+ {
+ "title": "Permission Warnings",
+ "href": "/extensions/permission_warnings.html"
+ },
+ {
+ "title": "chrome.* APIs",
+ "href": "/extensions/api_index.html"
+ },
+ {
+ "title": "Other APIs",
+ "href": "/extensions/api_other.html"
+ }
+ ]
+ },
+ {
+ "title": "More",
+ "items": [
+ {
+ "title": "FAQ",
+ "href": "/extensions/faq.html"
+ },
+ {
+ "title": "Chrome Web Store",
+ "href": "http://code.google.com/chrome/webstore/docs/index.html"
+ },
+ {
+ "title": "Hosted Apps",
+ "href": "http://code.google.com/chrome/apps/docs/developers_guide.html"
+ },
+ {
+ "title": "Themes",
+ "href": "/extensions/themes.html"
+ }
+ ]
+ }
+]
diff --git a/chromium/chrome/common/extensions/docs/templates/json/intro_tables.json b/chromium/chrome/common/extensions/docs/templates/json/intro_tables.json
new file mode 100644
index 00000000000..47485f9e0dd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/intro_tables.json
@@ -0,0 +1,300 @@
+{
+ "alarms": {
+ "Learn More": [
+ {
+ "link": "event_pages.html",
+ "text": "Event Pages"
+ }
+ ]
+ },
+ "app_runtime": {
+ "Learn More": [
+ {
+ "link": "app_lifecycle.html",
+ "text": "Manage App Lifecycle"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/10291095/",
+ "text": "Chrome Office Hours: Introduction to Chrome Apps"
+ }
+ ]
+ },
+ "app_window": {
+ "Learn More": [
+ {
+ "link": "about_apps.html#look",
+ "text": "How they look"
+ },
+ {
+ "link": "app_lifecycle.html",
+ "text": "Manage App Lifecycle"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/9118010/",
+ "text": "Chrome Apps Office Hours: Building Awesome Multi-window Apps"
+ }
+ ]
+ },
+ "bluetooth": {
+ "Learn More": [
+ {
+ "link": "app_usb.html",
+ "text": "Accessing Hardware Devices"
+ }
+ ]
+ },
+ "cookies": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "\"cookies\""
+ },
+ {
+ "link": "declare_permissions.html#host-permissions",
+ "text": "host permissions"
+ }
+ ]
+ },
+ "declarativeContent": {
+ "Learn More": [
+ {
+ "link": "events.html",
+ "text": "Declarative Events"
+ },
+ {
+ "link": "activeTab.html",
+ "text": "activeTab"
+ }
+ ]
+ },
+ "declarativeWebRequest": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "\"declarativeWebRequest\""
+ },
+ {
+ "link": "declare_permissions.html#host-permissions",
+ "text": "host permissions"
+ }
+ ]
+ },
+ "downloads": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "\"downloads\""
+ }
+ ]
+ },
+ "fileSystem": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "\"fileSystem\""
+ },
+ {
+ "class": "code",
+ "text": "{\"fileSystem\": [\"write\"]}"
+ },
+ {
+ "class": "code",
+ "text": "{\"fileSystem\": [\"write\", \"retainEntries\", \"directory\"]}"
+ }
+ ],
+ "Learn More": [
+ {
+ "link": "app_storage.html",
+ "text": "Manage Data"
+ },
+ {
+ "link": "angular_framework.html",
+ "text": "Build Apps with AngularJS"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/7320022-1001/",
+ "text": "Chrome Apps Office Hours: TextDrive and AngularJS"
+ }
+ ]
+ },
+ "identity": {
+ "Learn More": [
+ {
+ "link": "app_identity.html",
+ "text": "Identify User"
+ }
+ ]
+ },
+ "mediaGalleries": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "{\"mediaGalleries\": [\"accessType1\", \"accessType2\", ...]}"
+ },
+ {
+ "class": "code",
+ "text": "{\"mediaGalleries\": [\"accessType1\", \"accessType2\", ..., \"allAutoDetected\"]}"
+ },
+ {
+ "partial": "intro_tables/see_manifest.html"
+ }
+ ],
+ "Learn More": [
+ {
+ "link": "https://developers.google.com/live/shows/10479832/",
+ "text": "Chrome Office Hours: The Media Galleries API"
+ }
+ ]
+ },
+ "notifications": {
+ "Learn More": [
+ {
+ "link": "https://developers.google.com/live/shows/83992232-1001/",
+ "text": "Chrome Apps Office Hours: Rich Notifications"
+ }
+ ]
+ },
+ "permissions": {
+ "Learn More": [
+ {
+ "link": "declare_permissions.html",
+ "text": "Declaring permissions"
+ }
+ ]
+ },
+ "pushMessaging": {
+ "Learn More": [
+ {
+ "link": "cloudMessaging.html",
+ "text": "Google Cloud Messaging for Chrome"
+ },
+ {
+ "link": "gcm_server.html",
+ "text": "API Reference for GCM service"
+ }
+ ]
+ },
+ "runtime": {
+ "Learn More": [
+ {
+ "link": "app_lifecycle.html",
+ "text": "Manage App Lifecycle"
+ },
+ {
+ "link": "event_pages.html",
+ "text": "Event Pages"
+ }
+ ]
+ },
+ "serial": {
+ "Learn More": [
+ {
+ "link": "app_usb.html",
+ "text": "Accessing Hardware Devices"
+ }
+ ]
+ },
+ "socket": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "{\"socket\": [\"rule1\", \"rule2\"]}"
+ },
+ {
+ "partial": "intro_tables/socket_permissions.html"
+ }
+ ],
+ "Learn More": [
+ {
+ "link": "app_network.html",
+ "text": "Network Communications"
+ },
+ {
+ "link": "sencha_framework.html",
+ "text": "Build Apps with Sencha ExtJS"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/7320022-5001/",
+ "text": "Chrome Apps Office Hours: Networking APIs"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/7320022-2001/",
+ "text": "Chrome Apps Office Hours: Controlling an AR ParrotDrone"
+ }
+ ]
+ },
+ "storage": {
+ "Learn More": [
+ {
+ "link": "https://developers.google.com/live/shows/7320022/",
+ "text": "Chrome Apps Office Hours: Chrome Storage APIs"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/7320022-1/",
+ "text": "Chrome Apps Office Hours: Storage API Deep Dive"
+ }
+ ]
+ },
+ "syncFileSystem": {
+ "Learn More": [
+ {
+ "link": "app_storage.html",
+ "text": "Manage Data"
+ },
+ {
+ "link": "https://developers.google.com/live/shows/83992232-2001/",
+ "text": "Chrome Office Hours: Synched File System"
+ }
+ ]
+ },
+ "tabs": {
+ "Permissions": [
+ {
+ "partial": "intro_tables/tabs_permissions.html"
+ }
+ ]
+ },
+ "tts": {
+ "Learn More": [
+ {
+ "link": "https://developers.google.com/live/shows/7320022-7001/",
+ "text": "Chrome Office Hours: Text to Speech API"
+ }
+ ]
+ },
+ "usb": {
+ "Learn More": [
+ {
+ "link": "app_usb.html",
+ "text": "Accessing Hardware Devices"
+ }
+ ]
+ },
+ "webRequest": {
+ "Permissions": [
+ {
+ "class": "code",
+ "text": "\"webRequest\""
+ },
+ {
+ "link": "declare_permissions.html#host-permissions",
+ "text": "host permissions"
+ }
+ ]
+ },
+ "webstore": {
+ "Learn More": [
+ {
+ "link": "https://developers.google.com/chrome/web-store/docs/inline_installation",
+ "text": "Using Inline Installation"
+ }
+ ]
+ },
+ "windows": {
+ "Permissions": [
+ {
+ "partial": "intro_tables/windows_permissions.html"
+ }
+ ]
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/manifest.json b/chromium/chrome/common/extensions/docs/templates/json/manifest.json
new file mode 100644
index 00000000000..4564d9ad71d
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/manifest.json
@@ -0,0 +1,170 @@
+{
+ "app": {
+ "documentation": "manifest/app.html",
+ "example": {},
+ "level": "required"
+ },
+ "app.background": {
+ "example": {"scripts": ["background.js"]},
+ "level": "required"
+ },
+ "background": {
+ "documentation": "background_pages.html"
+ },
+ "background.persistent": {
+ "documentation": "event_pages.html",
+ "example": false,
+ "level": "recommended"
+ },
+ "browser_action": {
+ "documentation": "browserAction.html",
+ "example": {},
+ "level": "only_one"
+ },
+ "chrome_url_overrides": {
+ "documentation": "override.html",
+ "example": {}
+ },
+ "content_scripts": {
+ "documentation": "content_scripts.html",
+ "example": [{}]
+ },
+ "content_security_policy": {
+ "documentation": "contentSecurityPolicy.html",
+ "example": "policyString"
+ },
+ "default_locale": {
+ "documentation": "manifest/default_locale.html",
+ "example": "en",
+ "level": "recommended"
+ },
+ "description": {
+ "documentation": "manifest/description.html",
+ "example": "A plain text description",
+ "level": "recommended"
+ },
+ "externally_connectable": {
+ "documentation": "manifest/externally_connectable.html",
+ "example": {
+ "matches": ["*://*.example.com/*"]
+ }
+ },
+ "file_browser_handlers": {
+ "documentation": "fileBrowserHandler.html",
+ "example": []
+ },
+ "file_handlers": {
+ "documentation": "manifest/file_handlers.html",
+ "example": {}
+ },
+ "homepage_url": {
+ "documentation": "manifest/homepage_url.html",
+ "example": "http://path/to/homepage"
+ },
+ "icons": {
+ "documentation": "manifest/icons.html",
+ "example": {},
+ "level": "recommended"
+ },
+ "incognito": {
+ "documentation": "manifest/incognito.html",
+ "example": "spanning or split"
+ },
+ "key": {
+ "documentation": "manifest/key.html",
+ "example": "publicKey"
+ },
+ "kiosk_enabled": {
+ "documentation": "manifest/kiosk_enabled.html#kiosk_enabled",
+ "example": true
+ },
+ "kiosk_only": {
+ "documentation": "manifest/kiosk_enabled.html#kiosk_only",
+ "example": true
+ },
+ "manifest_version": {
+ "documentation": "manifest/manifest_version.html",
+ "example": 2,
+ "level": "required"
+ },
+ "minimum_chrome_version": {
+ "documentation": "manifest/minimum_chrome_version.html",
+ "example": "versionString"
+ },
+ "nacl_modules": {
+ "documentation": "manifest/nacl_modules.html",
+ "example": []
+ },
+ "name": {
+ "documentation": "manifest/name.html#name",
+ "example": "My {{platform}}",
+ "level": "required"
+ },
+ "offline_enabled": {
+ "documentation": "manifest/offline_enabled.html",
+ "example": true
+ },
+ "omnibox": {
+ "documentation": "omnibox.html",
+ "example": {
+ "keyword": "aString"
+ }
+ },
+ "options_page": {
+ "documentation": "options.html",
+ "example": "aFile.html"
+ },
+ "page_action": {
+ "documentation": "pageAction.html",
+ "example": {},
+ "level": "only_one"
+ },
+ "permissions": {
+ "documentation": "declare_permissions.html",
+ "example": []
+ },
+ "plugins": {
+ "documentation": "npapi.html",
+ "example": []
+ },
+ "requirements": {
+ "documentation": "manifest/requirements.html",
+ "example": {}
+ },
+ "sandbox": {
+ "documentation": "manifest/sandbox.html",
+ "example": []
+ },
+ "short_name": {
+ "documentation": "manifest/name.html#short_name",
+ "example": "Short Name"
+ },
+ "storage": {
+ "documentation": "manifest/storage.html",
+ "example": {
+ "managed_schema": "schema.json"
+ }
+ },
+ "theme": {
+ "documentation": "themes.html",
+ "example": {},
+ "level": "only_one"
+ },
+ "update_url": {
+ "documentation": "autoupdate.html",
+ "example": "http://path/to/updateInfo.xml"
+ },
+ "url_handlers": {
+ "documentation": "manifest/url_handlers.html",
+ "example": {}
+ },
+ "version": {
+ "documentation": "manifest/version.html",
+ "example": "versionString",
+ "level": "required"
+ },
+ "web_accessible_resources": {
+ "documentation": "manifest/web_accessible_resources.html",
+ "example": []
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/permissions.json b/chromium/chrome/common/extensions/docs/templates/json/permissions.json
new file mode 100644
index 00000000000..a95a2991095
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/permissions.json
@@ -0,0 +1,66 @@
+{
+ "host-permissions": {
+ "channel": "stable",
+ "anchor": "host-permissions",
+ "name": "[scheme]:[host]/*",
+ "partial": "permissions/host_permissions.html",
+ "extension_types": ["legacy_packaged_app", "extension", "platform_app"]
+ },
+ "activeTab": {
+ "partial": "permissions/active_tab.html"
+ },
+ "alwaysOnTopWindows": {
+ "partial": "permissions/always_on_top_windows.html"
+ },
+ "audioCapture": {
+ "partial": "permissions/audio_capture.html"
+ },
+ "background": {
+ "partial": "permissions/background.html"
+ },
+ "chrome://favicon/": {
+ "anchor": "favicon",
+ "name": "chrome://favicon/",
+ "partial": "permissions/favicon.html",
+ "platforms": ["extension"]
+ },
+ "clipboardRead": {
+ "partial": "permissions/clipboard_read.html"
+ },
+ "clipboardWrite": {
+ "partial": "permissions/clipboard_write.html"
+ },
+ "experimental": {
+ "partial": "permissions/experimental.html"
+ },
+ "fullscreen": {
+ "partial": "permissions/fullscreen.html"
+ },
+ "geolocation": {
+ "partial": "permissions/geolocation.html"
+ },
+ "notifications": {
+ "partial": "permissions/notifications.html"
+ },
+ "pointerLock": {
+ "partial": "permissions/pointer_lock.html"
+ },
+ "syncFileSystem": {
+ "partial": "permissions/sync_file_system.html"
+ },
+ "tabs": {
+ "partial": "permissions/tabs.html"
+ },
+ "unlimitedStorage": {
+ "partial": "permissions/unlimited_storage.html"
+ },
+ "videoCapture": {
+ "partial": "permissions/video_capture.html"
+ },
+ "webRequestBlocking": {
+ "partial": "permissions/web_request_blocking.html"
+ },
+ "webview": {
+ "partial": "permissions/webview.html"
+ }
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/json/strings.json b/chromium/chrome/common/extensions/docs/templates/json/strings.json
new file mode 100644
index 00000000000..5f51c45a763
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/json/strings.json
@@ -0,0 +1,19 @@
+{
+ "app": "app",
+ "appsTitle": "Apps",
+ "devtools": "devtools",
+ "devtoolsTitle": "DevTools",
+ "extension": "extension",
+ "extensionsTitle": "Extensions",
+ "events": "events",
+ "methods": "methods",
+ "multidevice": "multi-device",
+ "multideviceTitle": "Multi-device",
+ "nacl": "native client",
+ "naclTitle": "Native Client",
+ "properties": "properties",
+ "sampleApps": "Sample Apps",
+ "sampleExtensions": "Sample Extensions",
+ "webstore": "webstore",
+ "webstoreTitle": "Chrome Web Store"
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/public/apps/redirects.json b/chromium/chrome/common/extensions/docs/templates/public/apps/redirects.json
new file mode 100644
index 00000000000..e689f8f5bdd
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/public/apps/redirects.json
@@ -0,0 +1,11 @@
+{
+ "": "about_apps.html",
+ "app_csp.html": "contentSecurityPolicy.html",
+ "experimental_systemInfo_storage.html": "system_storage.html",
+ "in_app_payments.html": "google_wallet.html",
+ "index.html": "about_apps.html",
+ "systemInfo_cpu.html": "system_cpu.html",
+ "systemInfo_display.html": "system_display.html",
+ "systemInfo_memory.html": "system_memory.html",
+ "webview_tag.html": "tags/webview.html"
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/public/extensions/redirects.json b/chromium/chrome/common/extensions/docs/templates/public/extensions/redirects.json
new file mode 100644
index 00000000000..4f5e9a56971
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/public/extensions/redirects.json
@@ -0,0 +1,11 @@
+{
+ "": "index.html",
+ "experimental.debugger.html": "debugger.html",
+ "experimental_debugger.html": "debugger.html",
+ "experimental.infobars.html": "infobars.html",
+ "experimental_infobars.html": "infobars.html",
+ "experimental.systemInfo_storage.html": "system_storage.html",
+ "experimental_systemInfo_storage.html": "system_storage.html",
+ "systemInfo_cpu.html": "system_cpu.html",
+ "systemInfo_memory.html": "system_memory.html"
+}
diff --git a/chromium/chrome/common/extensions/docs/templates/public/redirects.json b/chromium/chrome/common/extensions/docs/templates/public/redirects.json
new file mode 100644
index 00000000000..e5b0c4c0f7e
--- /dev/null
+++ b/chromium/chrome/common/extensions/docs/templates/public/redirects.json
@@ -0,0 +1,7 @@
+{
+ "": "//developers.google.com/chrome",
+ "apps.html": "/apps/about_apps.html",
+ "apps": "/apps/about_apps.html",
+ "extensions": "/extensions/index.html",
+ "index.html": "//developers.google.com/chrome"
+}
diff --git a/chromium/chrome/common/extensions_api_resources.grd b/chromium/chrome/common/extensions_api_resources.grd
new file mode 100644
index 00000000000..81d271f3ae5
--- /dev/null
+++ b/chromium/chrome/common/extensions_api_resources.grd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1">
+ <outputs>
+ <output filename="grit/extensions_api_resources.h" type="rc_header">
+ <emit emit_type='prepend'></emit>
+ </output>
+ <output filename="extensions_api_resources.pak" type="data_package" />
+ <output filename="extensions_api_resources.rc" type="rc_all" />
+ </outputs>
+ <release seq="1">
+ <includes>
+ <include name="IDR_EXTENSION_API_JSON_APP" file="extensions\api\app.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_BROWSERACTION" file="extensions\api\browser_action.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_BROWSINGDATA" file="extensions\api\browsing_data.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_COMMANDS" file="extensions\api\commands.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_DECLARATIVE_CONTENT" file="extensions\api\declarative_content.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_DECLARATIVE_WEBREQUEST" file="extensions\api\declarative_web_request.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_ECHOPRIVATE" file="extensions\api\echo_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_FILEBROWSERHANDLER" file="extensions\api\file_browser_handler.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE" file="extensions\api\input_method_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_STREAMSPRIVATE" file="extensions\api\streams_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_PAGEACTION" file="extensions\api\page_action.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_PAGEACTIONS" file="extensions\api\page_actions.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_PRIVACY" file="extensions\api\privacy.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_PROCESSES" file="extensions\api\processes.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_PROXY" file="extensions\api\proxy.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_RUNTIME" file="extensions\api\runtime.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_SCRIPTBADGE" file="extensions\api\script_badge.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_TTS" file="extensions\api\tts.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_TTSENGINE" file="extensions\api\tts_engine.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_TYPES" file="extensions\api\types.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_TYPES_PRIVATE" file="extensions\api\types_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_VIRTUALKEYBOARDPRIVATE" file="extensions\api\virtual_keyboard_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_WEBREQUESTINTERNAL" file="extensions\api\web_request_internal.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_WEBSTORE" file="extensions\api\webstore.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_WEBSTOREPRIVATE" file="extensions\api\webstore_private.json" type="BINDATA" />
+ <include name="IDR_EXTENSION_API_JSON_WEBVIEW_REQUEST" file="extensions\api\webview_request.json" type="BINDATA" />
+ </includes>
+ </release>
+</grit>
diff --git a/chromium/chrome/common/web_app_schema.json b/chromium/chrome/common/web_app_schema.json
new file mode 100644
index 00000000000..fe239667382
--- /dev/null
+++ b/chromium/chrome/common/web_app_schema.json
@@ -0,0 +1,58 @@
+// 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.
+
+// This file contains the schema for web app defintion files.
+
+{
+ "type": "object",
+ "properties": {
+ // TODO(aa): Need to figure out what max length the store is using for name
+ // and description.
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 45
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 132,
+ "optional": true
+ },
+ "launch_url": {
+ "type": "string",
+ "minLength": 1
+ },
+ "launch_container": {
+ "enum": ["tab", "panel"],
+ "optional": true
+ },
+ // TODO(aa): We had problems with a simple array of strings in extensions.
+ // Consider something else.
+ "permissions": {
+ "type": "array",
+ "optional": true,
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "urls": {
+ "type": "array",
+ "optional": true,
+ "items": {
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "icons": {
+ "type": "object",
+ "optional": true,
+ "properties": {
+ "16": { "optional": true, "type": "string", "minLength": 1 },
+ "48": { "optional": true, "type": "string", "minLength": 1 },
+ "128": { "optional": true, "type": "string", "minLength": 1 }
+ }
+ }
+ }
+}