add patch
[framework/osp/web.git] / src / controls / FWebCtrl_CertificateConfirmPopup.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 60b6d3d..52d9ba9
  * @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 <FUiKeyEventInfo.h>
 #include <FUiLayout.h>
 #include <FUiVerticalBoxLayout.h>
+#include <FIo_DatabaseImpl.h>
+#include <FSys_SystemResource.h>
 #include <FUi_ControlManager.h>
 #include <FUi_ResourceManager.h>
 #include "FWebCtrl_CertificateConfirmPopup.h"
+#include "FWebCtrl_EflWebkit.h"
 #include "FWebCtrl_Utility.h"
+#include "FWebCtrl_WebImpl.h"
 
 
 using namespace Tizen::Base;
@@ -42,6 +50,7 @@ using namespace Tizen::Base::Utility;
 using namespace Tizen::Graphics;
 using namespace Tizen::Io;
 using namespace Tizen::Security::Cert;
+using namespace Tizen::System;
 using namespace Tizen::Ui;
 using namespace Tizen::Ui::Controls;
 
@@ -50,22 +59,37 @@ namespace Tizen { namespace Web { namespace Controls
 {
 
 
+static const int EDIT_TEXT_SIZE = 30;
+
+
 _CertificateConfirmPopup::_CertificateConfirmPopup(void)
+                                               : __certPopupMode(CERTIFICATE_POPUP_MODE_USER_CONFIRM)
+                                               , __confirm(false)
+                                               , __pCertificatePolicyData(null)
+                                               , __pParent(null)
+                                               , __pCertificatePopup(null)
 {
 }
 
 
 _CertificateConfirmPopup::~_CertificateConfirmPopup(void)
 {
+       if (IsModalPopup() == true)
+       {
+               HandleUserAction(false);
+       }
 }
 
 
 result
-_CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Certificate_Policy_Decision* pPolicy)
+_CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Certificate_Policy_Decision* pPolicy, Tizen::Web::Controls::_CertificateConfirmPopup* pParent)
 {
        SysTryReturnResult(NID_WEB_CTRL, pPolicy, E_INVALID_ARG, "Certificate Policy pointer is null.");
        result r = E_SUCCESS;
 
+       _SystemResource* pSysResource = _SystemResource::GetInstance();
+       SysAssertf(pSysResource != null, "Failed to get _SystemResource instance");
+
        _WebPopupData* pPopupData = _WebPopup::GetPopupData();
        SysTryReturn(NID_WEB_CTRL, pPopupData, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -75,6 +99,8 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
        int popupMaxHeight = 0;
        Rectangle rect(0, 0, 0, 0);
 
+       __pParent = pParent;
+
        ArrayList idList;
        r = idList.Construct();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
@@ -85,30 +111,30 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
 
        if( __certPopupMode == CERTIFICATE_POPUP_MODE_VIEW )
        {
-               titleText = L"Certificate";
-               popupMaxHeight = pPopupData->popupDim.height;
+               titleText = pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_HEADER_SECURITY_CERTIFICATE_ABB");
+               popupMaxHeight = 4*pPopupData->labelDim.height + pPopupData->btnDim.height + 2*pPopupData->sideMargin;
 
-               rect.height = pPopupData->popupDim.height - 4*pPopupData->sideMargin - 2*pPopupData->btnDim.height;
+               rect.height = 4*pPopupData->labelDim.height;
                rect.width = pPopupData->labelDim.width;
 
                idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_CLOSE)));
-               titleList.Add(*(new String(L"Close")));
+               titleList.Add(*(new String(pSysResource->GetString("sys_string", "IDS_TPLATFORM_BUTTON_OK"))));
        }
        else    // CERTIFICATE_POPUP_MODE_CONFIRM
        {
-               titleText = L"Security Warning";
-               popupMaxHeight = 2*pPopupData->labelDim.height + 2*pPopupData->btnDim.height + 6*pPopupData->sideMargin;
+               titleText = pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_HEADER_SECURITY_WARNING_ABB");
+               popupMaxHeight = 2*pPopupData->labelDim.height + pPopupData->btnDim.height + 2*pPopupData->sideMargin;
 
                rect.height = 2*pPopupData->labelDim.height;
                rect.width = pPopupData->labelDim.width;
 
-               idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_ALLOW)));
-               idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_VIEW)));
                idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_CANCEL)));
+               idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_VIEW)));
+               idList.Add(*(new Integer(ID_BUTTON_CERTIFICATE_ALLOW)));
 
