X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontrols%2FFWebCtrl_CertificateConfirmPopup.cpp;h=52d9ba98aa25f26c0611edc875ddad3d1f18b186;hb=86daf9e9f4a4ec7fffd9b80556243f16ff1239ee;hp=a6b1e4b1a1df2e7b802349c7bc6f166f2d14a370;hpb=f68fffc9edca4e2574b85ccb1d1a85dc4864eb75;p=framework%2Fosp%2Fweb.git diff --git a/src/controls/FWebCtrl_CertificateConfirmPopup.cpp b/src/controls/FWebCtrl_CertificateConfirmPopup.cpp index a6b1e4b..52d9ba9 100755 --- a/src/controls/FWebCtrl_CertificateConfirmPopup.cpp +++ b/src/controls/FWebCtrl_CertificateConfirmPopup.cpp @@ -19,21 +19,29 @@ * @file FWebCtrl_CertificateConfirmPopup.cpp * @brief The file contains the definition of _CertificateConfirmPopup class. */ +#include #include #include #include #include #include +#include +#include #include #include #include #include +#include #include #include +#include +#include #include #include #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,25 +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)); @@ -78,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)); @@ -88,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)); @@ -134,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); @@ -155,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); @@ -180,6 +204,8 @@ _CertificateConfirmPopup::Construct(_CertificatePopupMode certPopupMode, Ewk_Cer pLayout->SetSpacing(*pButtonPanel, 2*pPopupData->sideMargin); + SetPropagatedKeyEventListener(this); + return E_SUCCESS; } @@ -192,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: @@ -201,21 +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)); - pCertificatePopup->SetOwner(this); - - 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: @@ -231,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 { @@ -245,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 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 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 pByteBuf(StringUtil::StringToUtf8N(pemString)); SysTryReturnResult(NID_WEB_CTRL, pByteBuf.get(), E_INVALID_DATA, "Certificate pem information is Empty."); @@ -259,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 pFingerPrint(certificate.GetFingerprintN());