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

Unified Diff: chrome/renderer/manifest/manifest_parser_unittest.cc

Issue 936413003: Allow extensions of the ManifestParser outside of the content/ layer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WIP - changing chrome layer relationship Created 5 years, 10 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
Index: chrome/renderer/manifest/manifest_parser_unittest.cc
diff --git a/chrome/renderer/manifest/manifest_parser_unittest.cc b/chrome/renderer/manifest/manifest_parser_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..4e556213517e2eacd1a022c74fb9fa7a07c31f6d
--- /dev/null
+++ b/chrome/renderer/manifest/manifest_parser_unittest.cc
@@ -0,0 +1,169 @@
+// 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/renderer/manifest/manifest_parser.h"
+
+#include "chrome/renderer/chrome_content_renderer_client.h"
+#include "content/public/common/content_client.h"
+#include "content/public/common/manifest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using content::Manifest;
+using content::ManifestParser;
+
+class ChromeManifestParserTest : public testing::Test {
+ protected:
+ ChromeManifestParserTest() {
+ SetContentClient(&test_content_client_);
+ SetRendererClientForTesting(&test_content_renderer_client_);
+ }
+
+ ~ChromeManifestParserTest() override {}
+
+ Manifest ParseManifestWithURLs(const base::StringPiece& data,
+ const GURL& document_url,
+ const GURL& manifest_url) {
+ scoped_ptr<ManifestParser> parser = ManifestParser::Get();
+ parser->Parse(data, document_url, manifest_url);
+ errors_ = parser->errors();
+ return parser->manifest();
+ }
+
+ Manifest ParseManifest(const base::StringPiece& data) {
+ return ParseManifestWithURLs(
+ data, default_document_url, default_manifest_url);
+ }
+
+ const std::vector<std::string>& errors() const {
+ return errors_;
+ }
+
+ unsigned int GetErrorCount() const {
+ return errors_.size();
+ }
+
+ static const GURL default_document_url;
+ static const GURL default_manifest_url;
+
+ private:
+ std::vector<std::string> errors_;
+
+ content::ContentClient test_content_client_;
+ ChromeContentRendererClient test_content_renderer_client_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeManifestParserTest);
+};
+
+const GURL ChromeManifestParserTest::default_document_url(
+ "http://foo.com/index.html");
+const GURL ChromeManifestParserTest::default_manifest_url(
+ "http://foo.com/manifest.json");
+
+// This is equivalent to ManifestParserTest.EmptyStringNull but tests properties
+// set by the ChromeManifestParser.
+TEST_F(ChromeManifestParserTest, EmptyStringNull) {
+ Manifest manifest = ParseManifest("");
+
+ // This Manifest is not a valid JSON object, it's a parsing error.
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ("Manifest parsing error: Line: 1, column: 1, Unexpected token.",
+ errors()[0]);
+
+ // A parsing error is equivalent to an empty manifest.
+ EXPECT_TRUE(manifest.gcm_sender_id.is_null());
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+}
+
+// This is equivalent to ManifestParserTest.ValidNoContentParses but tests
+// properties set by the ChromeManifestParser.
+TEST_F(ChromeManifestParserTest, ValidNoContentParses) {
+ Manifest manifest = ParseManifest("{}");
+
+ // Empty Manifest is not a parsing error.
+ EXPECT_EQ(0u, GetErrorCount());
+
+ // Check that all the fields are null in that case.
+ EXPECT_TRUE(manifest.gcm_sender_id.is_null());
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+}
+
+TEST_F(ChromeManifestParserTest, GCMSenderIDParseRules) {
+ // Smoke test.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_sender_id\": \"foo\" }");
+ EXPECT_TRUE(EqualsASCII(manifest.gcm_sender_id.string(), "foo"));
+ EXPECT_EQ(0u, GetErrorCount());
+ }
+
+ // Trim whitespaces.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_sender_id\": \" foo \" }");
+ EXPECT_TRUE(EqualsASCII(manifest.gcm_sender_id.string(), "foo"));
+ EXPECT_EQ(0u, GetErrorCount());
+ }
+
+ // Don't parse if the property isn't a string.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_sender_id\": {} }");
+ EXPECT_TRUE(manifest.gcm_sender_id.is_null());
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ("Manifest parsing error: property 'gcm_sender_id' ignored,"
+ " type string expected.",
+ errors()[0]);
+ }
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_sender_id\": 42 }");
+ EXPECT_TRUE(manifest.gcm_sender_id.is_null());
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ("Manifest parsing error: property 'gcm_sender_id' ignored,"
+ " type string expected.",
+ errors()[0]);
+ }
+}
+
+TEST_F(ChromeManifestParserTest, GCMUserVisibleOnlyParseRules) {
+ // Smoke test.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_user_visible_only\": true }");
+ EXPECT_TRUE(manifest.gcm_user_visible_only);
+ EXPECT_EQ(0u, GetErrorCount());
+ }
+
+ // Don't parse if the property isn't a boolean.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_user_visible_only\": {} }");
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ(
+ "Manifest parsing error: property 'gcm_user_visible_only' ignored,"
+ " type boolean expected.",
+ errors()[0]);
+ }
+ {
+ Manifest manifest = ParseManifest(
+ "{ \"gcm_user_visible_only\": \"true\" }");
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ(
+ "Manifest parsing error: property 'gcm_user_visible_only' ignored,"
+ " type boolean expected.",
+ errors()[0]);
+ }
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_user_visible_only\": 1 }");
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+ EXPECT_EQ(1u, GetErrorCount());
+ EXPECT_EQ(
+ "Manifest parsing error: property 'gcm_user_visible_only' ignored,"
+ " type boolean expected.",
+ errors()[0]);
+ }
+
+ // "False" should set the boolean false without throwing errors.
+ {
+ Manifest manifest = ParseManifest("{ \"gcm_user_visible_only\": false }");
+ EXPECT_FALSE(manifest.gcm_user_visible_only);
+ EXPECT_EQ(0u, GetErrorCount());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698