+void
+_DataControlManager::Cache(String& appId)
+{
+ __pProviderList->Add(new (std::nothrow) String(appId));
+}
+
+bool
+_DataControlManager::IsCached(String& appId)
+{
+ unique_ptr< IEnumerator > pEnum(__pProviderList->GetEnumeratorN());
+ while (pEnum->MoveNext() == E_SUCCESS)
+ {
+ String* pCachedAppId = dynamic_cast< String* >(pEnum->GetCurrent());
+ if (pCachedAppId != null && pCachedAppId->Equals(appId) == true)
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+result
+_DataControlManager::AllowAccess(String& appId)
+{
+ if (IsCached(appId) == false)
+ {
+ unique_ptr< char[] > pPkgId(_StringConverter::CopyToCharArrayN(appId));
+ SysTryReturnResult(NID_APP, pPkgId != null, E_SYSTEM, "The method cannot proceed due to a severe system error.");
+ pPkgId.get()[10] = '\0';
+
+ int ret = security_server_app_give_access(pPkgId.get(), -1);
+ SysTryReturnResult(NID_APP, ret == 0, E_SYSTEM,
+ "Failed to call security_server_app_give_access(), provider: %s, ret: %d", pPkgId.get(), ret);
+
+ Cache(appId);
+ }
+
+ SysLog(NID_APP, "[DC_CALLER_SEND] Allow %ls to access", appId.GetPointer());
+ return E_SUCCESS;
+}
+