* @file FWebCtrl_CertificateConfirmPopup.cpp
* @brief The file contains the definition of _CertificateConfirmPopup class.
*/
+#include <FAppApp.h>
#include <FBaseColArrayList.h>
#include <FBaseSysLog.h>
#include <FBaseUtilUri.h>
#include <FGrpDimension.h>
#include <FGrpRectangle.h>
+#include <FIoDbEnumerator.h>
+#include <FIoDbStatement.h>
#include <FSecCertX509Certificate.h>
#include <FUiCtrlButton.h>
#include <FUiCtrlLabel.h>
#include <FUiCtrlPanel.h>
#include <FUiLayout.h>
#include <FUiVerticalBoxLayout.h>
+#include <FIo_DatabaseImpl.h>
#include <FUi_ControlManager.h>
#include <FUi_ResourceManager.h>
#include "FWebCtrl_CertificateConfirmPopup.h"
+#include "FWebCtrl_EflWebkit.h"
#include "FWebCtrl_Utility.h"
switch (actionId)
{
case ID_BUTTON_CERTIFICATE_ALLOW:
- ewk_certificate_policy_decision_allowed_set(__pCertificatePolicyData, EINA_TRUE);
- __confirm = static_cast< bool >(EINA_TRUE);
+ HandleUserAction(true);
break;
case ID_BUTTON_CERTIFICATE_VIEW:
}
case ID_BUTTON_CERTIFICATE_CANCEL:
- ewk_certificate_policy_decision_allowed_set(__pCertificatePolicyData, EINA_FALSE);
- __confirm = static_cast< bool >(EINA_FALSE);
+ HandleUserAction(false);
break;
case ID_BUTTON_CERTIFICATE_CLOSE:
}
+void
+_CertificateConfirmPopup::HandleUserAction(bool allow)
+{
+ __confirm = allow;
+
+ String pem(ewk_certificate_policy_decision_certificate_pem_get(__pCertificatePolicyData));
+ ewk_certificate_policy_decision_allowed_set(__pCertificatePolicyData, static_cast< Eina_Bool >(allow));
+ AddCertificateDb(pem, allow);
+}
+
+
+void
+_CertificateConfirmPopup::AddCertificateDb(const String& pem, bool allow)
+{
+ _DatabaseImpl db;
+ String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+ String table(CERTIFICATE_TABLE_NAME);
+
+ result r = db.Construct(certificatePath, "r+", null);
+ SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbStatement> pStmt(db.CreateStatementN(L"Insert Into " + table + L" (pem, allow) Values (?, ?)"));
+ SysTryReturnVoidResult(NID_WEB_CTRL, pStmt.get(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ SysLog(NID_WEB_CTRL, "The current value of pem is %ls, allow is %d", pem.GetPointer(), allow);
+
+ pStmt->BindString(0, pem);
+ pStmt->BindInt(1, static_cast < int >(allow));
+
+ db.BeginTransaction();
+
+ std::unique_ptr<DbEnumerator> pEnum(db.ExecuteStatementN(*pStmt));
+
+ db.CommitTransaction();
+}
+
result
_CertificateConfirmPopup::GenerateCertifiate(String& certString)
{
result Construct(_CertificatePopupMode certPopupMode, Ewk_Certificate_Policy_Decision* pPolicy);
- virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+ void HandleUserAction(bool allow);
bool GetConfirmResult() const;
+ void AddCertificateDb(const Tizen::Base::String& pem, bool allow);
+
+ virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
private:
_CertificateConfirmPopup(const _CertificateConfirmPopup&);
extern const wchar_t GEOLOCATION_TABLE_NAME[] = L"geolocationPermission";
extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[] = L"customProtocol";
extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[] = L"customContent";
+extern const wchar_t CERTIFICATE_TABLE_NAME[] = L"certificate";
-static const int CUSTOM_DB_TABLE_COUNT= 3;
+static const int CUSTOM_DB_TABLE_COUNT= 4;
_EflWebkit::_EflWebkit(void)
String geolocationTable(GEOLOCATION_TABLE_NAME);
String protocolTable(CUSTOM_PROTOCOL_TABLE_NAME);
String contentTable(CUSTOM_CONTENT_TABLE_NAME);
+ String certificateTable(CERTIFICATE_TABLE_NAME);
r = db.Construct(path, "a+", null);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
- std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select count(name) from sqlite_master Where type='table' And name in ('" + geolocationTable + L"', '" + protocolTable + L"', '" + contentTable + L"')"));
+ std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select count(name) from sqlite_master Where type='table' And name in ('" + geolocationTable + L"', '" + protocolTable + L"', '" + contentTable + L"', '" + certificateTable + L"')"));
if (pEnum.get())
{
int count = 0;
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
}
+ pEnum.reset();
+ pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + certificateTable + L"'"));
+ if (!pEnum.get())
+ {
+ r = db.ExecuteSql(
+ L"CREATE TABLE IF NOT EXISTS " + certificateTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, pem TEXT, allow INTEGER)",
+ true);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
return E_SUCCESS;
}
_OSP_EXPORT_ extern const wchar_t GEOLOCATION_TABLE_NAME[];
_OSP_EXPORT_ extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[];
_OSP_EXPORT_ extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[];
+_OSP_EXPORT_ extern const wchar_t CERTIFICATE_TABLE_NAME[];
class _EflWebkit
: public Tizen::Base::Object
result r = E_SUCCESS;
- r = pImpl->ShowCertificateConfirmPopup(CERTIFICATE_POPUP_MODE_USER_CONFIRM, pPolicy);
+ std::unique_ptr<DbEnumerator> pEnum;
+
+ String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+ String table(CERTIFICATE_TABLE_NAME);
+ _DatabaseImpl db;
+
+ String pem(ewk_certificate_policy_decision_certificate_pem_get(pPolicy));
+
+ r = db.Construct(certificatePath, "r", null);
SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select allow From " + table + L" Where pem = '" + pem + L"'"));
+ if (pEnum.get())
+ {
+ r = pEnum->MoveNext();
+ SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ int allow = 0;
+ r = pEnum->GetIntAt(0, allow);
+ SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ SysLog(NID_WEB_CTRL, "The current value of allow is %d", allow);
+
+ ewk_certificate_policy_decision_allowed_set(pPolicy, static_cast < Eina_Bool >(allow));
+ pImpl->SetCertificateConfirmed(static_cast < bool >(allow));
+ }
+ else
+ {
+ r = pImpl->ShowCertificateConfirmPopup(CERTIFICATE_POPUP_MODE_USER_CONFIRM, pPolicy);
+ SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+
pImpl->SetCertificateRequested(true);
break;
}
case WEB_CERTIFICATE_ERROR_HANDLING_MODE_CANCEL:
-CATCH:
ewk_certificate_policy_decision_allowed_set(pPolicy, EINA_FALSE);
break;
case WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE :
default:
SysAssert(false);
}
+
+ return;
+
+CATCH:
+ ewk_certificate_policy_decision_allowed_set(pPolicy, EINA_FALSE);
+ pImpl->SetCertificateConfirmed(false);
+ pImpl->SetCertificateRequested(true);
}
_WebImpl::~_WebImpl()
{
RemoveEventListenerCallback();
+ ClearCertificateDb();
}
+
_WebImpl*
_WebImpl::CreateWebImplN(Web* pControl, const Rectangle& bounds)
{
}
+void
+_WebImpl::ClearCertificateDb(void)
+{
+ result r = E_SUCCESS;
+
+ String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+ String table(CERTIFICATE_TABLE_NAME);
+ _DatabaseImpl db;
+
+ r = db.Construct(certificatePath, "r+", null);
+ SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ db.BeginTransaction();
+
+ r = db.ExecuteSql(L"Delete From " + table, true);
+ SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+ db.CommitTransaction();
+
+ return;
+
+CATCH:
+ db.RollbackTransaction();
+}
+
+
result
_WebImpl::SetBlockSelectionPosition(const Point& startPoint)
{
}
+void
+_WebImpl::SetCertificateConfirmed(bool arg)
+{
+ __isCertificateConfirmed = arg;
+}
+
+
bool
_WebImpl::IsCertificateConfirmed(void) const
{
void SetCertificateRequested(bool arg);
bool IsCertificateRequested(void) const;
+ void SetCertificateConfirmed(bool arg);
bool IsCertificateConfirmed(void) const;
+ void ClearCertificateDb(void);
void SetOrientationChanged(bool arg);
bool IsOrientationChanged(void) const;