-               titleList.Add(*(new String(L"Allow")));
-               titleList.Add(*(new String(L"View")));
-               titleList.Add(*(new String(L"Cancel")));
+               titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CANCEL_ABB"))));
+               titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON2_VIEW_CERTIFICATE"))));
+               titleList.Add(*(new String(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BUTTON_CONTINUE_ABB"))));
        }
 
        r = _WebPopup::Construct(true, Dimension(pPopupData->popupDim.width, popupMaxHeight));
@@ -131,7 +157,7 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
                r = pTextBox->Construct(rect, TEXT_BOX_BORDER_ROUNDED);
                SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-               r = pTextBox->SetTextSize(30);
+               r = pTextBox->SetTextSize(EDIT_TEXT_SIZE);
                SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
                r = pTextBox->SetAutoLinkMask(LINK_TYPE_NONE);
@@ -144,7 +170,7 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
                SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
                TextBox* pCertBox = pTextBox.release();
-               pLayout->SetHorizontalFitPolicy(*pCertBox, FIT_POLICY_PARENT);
+               pLayout->SetHorizontalAlignment(*pCertBox, LAYOUT_HORIZONTAL_ALIGN_CENTER);
        }
        else    // CERTIFICATE_POPUP_MODE_CONFIRM
        {
@@ -152,7 +178,8 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
                SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
 
                String message = L"";
-               message = L"There are problems with the security certificate of this site.\n";
+               message = pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_THERE_ARE_PROBLEMS_WITH_THE_SECURITY_CERTIFICATE_FOR_THIS_SITE_C");
+               message.Append(L"\n");
                message.Append(ewk_certificate_policy_decision_url_get(__pCertificatePolicyData));
 
                r = pLabel->Construct(rect, message);
@@ -177,6 +204,8 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer
 
        pLayout->SetSpacing(*pButtonPanel, 2*pPopupData->sideMargin);
 
+       SetPropagatedKeyEventListener(this);
+
        return E_SUCCESS;
 }
 
@@ -189,8 +218,7 @@ _CertificateConfirmPopup::OnActionPerformed(const Control& source, int actionId)
        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:
@@ -198,19 +226,19 @@ _CertificateConfirmPopup::OnActionPerformed(const Control& source, int actionId)
                std::unique_ptr<_CertificateConfirmPopup> pCertificatePopup(new (std::nothrow) _CertificateConfirmPopup());
                SysTryReturnVoidResult(NID_WEB_CTRL, pCertificatePopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
 
-               r = pCertificatePopup->Construct(CERTIFICATE_POPUP_MODE_VIEW, __pCertificatePolicyData);
+               r = pCertificatePopup->Construct(CERTIFICATE_POPUP_MODE_VIEW, __pCertificatePolicyData, this);
                SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
 
-               r = pCertificatePopup->ShowPopup();
-               SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+               __pCertificatePopup = std::move(pCertificatePopup);
 
-               pCertificatePopup.release();
+               r = __pCertificatePopup->ShowPopup();
+               SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+               __pCertificatePopup.release();
                return;
        }
 
        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:
@@ -226,13 +254,76 @@ _CertificateConfirmPopup::OnActionPerformed(const Control& source, int actionId)
        {
                SysLogException(NID_WEB_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
        }
-       if (__certPopupMode == CERTIFICATE_POPUP_MODE_VIEW )
+       if (__certPopupMode == CERTIFICATE_POPUP_MODE_VIEW)
        {
-               delete this;
+               __pParent->SendUserEvent(ID_CERTIFICATE_CONFIRM_POPUP_CLOSE, null);
        }
 }
 
 
+void
+_CertificateConfirmPopup::OnUserEventReceivedN(RequestId requestId, IList* pArgs)
+{
+       switch (requestId)
+       {
+       case ID_CERTIFICATE_CONFIRM_POPUP_CLOSE:
+               __pCertificatePopup.reset();
+               break;
+       default:
+               break;
+       }
+
+}
+
+
+bool
+_CertificateConfirmPopup::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+_CertificateConfirmPopup::OnKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       result r = E_SUCCESS;
+       if ((keyEventInfo.GetKeyCode() == KEY_ESC || keyEventInfo.GetKeyCode() == KEY_BACK) && source.GetShowState() == true)
+       {
+               if (__certPopupMode == CERTIFICATE_POPUP_MODE_USER_CONFIRM)
+               {
+                       HandleUserAction(false);
+               }
+               r = HidePopup();
+               if (IsFailed(r))
+               {
+                       SysLogException(NID_WEB_CTRL, r, "[%s] Propagating.", GetErrorMessage(r));
+               }
+               if (__certPopupMode == CERTIFICATE_POPUP_MODE_VIEW)
+               {
+                       __pParent->SendUserEvent(ID_CERTIFICATE_CONFIRM_POPUP_CLOSE, null);
+               }
+       }
+
+       return false;
+}
+
+bool
+_CertificateConfirmPopup::OnPreviewKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+_CertificateConfirmPopup::OnPreviewKeyReleased(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
+bool
+_CertificateConfirmPopup::TranslateKeyEventInfo(Control& source, KeyEventInfo& keyEventInfo)
+{
+       return false;
+}
+
 bool
 _CertificateConfirmPopup::GetConfirmResult() const
 {
@@ -240,11 +331,51 @@ _CertificateConfirmPopup::GetConfirmResult() const
 }
 
 
+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)
 {
        SysTryReturnResult(NID_WEB_CTRL, __pCertificatePolicyData, E_INVALID_ARG, "Certificate Policy pointer is null.");
 
+       _SystemResource* pSysResource = _SystemResource::GetInstance();
+       SysAssertf(pSysResource != null, "Failed to get _SystemResource instance");
+
        String pemString(ewk_certificate_policy_decision_certificate_pem_get(__pCertificatePolicyData));
        std::unique_ptr<ByteBuffer> pByteBuf(StringUtil::StringToUtf8N(pemString));
        SysTryReturnResult(NID_WEB_CTRL, pByteBuf.get(), E_INVALID_DATA, "Certificate pem information is Empty.");
@@ -254,45 +385,59 @@ _CertificateConfirmPopup::GenerateCertifiate(String& certString)
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        //Issued to
-       certString.Append(L"ISSUED TO:\n\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ISSUED_TO_C"));
+       certString.Append(L"\n\n");
        String subject = certificate.GetSubject();
 
