* @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_WebManager.h"
#include "FWebCtrl_Utility.h"
+#include "FWebCtrl_WebImpl.h"
using namespace Tizen::Base;
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;
{
+static const int EDIT_TEXT_SIZE = 30;
+
+
_CertificateConfirmPopup::_CertificateConfirmPopup(void)
+ : __certPopupMode(CERTIFICATE_POPUP_MODE_USER_CONFIRM)
+ , __confirm(false)
+ , __pCertificatePolicyData(null)
+ , __pParent(null)
+ , __pCertificatePopup(null)
+ , __reaction(false)
{
}
_CertificateConfirmPopup::~_CertificateConfirmPopup(void)
{
+ if (IsModalPopup() == true)
+ {
+ HandleUserAction(false);
+ }
+ if (__pCertificatePopup.get())
+ {
+ __pCertificatePopup.reset();
+ }
}
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));
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));
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->panelHeight;
- 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(_RESOURCE_DOMAIN_ID_OSP, "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->panelHeight;
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));
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);
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
{
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);
r = CreateAndAddButtons(idList, titleList, pButtonPanel);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
- pLayout->SetHorizontalFitPolicy(*pButtonPanel, FIT_POLICY_PARENT);
- pLayout->SetHorizontalAlignment(*pButtonPanel, LAYOUT_HORIZONTAL_ALIGN_CENTER);
-
- pLayout->SetSpacing(*pButtonPanel, 2*pPopupData->sideMargin);
+ SetPropagatedKeyEventListener(this);
return E_SUCCESS;
}
switch (actionId)
{
case ID_BUTTON_CERTIFICATE_ALLOW:
- ewk_certificate_policy_decision_allowed_set(__pCertificatePolicyData, EINA_TRUE);
- __confirm = static_cast< bool >(EINA_TRUE);
+ {
+ if (__reaction)
+ {
+ return;
+ }
+
+ HandleUserAction(true);
break;
+ }
case ID_BUTTON_CERTIFICATE_VIEW:
{
+ if (__reaction)
+ {
+ return;
+ }
+
+ __reaction = true;
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));
return;
}
case ID_BUTTON_CERTIFICATE_CANCEL:
- ewk_certificate_policy_decision_allowed_set(__pCertificatePolicyData, EINA_FALSE);
- __confirm = static_cast< bool >(EINA_FALSE);
+ {
+ if (__reaction)
+ {
+ return;
+ }
+
+ HandleUserAction(false);
break;
+ }
case ID_BUTTON_CERTIFICATE_CLOSE:
+ {
+ if (__reaction)
+ {
+ return;
+ }
+
break;
+ }
default:
SysAssert(false);
{
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();
+
+ if (__reaction)
+ {
+ __reaction = false;
+ }
+
+ 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
{
}
+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.");
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());
{
String fingerPrint;
StringUtil::Utf8ToString((const char*)pFingerPrint->GetPointer(), fingerPrint);
+ fingerPrint.SetLength(pFingerPrint->GetLimit());
certString.Append(fingerPrint + L"\n\n");
}