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(), ApplicationData::LOCAL_DIRECTORY,
23 manifest, "", &error);
27 const CSPInfo* GetCSPInfo(
28 scoped_refptr<ApplicationData> application) {
29 const CSPInfo* info = static_cast<CSPInfo*>(
30 application->GetManifestData(GetCSPKey(application->GetPackageType())));
34 base::DictionaryValue manifest;
37 // FIXME: the default CSP policy settings in CSP manifest handler
38 // are temporally removed, since they had affected some tests and legacy apps.
39 TEST_F(CSPHandlerTest, DISABLED_NoCSP) {
40 manifest.SetString(keys::kNameKey, "no name");
41 manifest.SetString(keys::kXWalkVersionKey, "0");
42 scoped_refptr<ApplicationData> application = CreateApplication();
43 EXPECT_TRUE(application.get());
44 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 2);
47 TEST_F(CSPHandlerTest, EmptyCSP) {
48 manifest.SetString(keys::kNameKey, "no name");
49 manifest.SetString(keys::kXWalkVersionKey, "0");
50 manifest.SetString(keys::kCSPKey, "");
51 scoped_refptr<ApplicationData> application = CreateApplication();
52 EXPECT_TRUE(application.get());
53 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 0);
56 TEST_F(CSPHandlerTest, CSP) {
57 manifest.SetString(keys::kNameKey, "no name");
58 manifest.SetString(keys::kXWalkVersionKey, "0");
59 manifest.SetString(keys::kCSPKey, "default-src 'self' ");
60 scoped_refptr<ApplicationData> application = CreateApplication();
61 EXPECT_TRUE(application.get());
62 const std::map<std::string, std::vector<std::string> >& policies =
63 GetCSPInfo(application)->GetDirectives();
64 EXPECT_EQ(policies.size(), 1);
65 std::map<std::string, std::vector<std::string> >::const_iterator it =
66 policies.find("default-src");
67 ASSERT_NE(it, policies.end());
68 EXPECT_EQ(it->second.size(), 1);
69 EXPECT_STREQ((it->second)[0].c_str(), "'self'");
73 TEST_F(CSPHandlerTest, WGTEmptyCSP) {
74 manifest.SetString(widget_keys::kNameKey, "no name");
75 manifest.SetString(widget_keys::kXWalkVersionKey, "0");
76 manifest.SetString(widget_keys::kCSPKey, "");
77 scoped_refptr<ApplicationData> application = CreateApplication();
78 EXPECT_TRUE(application.get());
79 EXPECT_TRUE(GetCSPInfo(application));
80 EXPECT_EQ(GetCSPInfo(application)->GetDirectives().size(), 0);
83 TEST_F(CSPHandlerTest, WGTCSP) {
84 manifest.SetString(widget_keys::kNameKey, "no name");
85 manifest.SetString(widget_keys::kXWalkVersionKey, "0");
86 manifest.SetString(widget_keys::kCSPKey, "default-src 'self' ");
87 scoped_refptr<ApplicationData> application = CreateApplication();
88 EXPECT_TRUE(application.get());
89 EXPECT_TRUE(GetCSPInfo(application));
90 const std::map<std::string, std::vector<std::string> >& policies =
91 GetCSPInfo(application)->GetDirectives();
92 EXPECT_EQ(policies.size(), 1);
93 std::map<std::string, std::vector<std::string> >::const_iterator it =
94 policies.find("default-src");
95 ASSERT_NE(it, policies.end());
96 EXPECT_EQ(it->second.size(), 1);
97 EXPECT_STREQ((it->second)[0].c_str(), "'self'");
101 } // namespace application