Tizen 2.2.1
[framework/osp/web.git] / src / controls / FWebCtrl_WebManager.cpp
index bb1a0eb..137a022 100755 (executable)
 #include <FBaseSysLog.h>\r
 #include <FIoDbEnumerator.h>\r
 #include <FUiControl.h>\r
-#include <FIo_DirectoryImpl.h>\r
-#include <FIo_DatabaseImpl.h>\r
+#include <FIo_DirectoryImpl.h>
+#include <FIo_DatabaseImpl.h>
 #include <FIo_FileImpl.h>\r
 #include <FUiCtrl_FormImpl.h>\r
-#include <FIo_DirectoryImpl.h>\r
-#include <FIo_DatabaseImpl.h>\r
-#include <FIo_FileImpl.h>\r
+#include <FIo_DirectoryImpl.h>
+#include <FIo_DatabaseImpl.h>
+#include <FIo_FileImpl.h>
 #include "FWebCtrl_EflWebkit.h"\r
 #include "FWebCtrl_Web.h"\r
 #include "FWebCtrl_WebImpl.h"\r
@@ -53,22 +53,22 @@ namespace Tizen { namespace Web { namespace Controls
 _WebManager* _WebManager::__pInstance = null;\r
 \r
 \r
-extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[] = L"data/.webkit/customDatabase/";\r
-extern const wchar_t USER_CONFIRM_DB_NAME[] = L"userConfirm.db";\r
-extern const wchar_t GEOLOCATION_TABLE_NAME[] = L"geolocationPermission";\r
-extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[] = L"customProtocol";\r
-extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[] = L"customContent";\r
-extern const wchar_t CERTIFICATE_TABLE_NAME[] = L"certificate";\r
-\r
-\r
+extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[] = L"data/.webkit/customDatabase/";
+extern const wchar_t USER_CONFIRM_DB_NAME[] = L"userConfirm.db";
+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= 4;\r
 \r
 \r
 _WebManager::_WebManager(void)\r
        : __pWebList(null)\r
        , __pCallbackList(null)\r
-       , __pActivePopupList(null)\r
        , __pActiveWeb(null)\r
+       , __pActivePopup(null)\r
        , __pProxy(null)\r
 {\r
 }\r
@@ -138,11 +138,6 @@ _WebManager::Construct(void)
        r = pCallbackList->Construct();\r
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
 \r
-       std::unique_ptr<ArrayListT< int> > pActivePopupList(new (std::nothrow) ArrayListT< int >());\r
-       SysTryReturnResult(NID_WEB_CTRL, pActivePopupList.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");\r
-       r = pActivePopupList->Construct();\r
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
        r = InitializeProxyAddress();\r
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
 \r
@@ -154,35 +149,34 @@ _WebManager::Construct(void)
 \r
        __pWebList = std::move(pWebList);\r
        __pCallbackList = std::move(pCallbackList);\r
-       __pActivePopupList = std::move(pActivePopupList);\r
 \r
        return E_SUCCESS;\r
 }\r
 \r
 \r
-void\r
+void
 _WebManager::ClearCertificateDb(void)\r
-{\r
-       result r = E_SUCCESS;\r
-\r
-       String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);\r
-       String table(CERTIFICATE_TABLE_NAME);\r
-       _DatabaseImpl db;\r
-\r
-       r = db.Construct(certificatePath, "r+", null);\r
-       SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-       db.BeginTransaction();\r
-\r
-       r = db.ExecuteSql(L"Delete From " + table, true);\r
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-       db.CommitTransaction();\r
-\r
-       return;\r
-\r
-CATCH:\r
-       db.RollbackTransaction();\r
+{
+       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);
+       SysTryReturnVoidResult(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();
 }\r
 \r
 \r
@@ -193,15 +187,15 @@ _WebManager::InitializeProxyAddress(void)
        connection_h handle = null;\r
        char* pProxy = null;\r
 \r
-       ret = connection_create(&handle);\r
-       SysTryReturnResult(NID_WEB_CTRL, ret == CONNECTION_ERROR_NONE, E_SYSTEM, "A system error has been occurred. Failed to create connection.");\r
-\r
-       connection_address_family_e family = CONNECTION_ADDRESS_FAMILY_IPV4;\r
+       ret = connection_create(&handle);
+       SysTryReturnResult(NID_WEB_CTRL, ret == CONNECTION_ERROR_NONE, E_SYSTEM, "A system error has been occurred. Failed to create connection.");
 \r
-       ret = connection_get_proxy(handle, family, &pProxy);\r
+       connection_address_family_e family = CONNECTION_ADDRESS_FAMILY_IPV4;
+
+       ret = connection_get_proxy(handle, family, &pProxy);
        SysTryReturnResult(NID_WEB_CTRL, ret == CONNECTION_ERROR_NONE, E_SYSTEM, "A system error has been occurred. Failed to get proxy address.");\r
 \r
-       ret = connection_destroy(handle);\r
+       ret = connection_destroy(handle);
        SysTryReturnResult(NID_WEB_CTRL, ret == CONNECTION_ERROR_NONE, E_SYSTEM, "A system error has been occurred. Failed to destroy connection.");\r
 \r
        __pProxy = pProxy;\r
@@ -210,97 +204,97 @@ _WebManager::InitializeProxyAddress(void)
 }\r
 \r
 \r
-result\r
+result
 _WebManager::CreateResourceDirectory(void) const\r
-{\r
-       String html5FeaturesPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH);\r
-\r
-       if (!_FileImpl::IsFileExist(html5FeaturesPath))\r
-       {\r
-               result r = E_SUCCESS;\r
-\r
-               r = _DirectoryImpl::Create(html5FeaturesPath, true);\r
-               SysTryReturnResult(NID_WEB_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has been occurred. create html5 features directory.");\r
-       }\r
-\r
-       return E_SUCCESS;\r
-}\r
-\r
-\r
-result\r
+{
+       String html5FeaturesPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH);
+
+       if (!_FileImpl::IsFileExist(html5FeaturesPath))
+       {
+               result r = E_SUCCESS;
+
+               r = _DirectoryImpl::Create(html5FeaturesPath, true);
+               SysTryReturnResult(NID_WEB_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has been occurred. create html5 features directory.");
+       }
+
+       return E_SUCCESS;
+}
+
+
+result
 _WebManager::InitializeCustomDb(void) const\r
-{\r
-       result r = E_SUCCESS;\r
-\r
-       _DatabaseImpl db;\r
-       String path(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);\r
-       String geolocationTable(GEOLOCATION_TABLE_NAME);\r
-       String protocolTable(CUSTOM_PROTOCOL_TABLE_NAME);\r
-       String contentTable(CUSTOM_CONTENT_TABLE_NAME);\r
-       String certificateTable(CERTIFICATE_TABLE_NAME);\r
-\r
-       r = db.Construct(path, "a+", null);\r
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\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"', '" + certificateTable + L"')"));\r
-       if (pEnum.get())\r
-       {\r
-               int count = 0;\r
-\r
-               r = pEnum->MoveNext();\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-               r = pEnum->GetIntAt(0, count);\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-               if (count == CUSTOM_DB_TABLE_COUNT)\r
-               {\r
-                       return E_SUCCESS;\r
-               }\r
-       }\r
-\r
-       pEnum.reset();\r
-       pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + geolocationTable + L"'"));\r
-       if (!pEnum.get())\r
-       {\r
-               r = db.ExecuteSql(\r
-                       L"CREATE TABLE IF NOT EXISTS " + geolocationTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT, permission INTEGER)",\r
-                       true);\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-       }\r
-\r
-       pEnum.reset();\r
-       pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + protocolTable + L"'"));\r
-       if (!pEnum.get())\r
-       {\r
-               r = db.ExecuteSql(\r
-                       L"CREATE TABLE IF NOT EXISTS " + protocolTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)",\r
-                       true);\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-       }\r
-\r
-       pEnum.reset();\r
-       pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + contentTable + L"'"));\r
-       if (!pEnum.get())\r
-       {\r
-               r = db.ExecuteSql(\r
-                       L"CREATE TABLE IF NOT EXISTS " + contentTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)",\r
-                       true);\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-       }\r
-\r
-       pEnum.reset();\r
-       pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + certificateTable + L"'"));\r
-       if (!pEnum.get())\r
-       {\r
-               r = db.ExecuteSql(\r
-                       L"CREATE TABLE IF NOT EXISTS " + certificateTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, pem TEXT, allow INTEGER)",\r
-                       true);\r
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-       }\r
-\r
-       return E_SUCCESS;\r
-}\r
+{
+       result r = E_SUCCESS;
+
+       _DatabaseImpl db;
+       String path(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+       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"', '" + certificateTable + L"')"));
+       if (pEnum.get())
+       {
+               int count = 0;
+
+               r = pEnum->MoveNext();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               r = pEnum->GetIntAt(0, count);
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               if (count == CUSTOM_DB_TABLE_COUNT)
+               {
+                       return E_SUCCESS;
+               }
+       }
+
+       pEnum.reset();
+       pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + geolocationTable + L"'"));
+       if (!pEnum.get())
+       {
+               r = db.ExecuteSql(
+                       L"CREATE TABLE IF NOT EXISTS " + geolocationTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT, permission INTEGER)",
+                       true);
+               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 = '" + protocolTable + L"'"));
+       if (!pEnum.get())
+       {
+               r = db.ExecuteSql(
+                       L"CREATE TABLE IF NOT EXISTS " + protocolTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)",
+                       true);
+               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 = '" + contentTable + L"'"));
+       if (!pEnum.get())
+       {
+               r = db.ExecuteSql(
+                       L"CREATE TABLE IF NOT EXISTS " + contentTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)",
+                       true);
+               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;
+}
 \r
 \r
 result\r
