1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "xwalk/application/common/manifest_handlers/csp_handler.h"
7 #include "xwalk/application/common/application_manifest_constants.h"
8 #include "testing/gtest/include/gtest/gtest.h"
12 namespace keys = application_manifest_keys;
13 namespace widget_keys = application_widget_keys;
15 namespace application {
17 class CSPHandlerTest: public testing::Test {
19 scoped_refptr<ApplicationData> CreateApplication() {
21 scoped_refptr<ApplicationData> application = ApplicationData::Create(
22 base::FilePath(), Manifest::INVALID_TYPE, manifest, "", &error);
26 const CSPInfo* GetCSPInfo(
27 scoped_refptr<ApplicationData> application) {
28 const CSPInfo* info = static_cast<CSPInfo*>(
29 application->GetManifestData(GetCSPKey(application->GetPackageType())));
33 base::DictionaryValue manifest;
36 // FIXME: the default CSP policy settings in CSP manifest handler
37 // are temporally removed, since they had affected some tests and legacy apps.
38 TEST_F(CSPHandlerTest, DISABLED_NoCSP) {
39 manifest.SetString(keys::kNameKey, "no name");
40 manifest.SetString(keys::kXWalkVersionKey, "0");
41 scoped_refptr<ApplicationData> application = CreateApplication();
42 EXPECT_TRUE(application.get());
43 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 2);
46 TEST_F(CSPHandlerTest, EmptyCSP) {
47 manifest.SetString(keys::kNameKey, "no name");
48 manifest.SetString(keys::kXWalkVersionKey, "0");
49 manifest.SetString(keys::kCSPKey, "");
50 scoped_refptr<ApplicationData> application = CreateApplication();
51 EXPECT_TRUE(application.get());
52 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 0);
55 TEST_F(CSPHandlerTest, CSP) {
56 manifest.SetString(keys::kNameKey, "no name");
57 manifest.SetString(keys::kXWalkVersionKey, "0");
58 manifest.SetString(keys::kCSPKey, "default-src 'self' ");
59 scoped_refptr<ApplicationData> application = CreateApplication();
60 EXPECT_TRUE(application.get());
61 const std::map<std::string, std::vector<std::string> >& policies =
62 GetCSPInfo(application)->GetDirectives();
63 EXPECT_EQ(policies.size(), 1);
64 std::map<std::string, std::vector<std::string> >::const_iterator it =
65 policies.find("default-src");
66 ASSERT_NE(it, policies.end());
67 EXPECT_EQ(it->second.size(), 1);
68 EXPECT_STREQ((it->second)[0].c_str(), "'self'");
72 TEST_F(CSPHandlerTest, WGTEmptyCSP) {
73 manifest.SetString(widget_keys::kNameKey, "no name");
74 manifest.SetString(widget_keys::kXWalkVersionKey, "0");
75 manifest.SetString(widget_keys::kCSPKey, "");
76 scoped_refptr<ApplicationData> application = CreateApplication();
77 EXPECT_TRUE(application.get());
78 EXPECT_TRUE(GetCSPInfo(application));
79 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 0);
82 TEST_F(CSPHandlerTest, WGTCSP) {
83 manifest.SetString(widget_keys::kNameKey, "no name");
84 manifest.SetString(widget_keys::kXWalkVersionKey, "0");
85 manifest.SetString(widget_keys::kCSPKey, "default-src 'self' ");
86 scoped_refptr<ApplicationData> application = CreateApplication();
87 EXPECT_TRUE(application.get());
88 EXPECT_TRUE(GetCSPInfo(application));
89 const std::map<std::string, std::vector<std::string> >& policies =
90 GetCSPInfo(application)->GetDirectives();
91 EXPECT_EQ(policies.size(), 1);
92 std::map<std::string, std::vector<std::string> >::const_iterator it =
93 policies.find("default-src");
94 ASSERT_NE(it, policies.end());
95 EXPECT_EQ(it->second.size(), 1);
96 EXPECT_STREQ((it->second)[0].c_str(), "'self'");
100 } // namespace application