diff options
Diffstat (limited to 'chromium/extensions/common/api')
17 files changed, 129 insertions, 81 deletions
diff --git a/chromium/extensions/common/api/API_OWNERS b/chromium/extensions/common/api/API_OWNERS index 95791851c0b..79613138af2 100644 --- a/chromium/extensions/common/api/API_OWNERS +++ b/chromium/extensions/common/api/API_OWNERS @@ -17,5 +17,4 @@ karandeepb@chromium.org tbarzic@chromium.org mukai@chromium.org xiyuan@chromium.org -stevenjb@chromium.org benwells@chromium.org diff --git a/chromium/extensions/common/api/PRESUBMIT.py b/chromium/extensions/common/api/PRESUBMIT.py index 5c2df127158..ded0ec9cc23 100644 --- a/chromium/extensions/common/api/PRESUBMIT.py +++ b/chromium/extensions/common/api/PRESUBMIT.py @@ -13,38 +13,13 @@ import sys def _CheckExterns(input_api, output_api): original_sys_path = sys.path - try: sys.path.append(input_api.PresubmitLocalPath()) from externs_checker import ExternsChecker finally: sys.path = original_sys_path - join = input_api.os_path.join - api_root = input_api.PresubmitLocalPath() - externs_root = input_api.os_path.abspath(join( - api_root, '..', '..', '..', 'third_party', 'closure_compiler', 'externs')) - - api_pairs = { - join(api_root, 'audio.idl'): join(externs_root, 'audio.js'), - join(api_root, 'automation.idl'): join(externs_root, 'automation.js'), - join(api_root, 'bluetooth.idl'): join(externs_root, 'bluetooth.js'), - join(api_root, 'bluetooth_private.idl'): - join(externs_root, 'bluetooth_private.js'), - join(api_root, 'clipboard.idl'): join(externs_root, 'clipboard.js'), - join(api_root, 'management.json'): join(externs_root, 'management.js'), - join(api_root, 'metrics_private.json'): - join(externs_root, 'metrics_private.js'), - join(api_root, 'mime_handler_private.idl'): - join(externs_root, 'mime_handler_private.js'), - join(api_root, 'networking_private.idl'): - join(externs_root, 'networking_private.js'), - join(api_root, 'system_display.idl'): - join(externs_root, 'system_display.js'), - # TODO(rdevlin.cronin): Add more! - } - - return ExternsChecker(input_api, output_api, api_pairs).RunChecks() + return ExternsChecker(input_api, output_api).RunChecks() def CheckChangeOnUpload(input_api, output_api): diff --git a/chromium/extensions/common/api/_api_features.json b/chromium/extensions/common/api/_api_features.json index 9cc9ff8bf54..95c06c0ac92 100644 --- a/chromium/extensions/common/api/_api_features.json +++ b/chromium/extensions/common/api/_api_features.json @@ -217,7 +217,6 @@ "matches": [ "chrome://add-supervision/*", "chrome://assistant-optin/*", - "chrome://cast/*", "chrome://cellular-setup/*", "chrome://discards/*", "chrome://extensions/*", @@ -498,7 +497,7 @@ "content_script" ] }, - "runtime.sendMessage": { + "runtime.sendMessage": [{ // Everything except WebUI. "contexts": [ "blessed_web_page", @@ -509,7 +508,12 @@ "web_page" ], "matches": ["<all_urls>"] - }, + },{ + "contexts": ["webui"], + "matches": [ + "chrome://password-change/*" + ] + }], "runtime.sendNativeMessage": { "dependencies": ["permission:nativeMessaging"], "contexts": ["blessed_extension"] diff --git a/chromium/extensions/common/api/_behavior_features.json b/chromium/extensions/common/api/_behavior_features.json index aacb10e7e9a..de9b8486065 100644 --- a/chromium/extensions/common/api/_behavior_features.json +++ b/chromium/extensions/common/api/_behavior_features.json @@ -29,17 +29,15 @@ "session_types": ["kiosk"] }, "signin_screen": [ { - "blacklist": [ - // https://crbug.com/626342 - "9E527CDA9D7C50844E8A5DB964A54A640AE48F98" // Chrome remote desktop - ], - // Allow developers to test new features. - "channel": "dev", + "channel": "canary", "component_extensions_auto_granted": false, - "extension_types": ["platform_app"], - "location": "policy", - "platforms": ["chromeos"] - }, { + "platforms": ["chromeos"], + "location": "unpacked", + "whitelist": [ + "05D1DBD6E8B9C4690FFA7D50E6F60C5290DC662A" // crbug.com/941107 + ] + }, + { // Strict restrictions for stable channel. // For now only whitelisted apps. "channel": "stable", @@ -121,5 +119,33 @@ "allow_secondary_kiosk_app_enabled_on_launch": { "channel": "dev", "extension_types": ["platform_app"] + }, + // Allowlist KeyPermissions for login screen extensions that cannot set the + // user policy (they don't have a user yet). + "key_permissions_in_login_screen": { + "channel": "stable", + "extension_types": ["login_screen_extension"], + "location": "policy", + "platforms": ["chromeos"], + "whitelist": [ + // The Imprivata login extension should be able to sign more than once, + // see crbug.com/1073466. In it's authorization protocol, Imprivata needs + // to sign data in order to authorize requests to the server. We cannot + // apply the KeyPermissions policy to the Imprivata login screen since + // it's a User Policy, but we do need to be able to sign data on the login + // screen. + "E219EE36A3B40612FD2A8CD6937B03EF0C97D3FE", // Imprivata (login screen) crbug.com/1065112 + "4DBFC1C52D6660DD90791976DF7FEF7B3D360509", // Imprivata (login screen) crbug.com/1065112 + "CDA6A10BE50CE65C59B766D0CE6A27E8E0A1533F", // Imprivata (login screen) crbug.com/1065112 + "D85454743B32D9F5ABF3E5F18DF78809F3A0ABD4", // Imprivata (login screen) crbug.com/1065112 + "04569B963251EB28C0906099668D98EE65ECA2D8", // Imprivata (login screen) crbug.com/1065112 + "7BF5B69C3ACA9E6ACA5C480661B8073EB9FA32A9", // Imprivata (login screen) crbug.com/1065112 + "5F2EF8E9F7E975090278D6A0AD039860430C5684", // Imprivata (login screen) crbug.com/1065112 + "97A4DC8AFC1FCF665C71B624A55675C297AB256C", // Imprivata (login screen) crbug.com/1065112 + "A00EB72B456C374F1EA86C09833C7DBB6CD95CAE", // Imprivata (login screen) crbug.com/1065112 + "51DDBADA37EF4D25AD03CB1BB6451799456FE183", // Imprivata (login screen) crbug.com/1065112 + "DD97CAE4D8658003658140109BC119188A19A5B8", // Imprivata (login screen) crbug.com/1065112 + "320857126E2180A5751AA384B7B7332A4964BD8C" // Imprivata (login screen) crbug.com/1065112 + ] } } diff --git a/chromium/extensions/common/api/_manifest_features.json b/chromium/extensions/common/api/_manifest_features.json index 425ec6a0cf0..4b7376a0734 100644 --- a/chromium/extensions/common/api/_manifest_features.json +++ b/chromium/extensions/common/api/_manifest_features.json @@ -363,10 +363,10 @@ "channel": "stable", "extension_types": ["hosted_app"] }, - // TODO(https://crbug.com/1065748): Remove web_app_linked_shortcut_icons and + // TODO(https://crbug.com/1065748): Remove web_app_linked_shortcut_items and // web_app_shortcut_icons keys once we've transitioned PWAs from the current // Extensions based representation to WebApp based representation. - "web_app_linked_shortcut_icons" : { + "web_app_linked_shortcut_items" : { "channel": "stable", "extension_types": ["hosted_app"] }, diff --git a/chromium/extensions/common/api/_permission_features.json b/chromium/extensions/common/api/_permission_features.json index 1391e798dce..2623a401ba3 100644 --- a/chromium/extensions/common/api/_permission_features.json +++ b/chromium/extensions/common/api/_permission_features.json @@ -290,8 +290,10 @@ "BD8781D757D830FC2E85470A1B6E8A718B7EE0D9", // http://crbug.com/407693 "4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB", // http://crbug.com/407693 "81986D4F846CEDDDB962643FA501D1780DD441BB", // http://crbug.com/407693 - "A9A9FC0228ADF541F0334F22BEFB8F9C245B21D7" // http://crbug.com/839189 - ] + "A9A9FC0228ADF541F0334F22BEFB8F9C245B21D7", // http://crbug.com/839189 + "D7986543275120831B39EF28D1327552FC343960", // http://crbug.com/1103025 + "A291B26E088FA6BA53FFD72F0916F06EBA7C585A" // http://crbug.com/1103025 + ] }, "fileSystem": [{ "channel": "stable", @@ -477,12 +479,7 @@ "session_types": ["kiosk.autolaunched"] }, { "channel": "stable", - "extension_types": [ - "extension", - "legacy_packaged_app", - "platform_app", - "login_screen_extension" - ], + "extension_types": ["extension", "legacy_packaged_app", "platform_app"], "platforms": ["chromeos", "mac", "win", "linux"], "whitelist": [ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651 @@ -509,14 +506,10 @@ "6FB7E1B6C0247B687AC14772E87A117F5F5E4497", // http://crbug.com/731941 "9834387FDA1F66A1B5CA06CB442137B556F12F2A", // http://crbug.com/772346 "A9A9FC0228ADF541F0334F22BEFB8F9C245B21D7", // http://crbug.com/839189 - // TODO(crbug.com/1075877, hendrich) remove this when - // enterprise.networkingAttributes has landed - "E219EE36A3B40612FD2A8CD6937B03EF0C97D3FE", // Imprivata (login screen) crbug.com/1075877 - "4DBFC1C52D6660DD90791976DF7FEF7B3D360509", // Imprivata (login screen) crbug.com/1075877 - "CDA6A10BE50CE65C59B766D0CE6A27E8E0A1533F", // Imprivata (login screen) crbug.com/1075877 - "A24DE1B21A67E25FB62AC8491642038FE25DA75B", // Imprivata (in-session) crbug.com/1075877 - "6B25164FFE2BADB5F1DBBD301CC022170267022D", // Imprivata (in-session) crbug.com/1075877 - "4D15F9AFCF54E56F0A6E06D22DD15F133DCF0882" // Imprivata (in-session) crbug.com/1075877 + "F2BCE012B9B7E2D57902B5A4F954EB01A7E548FD", // http://crbug.com/1105137 + "D467F51D3846ED6D137F9FD403AE11CE416CD995", // http://crbug.com/1105137 + "3823525AD445E0025E449F964C20922996B0F97F", // http://crbug.com/1105137 + "827B5D482FADCE120F4694AD0FA0680E3717C6EC" // http://crbug.com/1105137 ] }], "networkingPrivate": { diff --git a/chromium/extensions/common/api/automation.idl b/chromium/extensions/common/api/automation.idl index bcfe507e5cc..ca0a93a3bc1 100644 --- a/chromium/extensions/common/api/automation.idl +++ b/chromium/extensions/common/api/automation.idl @@ -46,7 +46,6 @@ menuListItemSelected, menuListValueChanged, menuPopupEnd, - menuPopupHide, menuPopupStart, menuStart, mouseCanceled, diff --git a/chromium/extensions/common/api/declarative_net_request.idl b/chromium/extensions/common/api/declarative_net_request.idl index 9edc8568eda..fd25367568f 100644 --- a/chromium/extensions/common/api/declarative_net_request.idl +++ b/chromium/extensions/common/api/declarative_net_request.idl @@ -37,6 +37,10 @@ namespace declarativeNetRequest { // TODO(crbug.com/947591): Add documentation once implementation is complete. [nodoc] enum HeaderOperation { + // Adds a new entry for the specified header. This operation is not + // supported for request headers. + append, + set, remove }; @@ -88,6 +92,7 @@ namespace declarativeNetRequest { }; // Describes modification to various url components. + [noinline_doc] dictionary URLTransform { // The new scheme for the request. Allowed values are "http", "https", // "ftp" and "chrome-extension". @@ -136,6 +141,7 @@ namespace declarativeNetRequest { DOMString? regexSubstitution; }; + [noinline_doc] dictionary RuleCondition { // The pattern which is matched against the network request url. @@ -232,8 +238,10 @@ namespace declarativeNetRequest { dictionary ModifyHeaderInfo { DOMString header; HeaderOperation operation; + DOMString? value; }; + [noinline_doc] dictionary RuleAction { // The type of action to perform. RuleActionType type; @@ -283,6 +291,7 @@ namespace declarativeNetRequest { DOMString rulesetId; }; + [noinline_doc] dictionary MatchedRuleInfo { MatchedRule rule; @@ -309,6 +318,7 @@ namespace declarativeNetRequest { MatchedRuleInfo[] rulesMatchedInfo; }; + [noinline_doc] dictionary RequestDetails { // The ID of the request. Request IDs are unique within a browser session. DOMString requestId; @@ -470,8 +480,8 @@ namespace declarativeNetRequest { // Fired when a rule is matched with a request. Only available for unpacked // extensions with the <code>declarativeNetRequestFeedback</code> permission // as this is intended to be used for debugging purposes only. - // |matched_rule_info|: The rule that has been matched along with - // information about the associated request. - static void onRuleMatchedDebug(MatchedRuleInfoDebug matched_rule_info); + // |info|: The rule that has been matched along with information about the + // associated request. + static void onRuleMatchedDebug(MatchedRuleInfoDebug info); }; }; diff --git a/chromium/extensions/common/api/declarative_net_request/constants.cc b/chromium/extensions/common/api/declarative_net_request/constants.cc index 6ded009261f..232659080f1 100644 --- a/chromium/extensions/common/api/declarative_net_request/constants.cc +++ b/chromium/extensions/common/api/declarative_net_request/constants.cc @@ -57,6 +57,7 @@ const char kRequestHeadersPath[] = "action.requestHeaders"; const char kResponseHeadersPath[] = "action.responseHeaders"; const char kHeaderNameKey[] = "header"; const char kHeaderOperationKey[] = "operation"; +const char kHeaderValueKey[] = "value"; } // namespace declarative_net_request } // namespace extensions diff --git a/chromium/extensions/common/api/declarative_net_request/constants.h b/chromium/extensions/common/api/declarative_net_request/constants.h index 85a12631fb3..bd11880cbb0 100644 --- a/chromium/extensions/common/api/declarative_net_request/constants.h +++ b/chromium/extensions/common/api/declarative_net_request/constants.h @@ -79,6 +79,7 @@ extern const char kRequestHeadersPath[]; extern const char kResponseHeadersPath[]; extern const char kHeaderNameKey[]; extern const char kHeaderOperationKey[]; +extern const char kHeaderValueKey[]; } // namespace declarative_net_request } // namespace extensions diff --git a/chromium/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc b/chromium/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc index bd665f9891d..a4876bcb162 100644 --- a/chromium/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc +++ b/chromium/extensions/common/api/declarative_net_request/dnr_manifest_handler.cc @@ -28,19 +28,6 @@ namespace dnr_api = api::declarative_net_request; namespace declarative_net_request { -namespace { - -bool IsEmptyExtensionResource(const ExtensionResource& resource) { - // Note that just checking for ExtensionResource::empty() isn't correct since - // it checks |ExtensionResource::extension_root()::empty()| which can return - // true for a dummy extension created as part of the webstore installation - // flow. See crbug.com/1087348. - return resource.extension_id().empty() && resource.extension_root().empty() && - resource.relative_path().empty(); -} - -} // namespace - DNRManifestHandler::DNRManifestHandler() = default; DNRManifestHandler::~DNRManifestHandler() = default; @@ -96,8 +83,7 @@ bool DNRManifestHandler::Parse(Extension* extension, base::string16* error) { int index, DNRManifestData::RulesetInfo* info) { // Path validation. ExtensionResource resource = extension->GetResource(rulesets[index].path); - if (IsEmptyExtensionResource(resource) || - resource.relative_path().ReferencesParent()) { + if (resource.empty() || resource.relative_path().ReferencesParent()) { *error = ErrorUtils::FormatErrorMessageUTF16( errors::kRulesFileIsInvalid, keys::kDeclarativeNetRequestKey, keys::kDeclarativeRuleResourcesKey, rulesets[index].path); diff --git a/chromium/extensions/common/api/declarative_net_request/test_utils.cc b/chromium/extensions/common/api/declarative_net_request/test_utils.cc index ad0382daa0f..c5a54e160e5 100644 --- a/chromium/extensions/common/api/declarative_net_request/test_utils.cc +++ b/chromium/extensions/common/api/declarative_net_request/test_utils.cc @@ -147,8 +147,12 @@ std::unique_ptr<base::DictionaryValue> TestRuleRedirect::ToValue() const { return dict; } -TestHeaderInfo::TestHeaderInfo(std::string header, std::string operation) - : header(std::move(header)), operation(std::move(operation)) {} +TestHeaderInfo::TestHeaderInfo(std::string header, + std::string operation, + base::Optional<std::string> value) + : header(std::move(header)), + operation(std::move(operation)), + value(std::move(value)) {} TestHeaderInfo::~TestHeaderInfo() = default; TestHeaderInfo::TestHeaderInfo(const TestHeaderInfo&) = default; TestHeaderInfo& TestHeaderInfo::operator=(const TestHeaderInfo&) = default; @@ -157,6 +161,7 @@ std::unique_ptr<base::DictionaryValue> TestHeaderInfo::ToValue() const { auto dict = std::make_unique<base::DictionaryValue>(); SetValue(dict.get(), kHeaderNameKey, header); SetValue(dict.get(), kHeaderOperationKey, operation); + SetValue(dict.get(), kHeaderValueKey, value); return dict; } diff --git a/chromium/extensions/common/api/declarative_net_request/test_utils.h b/chromium/extensions/common/api/declarative_net_request/test_utils.h index cd3200cd0b2..50e9253e12b 100644 --- a/chromium/extensions/common/api/declarative_net_request/test_utils.h +++ b/chromium/extensions/common/api/declarative_net_request/test_utils.h @@ -107,13 +107,16 @@ struct TestRuleRedirect : public DictionarySource { }; struct TestHeaderInfo : public DictionarySource { - TestHeaderInfo(std::string header, std::string operation); + TestHeaderInfo(std::string header, + std::string operation, + base::Optional<std::string> value); ~TestHeaderInfo() override; TestHeaderInfo(const TestHeaderInfo&); TestHeaderInfo& operator=(const TestHeaderInfo&); base::Optional<std::string> header; base::Optional<std::string> operation; + base::Optional<std::string> value; std::unique_ptr<base::DictionaryValue> ToValue() const override; }; diff --git a/chromium/extensions/common/api/externs_checker.py b/chromium/extensions/common/api/externs_checker.py index 74906bd4883..09a97bb108a 100644 --- a/chromium/extensions/common/api/externs_checker.py +++ b/chromium/extensions/common/api/externs_checker.py @@ -7,7 +7,10 @@ class ExternsChecker(object): src/ $ python tools/json_schema_compiler/compiler.py\ %s --root=. --generator=externs > %s""" - def __init__(self, input_api, output_api, api_pairs): + def __init__(self, input_api, output_api, api_pairs=None, api_root=None): + if api_pairs is None: + api_pairs = self.ParseApiFileList(input_api, api_root=api_root) + self._input_api = input_api self._output_api = output_api self._api_pairs = api_pairs @@ -16,6 +19,31 @@ class ExternsChecker(object): if not input_api.os_path.exists(path): raise OSError('Path Not Found: %s' % path) + @staticmethod + def ParseApiFileList(input_api, api_root=None): + """Extract the API pairs from the registered list.""" + if api_root is None: + api_root = input_api.PresubmitLocalPath() + externs_root = input_api.os_path.join( + input_api.change.RepositoryRoot(), 'third_party', 'closure_compiler', + 'externs') + + ret = {} + listing = input_api.os_path.join(api_root, 'generated_externs_list.txt') + for line in input_api.ReadFile(listing).splitlines(): + # Skip blank & comment lines. + if not line.split('#', 1)[0].strip(): + continue + + source = input_api.os_path.join(api_root, line) + api_name, ext = line.rsplit('.', 1) + assert ext == 'json' or ext == 'idl' + externs = input_api.os_path.join(externs_root, api_name + '.js') + ret[source] = externs + + assert ret + return ret + def RunChecks(self): bad_files = [] affected = [f.AbsoluteLocalPath() for f in diff --git a/chromium/extensions/common/api/generated_externs_list.txt b/chromium/extensions/common/api/generated_externs_list.txt new file mode 100644 index 00000000000..e035738dc72 --- /dev/null +++ b/chromium/extensions/common/api/generated_externs_list.txt @@ -0,0 +1,12 @@ +# APIs that have their externs generated. +# TODO(rdevlin.cronin): Add more! +audio.idl +automation.idl +bluetooth.idl +bluetooth_private.idl +clipboard.idl +management.json +metrics_private.json +mime_handler_private.idl +networking_private.idl +system_display.idl diff --git a/chromium/extensions/common/api/networking_onc.idl b/chromium/extensions/common/api/networking_onc.idl index a6071c99bcb..85691350559 100644 --- a/chromium/extensions/common/api/networking_onc.idl +++ b/chromium/extensions/common/api/networking_onc.idl @@ -706,6 +706,8 @@ namespace networking.onc { IPConfigProperties[]? IPConfigs; // The network's MAC address. DOMString? MacAddress; + // Whether the network is metered. + boolean? Metered; // A user friendly network name. DOMString? Name; // The IP configuration type for the name servers used by the network. @@ -762,6 +764,8 @@ namespace networking.onc { IPConfigProperties[]? IPConfigs; // See $(ref:NetworkProperties.MacAddress). DOMString? MacAddress; + // See $(ref:NetworkProperties.Metered). + ManagedBoolean? Metered; // See $(ref:NetworkProperties.Name). ManagedDOMString? Name; // See $(ref:NetworkProperties.NameServersConfigType). diff --git a/chromium/extensions/common/api/networking_private.idl b/chromium/extensions/common/api/networking_private.idl index ec5efed3bde..ddedf0e4218 100644 --- a/chromium/extensions/common/api/networking_private.idl +++ b/chromium/extensions/common/api/networking_private.idl @@ -711,6 +711,7 @@ namespace networkingPrivate { IPConfigType? IPAddressConfigType; IPConfigProperties[]? IPConfigs; DOMString? MacAddress; + boolean? Metered; DOMString? Name; IPConfigType? NameServersConfigType; long? Priority; @@ -739,6 +740,7 @@ namespace networkingPrivate { ManagedIPConfigType? IPAddressConfigType; IPConfigProperties[]? IPConfigs; DOMString? MacAddress; + ManagedBoolean? Metered; ManagedDOMString? Name; ManagedIPConfigType? NameServersConfigType; ManagedLong? Priority; |