| Index: content/renderer/manifest/manifest_parser_unittest.cc
|
| diff --git a/content/renderer/manifest/manifest_parser_unittest.cc b/content/renderer/manifest/manifest_parser_unittest.cc
|
| index 8b21c69d5d3e225f69d251ff3cd8e447bfada1a8..aa2e5d9cabfc86be4fa5752ec4dc47e6f29740b8 100644
|
| --- a/content/renderer/manifest/manifest_parser_unittest.cc
|
| +++ b/content/renderer/manifest/manifest_parser_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include <memory>
|
|
|
| #include "base/macros.h"
|
| +#include "base/optional.h"
|
| #include "base/strings/string_util.h"
|
| #include "content/public/common/manifest.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -982,6 +983,86 @@ TEST_F(ManifestParserTest, IconPurposeParseRules) {
|
| }
|
| }
|
|
|
| +TEST_F(ManifestParserTest, ShareTargetParseRules) {
|
| + // Contains share_target field but no keys.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"share_target\": {} }");
|
| + EXPECT_FALSE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Key in share_target that isn't valid.
|
| + {
|
| + Manifest manifest = ParseManifest(
|
| + "{ \"share_target\": {\"incorrect_key\": \"some_value\" } }");
|
| + ASSERT_FALSE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +}
|
| +
|
| +TEST_F(ManifestParserTest, ShareTargetUrlTemplateParseRules) {
|
| + // Contains share_target and url_template, but url_template is empty.
|
| + {
|
| + Manifest manifest =
|
| + ParseManifest("{ \"share_target\": { \"url_template\": \"\" } }");
|
| + ASSERT_TRUE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(base::EqualsASCII(
|
| + manifest.share_target.value().url_template.string(), ""));
|
| + EXPECT_FALSE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Don't parse if property isn't a string.
|
| + {
|
| + Manifest manifest =
|
| + ParseManifest("{ \"share_target\": { \"url_template\": {} } }");
|
| + EXPECT_FALSE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(manifest.IsEmpty());
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("property 'url_template' ignored, type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Don't parse if property isn't a string.
|
| + {
|
| + Manifest manifest =
|
| + ParseManifest("{ \"share_target\": { \"url_template\": 42 } }");
|
| + EXPECT_FALSE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(manifest.IsEmpty());
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("property 'url_template' ignored, type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Smoke test: Contains share_target and url_template, and url_template is
|
| + // valid template.
|
| + {
|
| + Manifest manifest = ParseManifest(
|
| + "{ \"share_target\": {\"url_template\": \"share/?title={title}\" } }");
|
| + ASSERT_TRUE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(
|
| + base::EqualsASCII(manifest.share_target.value().url_template.string(),
|
| + "share/?title={title}"));
|
| + EXPECT_FALSE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Smoke test: Contains share_target and url_template, and url_template is
|
| + // invalid template.
|
| + {
|
| + Manifest manifest = ParseManifest(
|
| + "{ \"share_target\": {\"url_template\": \"share/?title={title\" } }");
|
| + ASSERT_TRUE(manifest.share_target.has_value());
|
| + EXPECT_TRUE(
|
| + base::EqualsASCII(manifest.share_target.value().url_template.string(),
|
| + "share/?title={title"));
|
| + EXPECT_FALSE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +}
|
| +
|
| TEST_F(ManifestParserTest, RelatedApplicationsParseRules) {
|
| // If no application, empty list.
|
| {
|
|
|