-       certString.Append(L"Common Name:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_COMMON_NAME_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(subject, L"/CN=") + L"\n");
 
-       certString.Append(L"Organization:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ORGANISATION_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(subject, L"/O=") + L"\n");
 
-       certString.Append(L"Organizational Unit:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP ,"IDS_TPLATFORM_BODY_ORGANISATIONAL_UNIT_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(subject, L"/OU=") + L"\n");
 
-       certString.Append(L"Serial Number:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_SERIAL_NUMBER_C"));
+       certString.Append(L":\n");
        certString.Append(certificate.GetSerialNumber() + L"\n\n\n");
 
        //Issued by
-       certString.Append(L"ISSUER:\n\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ISSUED_BY_C"));
+       certString.Append(L"\n\n");
        String issuer = certificate.GetIssuer();
 
-       certString.Append(L"Common Name:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_COMMON_NAME_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(issuer, L"/CN=") + L"\n");
 
-       certString.Append(L"Organization:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ORGANISATION_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(issuer, L"/O=") + L"\n");
 
-       certString.Append(L"Organizational Unit:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_ORGANISATIONAL_UNIT_C"));
+       certString.Append(L"\n");
        certString.Append(GetStringOfToken(issuer, L"/OU=") + L"\n\n");
 
        //Validity
-       certString.Append(L"VALIDITY:\n\n");
-       certString.Append(L"Valid From:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_VALIDITY_C"));
+       certString.Append(L"\n\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_POP_CERTI_VALID_FROM_C"));
+       certString.Append(L"\n");
        certString.Append(certificate.GetNotBefore() + L"\n\n");
 
-       certString.Append(L"Valid Till:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_CERTIFICATE_VALID_TILL"));
+       certString.Append(L":\n");
        certString.Append(certificate.GetNotAfter() + L"\n\n\n");
 
        //FingerPrints
-       certString.Append(L"FINGERPRINTS:\n\n");
-       certString.Append(L"Signature Algorithm:\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_FINGERPRINTS_C"));
+       certString.Append(L":\n\n");
+       certString.Append(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_SIGNATURE_ALGORITHM_VODA"));
+       certString.Append(L":\n");
        certString.Append(certificate.GetSignatureAlgorithm() + L"\n\n");
 
        std::unique_ptr<ByteBuffer> pFingerPrint(certificate.GetFingerprintN());