Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: chrome/browser/banners/webapp_manifest_validator_unittest.cc

Issue 2050933002: Upstream: Add additional checks before creating a WebAPK after clicking "Add to Homescreen" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'create_webapk_requirements_enum_class' into create_webapk_requirements2 Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/banners/webapp_manifest_validator.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/banners/webapp_manifest_validator_unittest.cc
diff --git a/chrome/browser/banners/webapp_manifest_validator_unittest.cc b/chrome/browser/banners/webapp_manifest_validator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bf597b23959fc32175acc52bf3d69ba407bd0868
--- /dev/null
+++ b/chrome/browser/banners/webapp_manifest_validator_unittest.cc
@@ -0,0 +1,150 @@
+// Copyright 2015 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.
+
+#include "chrome/browser/banners/webapp_manifest_validator.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "content/public/common/manifest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/platform/WebDisplayMode.h"
+
+namespace banners {
+
+class WebappManifestValidatorUnitTest : public testing::Test {
+ public:
+ WebappManifestValidatorUnitTest() { }
+
+ protected:
+ static base::NullableString16 ToNullableUTF16(const std::string& str) {
+ return base::NullableString16(base::UTF8ToUTF16(str), false);
+ }
+
+ static content::Manifest GetValidManifest() {
+ content::Manifest manifest;
+ manifest.name = ToNullableUTF16("foo");
+ manifest.short_name = ToNullableUTF16("bar");
+ manifest.start_url = GURL("http://example.com");
+ manifest.display = blink::WebDisplayModeStandalone;
+
+ content::Manifest::Icon icon;
+ icon.type = ToNullableUTF16("image/png");
+ icon.sizes.push_back(gfx::Size(144, 144));
+ manifest.icons.push_back(icon);
+
+ return manifest;
+ }
+
+ static bool IsManifestGood(const content::Manifest& manifest) {
+ // The second argument is the web_contents pointer, which is used for
+ // developer debug logging to the console. The logging is skipped inside the
+ // method if a null web_contents pointer is provided, so this is safe.
+ // The third argument is the is_debug_mode boolean value, which is true only
+ // when it is triggered by the developer's action in DevTools.
+ OutputDeveloperMessageCode code = OutputDeveloperMessageCode::kNone;
+ return webapp_manifest_validator::IsManifestGoodForWebapp(manifest, &code);
+ }
+};
+
+TEST_F(WebappManifestValidatorUnitTest, EmptyManifestIsInvalid) {
+ content::Manifest manifest;
+ EXPECT_FALSE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, CheckMinimalValidManifest) {
+ content::Manifest manifest = GetValidManifest();
+ EXPECT_TRUE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, ManifestRequiresNameORShortName) {
+ content::Manifest manifest = GetValidManifest();
+
+ manifest.name = base::NullableString16();
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ manifest.name = ToNullableUTF16("foo");
+ manifest.short_name = base::NullableString16();
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ manifest.name = base::NullableString16();
+ EXPECT_FALSE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest,
+ ManifestRequiresNonEmptyNameORShortName) {
+ content::Manifest manifest = GetValidManifest();
+
+ manifest.name = ToNullableUTF16("");
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ manifest.name = ToNullableUTF16("foo");
+ manifest.short_name = ToNullableUTF16("");
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ manifest.name = ToNullableUTF16("");
+ EXPECT_FALSE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, ManifestRequiresValidStartURL) {
+ content::Manifest manifest = GetValidManifest();
+
+ manifest.start_url = GURL();
+ EXPECT_FALSE(IsManifestGood(manifest));
+
+ manifest.start_url = GURL("/");
+ EXPECT_FALSE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, ManifestRequiresImagePNG) {
+ content::Manifest manifest = GetValidManifest();
+
+ manifest.icons[0].type = ToNullableUTF16("image/gif");
+ EXPECT_FALSE(IsManifestGood(manifest));
+ manifest.icons[0].type = base::NullableString16();
+ EXPECT_FALSE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, ManifestRequiresMinimalSize) {
+ content::Manifest manifest = GetValidManifest();
+
+ // The icon MUST be 144x144 size at least.
+ manifest.icons[0].sizes[0] = gfx::Size(1, 1);
+ EXPECT_FALSE(IsManifestGood(manifest));
+
+ // If one of the sizes match the requirement, it should be accepted.
+ manifest.icons[0].sizes.push_back(gfx::Size(144, 144));
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ // Higher than the required size is okay.
+ manifest.icons[0].sizes[1] = gfx::Size(200, 200);
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ // Non-square is okay.
+ manifest.icons[0].sizes[1] = gfx::Size(144, 200);
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ // The representation of the keyword 'any' should be recognized.
+ manifest.icons[0].sizes[1] = gfx::Size(0, 0);
+ EXPECT_TRUE(IsManifestGood(manifest));
+}
+
+TEST_F(WebappManifestValidatorUnitTest, ManifestDisplayStandaloneFullscreen) {
+ content::Manifest manifest = GetValidManifest();
+
+ manifest.display = blink::WebDisplayModeUndefined;
+ EXPECT_FALSE(IsManifestGood(manifest));
+
+ manifest.display = blink::WebDisplayModeBrowser;
+ EXPECT_FALSE(IsManifestGood(manifest));
+
+ manifest.display = blink::WebDisplayModeMinimalUi;
+ EXPECT_FALSE(IsManifestGood(manifest));
+
+ manifest.display = blink::WebDisplayModeStandalone;
+ EXPECT_TRUE(IsManifestGood(manifest));
+
+ manifest.display = blink::WebDisplayModeFullscreen;
+ EXPECT_TRUE(IsManifestGood(manifest));
+}
+
+} // namespace banners
« no previous file with comments | « chrome/browser/banners/webapp_manifest_validator.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698