Commit 9ecf1e9f authored by Calder Kitagawa's avatar Calder Kitagawa Committed by Commit Bot

[WebShareTarget] Update manifest parser to use action and params

Phase 2 of the work to replace url_template with action and params as
per the updated WebShareTarget spec:
https://wicg.github.io/web-share-target/.

This work stops the parser from parsing |url_template| for
|share_target| and instead parses |action| and |params|. This will
effectively disable any downstream dependencies which trigger when
|url_template| is populated. Disabled codepaths are in
chrome/browser/webshare and chrome/android/webapk. This will be
quickly remedied before M70.

See the bug for a detailed plan for performing these changes.

Bug: 871788
Change-Id: If15f1158ae439286c7a2d64538842c21fd1b9d5f
Reviewed-on: https://chromium-review.googlesource.com/1168115
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarXi Han <hanxi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584146}
parent 78356dac
......@@ -355,6 +355,17 @@ GURL ManifestParser::ParseShareTargetURLTemplate(
return url_template;
}
blink::Manifest::ShareTargetParams ManifestParser::ParseShareTargetParams(
const base::DictionaryValue& share_target_params) {
blink::Manifest::ShareTargetParams params;
// NOTE: These are key names for query parameters, which are filled with share
// data. As such, |params.url| is just a string.
params.text = ParseString(share_target_params, "text", Trim);
params.title = ParseString(share_target_params, "title", Trim);
params.url = ParseString(share_target_params, "url", Trim);
return params;
}
base::Optional<blink::Manifest::ShareTarget> ManifestParser::ParseShareTarget(
const base::DictionaryValue& dictionary) {
if (!dictionary.HasKey("share_target"))
......@@ -365,8 +376,25 @@ base::Optional<blink::Manifest::ShareTarget> ManifestParser::ParseShareTarget(
dictionary.GetDictionary("share_target", &share_target_dict);
share_target.url_template = ParseShareTargetURLTemplate(*share_target_dict);
if (share_target.url_template.is_empty())
share_target.action = ParseURL(*share_target_dict, "action", manifest_url_,
ParseURLOriginRestrictions::kSameOriginOnly);
if (!share_target.action.is_valid()) {
AddErrorInfo(
"property 'share_target' ignored. Property 'action' is "
"invalid.");
return base::nullopt;
}
const base::DictionaryValue* share_target_params_dict = nullptr;
if (!share_target_dict->GetDictionary("params", &share_target_params_dict)) {
AddErrorInfo(
"property 'share_target' ignored. Property 'params' type "
"dictionary expected.");
return base::nullopt;
}
share_target.params = ParseShareTargetParams(*share_target_params_dict);
return base::Optional<blink::Manifest::ShareTarget>(share_target);
}
......
......@@ -161,6 +161,13 @@ class CONTENT_EXPORT ManifestParser {
// Returns the parsed GURL if any, or an empty GURL if the parsing failed.
GURL ParseShareTargetURLTemplate(const base::DictionaryValue& share_target);
// Parses the 'params' field of a Share Target, as defined in:
// https://github.com/WICG/web-share-target/blob/master/docs/interface.md
// Returns a parsed Manifest::ShareTargetParams, not all fields need to be
// populated.
blink::Manifest::ShareTargetParams ParseShareTargetParams(
const base::DictionaryValue& share_target_params);
// Parses the 'share_target' field of a Manifest, as defined in:
// https://github.com/WICG/web-share-target/blob/master/docs/interface.md
// Returns the parsed Web Share target. The returned Share Target is null if
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment