| 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 39384f8be7598d7b36e2f375f1d4d458af4ac02a..1d6793ca3312eeca9b2fda3dbe11c86991429bea 100644
|
| --- a/content/renderer/manifest/manifest_parser_unittest.cc
|
| +++ b/content/renderer/manifest/manifest_parser_unittest.cc
|
| @@ -78,6 +78,7 @@ TEST_F(ManifestParserTest, EmptyStringNull) {
|
| ASSERT_TRUE(manifest.start_url.is_empty());
|
| ASSERT_EQ(manifest.display, Manifest::DISPLAY_MODE_UNSPECIFIED);
|
| ASSERT_EQ(manifest.orientation, blink::WebScreenOrientationLockDefault);
|
| + ASSERT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| ASSERT_TRUE(manifest.gcm_sender_id.is_null());
|
| }
|
|
|
| @@ -94,15 +95,16 @@ TEST_F(ManifestParserTest, ValidNoContentParses) {
|
| ASSERT_TRUE(manifest.start_url.is_empty());
|
| ASSERT_EQ(manifest.display, Manifest::DISPLAY_MODE_UNSPECIFIED);
|
| ASSERT_EQ(manifest.orientation, blink::WebScreenOrientationLockDefault);
|
| + ASSERT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| ASSERT_TRUE(manifest.gcm_sender_id.is_null());
|
| }
|
|
|
| TEST_F(ManifestParserTest, MultipleErrorsReporting) {
|
| Manifest manifest = ParseManifest("{ \"name\": 42, \"short_name\": 4,"
|
| - "\"orientation\": {}, \"display\": \"foo\", \"start_url\": null,"
|
| - "\"icons\": {} }");
|
| + "\"orientation\": {}, \"display\": \"foo\","
|
| + "\"start_url\": null, \"icons\": {}, \"theme_color\": 42 }");
|
|
|
| - EXPECT_EQ(6u, GetErrorCount());
|
| + EXPECT_EQ(7u, GetErrorCount());
|
|
|
| EXPECT_EQ("Manifest parsing error: property 'name' ignored,"
|
| " type string expected.",
|
| @@ -121,6 +123,9 @@ TEST_F(ManifestParserTest, MultipleErrorsReporting) {
|
| EXPECT_EQ("Manifest parsing error: property 'icons' ignored, "
|
| "type array expected.",
|
| errors()[5]);
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[6]);
|
| }
|
|
|
| TEST_F(ManifestParserTest, NameParseRules) {
|
| @@ -979,6 +984,159 @@ TEST_F(ManifestParserTest, ParsePreferRelatedApplicationsParseRules) {
|
| }
|
| }
|
|
|
| +TEST_F(ManifestParserTest, ThemeColorParserRules) {
|
| + // Smoke test.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"#FF0000\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFFFF0000);
|
| + EXPECT_FALSE(manifest.IsEmpty());
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Trim whitespaces.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \" blue \" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFF0000FF);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Don't parse if theme_color isn't a string.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": {} }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Don't parse if theme_color isn't a string.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": false }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Don't parse if theme_color isn't a string.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": null }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Don't parse if theme_color isn't a string.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": [] }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Don't parse if theme_color isn't a string.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": 42 }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " type string expected.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Parse fails if string is not in a known format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"foo(bar)\" }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored,"
|
| + " 'foo(bar)' is not a valid color.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Parse fails if string is not in a known format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"bleu\" }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored, 'bleu'"
|
| + " is not a valid color.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Parse fails if string is not in a known format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"FF00FF\" }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored, 'FF00FF'"
|
| + " is not a valid color.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Parse fails if multiple values for theme_color are given.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"#ABC #DEF\" }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored, "
|
| + "'#ABC #DEF' is not a valid color.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Parse fails if multiple values for theme_color are given.
|
| + {
|
| + Manifest manifest = ParseManifest(
|
| + "{ \"theme_color\": \"#AABBCC #DDEEFF\" }");
|
| + EXPECT_EQ(manifest.theme_color, Manifest::kInvalidOrMissingThemeColor);
|
| + EXPECT_EQ(1u, GetErrorCount());
|
| + EXPECT_EQ("Manifest parsing error: property 'theme_color' ignored, "
|
| + "'#AABBCC #DDEEFF' is not a valid color.",
|
| + errors()[0]);
|
| + }
|
| +
|
| + // Accept CSS color keyword format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"blue\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFF0000FF);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Accept CSS color keyword format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"chartreuse\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFF7FFF00);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Accept CSS RGB format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"#FFF\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFFFFFFFF);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Accept CSS RGB format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"#ABC\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFFAABBCC);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +
|
| + // Accept CSS RRGGBB format.
|
| + {
|
| + Manifest manifest = ParseManifest("{ \"theme_color\": \"#FF0000\" }");
|
| + EXPECT_EQ(manifest.theme_color, 0xFFFF0000);
|
| + EXPECT_EQ(0u, GetErrorCount());
|
| + }
|
| +}
|
| +
|
| TEST_F(ManifestParserTest, GCMSenderIDParseRules) {
|
| // Smoke test.
|
| {
|
|
|