ASSERT_FALSE(runner.Run());
}
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_Invalid_NotURI) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_Invalid_NoPKGID) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_Invalid_OverLength) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_ValidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ for (appdefined_privilege_x* priv :
+ GListRange<appdefined_privilege_x*>(m->appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ }
+ ASSERT_FALSE(priv_vec.empty());
+ const char* expected_name = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), expected_name);
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_ManyElements) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ for (appdefined_privilege_x* priv :
+ GListRange<appdefined_privilege_x*>(m->appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ }
+ ASSERT_EQ(priv_vec.size(), 2);
+ const char* first_priv = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), first_priv);
+ const char* second_priv = "http://package0id/appdefined/test.write";
+ ASSERT_CSTR_EQ(priv_vec[1].c_str(), second_priv);
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_WithLicenseValidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ std::vector<std::string> license_vec;
+ for (appdefined_privilege_x* priv :
+ GListRange<appdefined_privilege_x*>(m->appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ license_vec.push_back(priv->license);
+ }
+ ASSERT_FALSE(priv_vec.empty());
+ const char* expected_name = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), expected_name);
+ ASSERT_FALSE(license_vec.empty());
+ bf::path path(m->root_path);
+ path /= "res/cert";
+ ASSERT_CSTR_EQ(license_vec[0].c_str(), path.c_str());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_WithLicenseManyElements) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ std::vector<std::string> license_vec;
+ for (appdefined_privilege_x* priv :
+ GListRange<appdefined_privilege_x*>(m->appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ license_vec.push_back(priv->license);
+ }
+ ASSERT_EQ(priv_vec.size(), 2);
+ const char* first_priv = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), first_priv);
+ const char* second_priv = "http://package0id/appdefined/test.write";
+ ASSERT_CSTR_EQ(priv_vec[1].c_str(), second_priv);
+ ASSERT_EQ(license_vec.size(), 2);
+ bf::path path(m->root_path);
+ path /= "res/cert";
+ ASSERT_CSTR_EQ(license_vec[0].c_str(), path.c_str());
+ ASSERT_CSTR_EQ(license_vec[1].c_str(), path.c_str());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_InvalidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, AppDefinedPrivilegeElement_MissingName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_Invalid_NotURI) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_Invalid_NoPKGID) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_Invalid_OverLength) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_ValidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ m->provides_appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ }
+ ASSERT_FALSE(priv_vec.empty());
+ const char* expected_name = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), expected_name);
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_ManyElements) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ m->provides_appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ }
+ ASSERT_EQ(priv_vec.size(), 2);
+ const char* first_priv = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), first_priv);
+ const char* second_priv = "http://package0id/appdefined/test.write";
+ ASSERT_CSTR_EQ(priv_vec[1].c_str(), second_priv);
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_WithLicenseValidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ std::vector<std::string> license_vec;
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ m->provides_appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ license_vec.push_back(priv->license);
+ }
+ ASSERT_FALSE(priv_vec.empty());
+ const char* expected_name = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), expected_name);
+ ASSERT_FALSE(license_vec.empty());
+ bf::path path(m->root_path);
+ path /= "res/cert";
+ ASSERT_CSTR_EQ(license_vec[0].c_str(), path.c_str());
+}
+
+TEST_F(ManifestTest,
+ ProvidesAppDefinedPrivilegeElement_WithLicenseManyElements) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_TRUE(runner.Run());
+ manifest_x* m = runner.GetManifest();
+ ASSERT_NE(m, nullptr);
+ std::vector<std::string> priv_vec;
+ std::vector<std::string> license_vec;
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ m->provides_appdefined_privileges)) {
+ priv_vec.push_back(priv->value);
+ license_vec.push_back(priv->license);
+ }
+ ASSERT_EQ(priv_vec.size(), 2);
+ const char* first_priv = "http://package0id/appdefined/test.read";
+ ASSERT_CSTR_EQ(priv_vec[0].c_str(), first_priv);
+ const char* second_priv = "http://package0id/appdefined/test.write";
+ ASSERT_CSTR_EQ(priv_vec[1].c_str(), second_priv);
+ ASSERT_EQ(license_vec.size(), 2);
+ bf::path path(m->root_path);
+ path /= "res/cert";
+ ASSERT_CSTR_EQ(license_vec[0].c_str(), path.c_str());
+ ASSERT_CSTR_EQ(license_vec[1].c_str(), path.c_str());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_InvalidName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
+
+TEST_F(ManifestTest, ProvidesAppDefinedPrivilegeElement_MissingName) {
+ StepParseRunner runner(GetMyName());
+ ASSERT_FALSE(runner.Run());
+}
TEST_F(ManifestTest, AppControlElement_Valid) {
StepParseRunner runner(GetMyName());
#include <wgt_manifest_handlers/content_handler.h>
#include <wgt_manifest_handlers/ime_handler.h>
#include <wgt_manifest_handlers/metadata_handler.h>
+#include <wgt_manifest_handlers/provides_appdefined_privileges_handler.h>
#include <wgt_manifest_handlers/service_handler.h>
#include <wgt_manifest_handlers/setting_handler.h>
#include <wgt_manifest_handlers/tizen_application_handler.h>
return true;
}
+bool StepParse::FillAppDefinedPrivileges(manifest_x* manifest) {
+ auto priv_info =
+ GetManifestDataForKey<const wgt::parse::AppDefinedPrivilegeInfo>(
+ app_keys::kTizenAppDefinedPrivilegeKey);
+ if (!priv_info)
+ return true;
+
+ const auto& privileges = priv_info->GetAppDefinedPrivilegeList();
+ for (auto& priv : privileges) {
+ appdefined_privilege_x* privilege =
+ reinterpret_cast<appdefined_privilege_x*>(calloc(1,
+ sizeof(appdefined_privilege_x)));
+ if (privilege == nullptr) {
+ LOG(ERROR) << "Memory alloc failure";
+ return false;
+ }
+ privilege->value = strdup(priv.privilege.c_str());
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ if (!priv.license.empty()) {
+ if (bf::path(priv.license).is_absolute())
+ privilege->license = strdup(priv.license.c_str());
+ else
+ privilege->license = strdup((context_->root_application_path.get()
+ / manifest->package / priv.license).c_str());
+ }
+ manifest->appdefined_privileges =
+ g_list_append(manifest->appdefined_privileges, privilege);
+ }
+ return true;
+}
+
+bool StepParse::FillProvidesAppDefinedPrivileges(manifest_x* manifest) {
+ auto priv_info =
+ GetManifestDataForKey<const wgt::parse::AppDefinedPrivilegeInfo>(
+ app_keys::kTizenProvidesAppDefinedPrivilegesKey);
+ if (!priv_info)
+ return true;
+
+ const auto& privileges = priv_info->GetAppDefinedPrivilegeList();
+ for (auto& priv : privileges) {
+ appdefined_privilege_x* privilege =
+ reinterpret_cast<appdefined_privilege_x*>(calloc(1,
+ sizeof(appdefined_privilege_x)));
+ if (privilege == nullptr) {
+ LOG(ERROR) << "Memory alloc failure";
+ return false;
+ }
+ privilege->value = strdup(priv.privilege.c_str());
+ privilege->type = strdup(common_installer::kWebPrivilegeType);
+ if (!priv.license.empty()) {
+ if (bf::path(priv.license).is_absolute())
+ privilege->license = strdup(priv.license.c_str());
+ else
+ privilege->license = strdup((context_->root_application_path.get()
+ / manifest->package / priv.license).c_str());
+ }
+ manifest->provides_appdefined_privileges =
+ g_list_append(manifest->provides_appdefined_privileges, privilege);
+ }
+ return true;
+}
+
bool StepParse::FillCategories(manifest_x* manifest) {
auto category_info =
GetManifestDataForKey<const wgt::parse::CategoryInfoList>(
return false;
if (!FillPrivileges(manifest))
return false;
+ if (!FillAppDefinedPrivileges(manifest))
+ return false;
+ if (!FillProvidesAppDefinedPrivileges(manifest))
+ return false;
if (!FillAppControl(manifest))
return false;
if (!FillCategories(manifest))
return status;
}
GeneratePrivilege(writer);
+ GenerateProvidesAppDefinedPrivilege(writer);
GenerateAccount(writer);
GenerateIme(writer);
GenerateProfiles(writer);
xmlTextWriterWriteString(writer, BAD_CAST priv->value);
xmlTextWriterEndElement(writer);
}
+ if (context_->manifest_data.get()->appdefined_privileges) {
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ context_->manifest_data.get()->appdefined_privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+ BAD_CAST priv->license);
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
+ }
+ }
+ xmlTextWriterEndElement(writer);
+ }
+}
+void StepGenerateXml::GenerateProvidesAppDefinedPrivilege(
+ xmlTextWriterPtr writer) {
+ if (context_->manifest_data.get()->provides_appdefined_privileges) {
+ xmlTextWriterStartElement(writer, BAD_CAST "provides-appdefined-privileges");
+ for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+ context_->manifest_data.get()->provides_appdefined_privileges)) {
+ xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+ BAD_CAST priv->license);
+ xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+ BAD_CAST priv->type);
+ xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+ xmlTextWriterEndElement(writer);
+ }
xmlTextWriterEndElement(writer);
}
}