@@ -394,30 +388,23 @@ _WebManager::SetActiveWeb(Tizen::Web::Controls::_WebImpl* pWebAddress)
                __pActiveWeb = pWebAddress;\r
        }\r
 \r
-       for (int i = 0; i < __pActivePopupList->GetCount(); i++)\r
+       if (__pActivePopup != null)\r
        {\r
-               int activePopupAddr = 0;\r
-               __pActivePopupList->GetAt(i, activePopupAddr);\r
-               _WebPopup* pActivePopup = reinterpret_cast< _WebPopup* >(activePopupAddr);\r
-\r
-               if (pActivePopup != null)\r
-               {\r
-                       pActivePopup->SetShowState(false);\r
+               __pActivePopup->SetShowState(false);\r
 \r
-                       _FormImpl* pFormImpl = __pActiveWeb->GetParentFormImpl(__pActiveWeb);\r
+               _FormImpl* pFormImpl = __pActiveWeb->GetParentFormImpl(__pActiveWeb);\r
 \r
-                       if (pFormImpl != null)\r
-                       {\r
-                               pActivePopup->SetOwner(&pFormImpl->GetPublic());\r
-                       }\r
-                       else\r
-                       {\r
-                               pActivePopup->SetOwner(&__pActiveWeb->GetPublic());\r
-                       }\r
-\r
-                       pActivePopup->SetShowState(true);\r
-                       pActivePopup->Show();\r
+               if (pFormImpl != null)\r
+               {\r
+                       __pActivePopup->SetOwner(&pFormImpl->GetPublic());\r
                }\r
+               else\r
+               {\r
+                       __pActivePopup->SetOwner(&__pActiveWeb->GetPublic());\r
+               }\r
+\r
+               __pActivePopup->SetShowState(true);\r
+               __pActivePopup->Show();\r
        }\r
 }\r
 \r
@@ -432,27 +419,20 @@ _WebManager::RemoveActiveWeb(Tizen::Web::Controls::_WebImpl* pWebAddress)
 }\r
 \r
 \r
-result\r
-_WebManager::SetActivePopup(int popupAddress)\r
+void\r
+_WebManager::SetActivePopup(Tizen::Web::Controls::_WebPopup* pPopupAddress)\r
 {\r
-       result r = E_SUCCESS;\r
-\r
-       r = __pActivePopupList->Add(popupAddress);\r
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-       return r;\r
+       __pActivePopup = pPopupAddress;\r
 }\r
 \r
 \r
-result\r
-_WebManager::RemoveActivePopup(int popupAddress)\r
+void\r
+_WebManager::RemoveActivePopup(Tizen::Web::Controls::_WebPopup* pPopupAddress)\r
 {\r
-       result r = E_SUCCESS;\r
-\r
-       r = __pActivePopupList->Remove(popupAddress);\r
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
-\r
-       return r;\r
+       if (__pActivePopup == pPopupAddress)\r
+       {\r
+               __pActivePopup = null;\r
+       }\r
 }\r
 \r
 \r