+int
+_WebImpl::SearchHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime)
+{
+ int checkReturn = 0;
+ _DatabaseImpl db;
+ String handlerPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+
+ String table;
+ if( checkmime == true)
+ {
+ table = CUSTOM_CONTENT_TABLE_NAME;
+ }
+ else
+ {
+ table = CUSTOM_PROTOCOL_TABLE_NAME;
+ }
+
+ String baseUri(ewk_custom_handlers_data_base_url_get(pHandlerData));
+ String uri(ewk_custom_handlers_data_url_get(pHandlerData));
+ String target(ewk_custom_handlers_data_target_get(pHandlerData));
+
+ SysSecureLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer());
+
+ result r = db.Construct(handlerPath, "r+", null);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select allow From " + table + L" Where baseUrl = '" + baseUri + L"' AND url = '" + uri + L"' AND mime = '" + target + L"'"));
+ SysTryReturn(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ if(pEnum.get())
+ {
+ r = pEnum->MoveNext();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
+ r = pEnum->GetIntAt(0, checkReturn);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ else
+ {
+ checkReturn = 2;
+ }
+
+ return checkReturn;
+}
+
+
+result
+_WebImpl::UnregistrationHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime)
+{
+ int checkId = 0;
+ _DatabaseImpl db;
+ String handlerPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+
+ String table;
+ if( checkmime == true)
+ {
+ table = CUSTOM_CONTENT_TABLE_NAME;
+ }
+ else
+ {
+ table = CUSTOM_PROTOCOL_TABLE_NAME;
+ }
+
+ String baseUri(ewk_custom_handlers_data_base_url_get(pHandlerData));
+ String uri(ewk_custom_handlers_data_url_get(pHandlerData));
+ String target(ewk_custom_handlers_data_target_get(pHandlerData));
+
+ SysSecureLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer());
+
+ result r = db.Construct(handlerPath, "r+", null);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select id From " + table + L" Where baseUrl = '" + baseUri + L"' AND url = '" + uri + L"' AND mime = '" + target + L"'"));
+ SysTryReturn(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ if(pEnum.get())
+ {
+ r = pEnum->MoveNext();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ r = pEnum->GetIntAt(0, checkId);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbStatement> pDeleteStmt(db.CreateStatementN(L"Delete From " + table + L" Where id = (?)"));
+ SysTryReturn(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+ r = pDeleteStmt->BindInt(0, checkId);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ db.BeginTransaction();
+
+ std::unique_ptr<DbEnumerator> pEnum(db.ExecuteStatementN(*pDeleteStmt));
+
+ db.CommitTransaction();
+ }
+
+ return E_SUCCESS;
+}
+
+
+const Tizen::Base::String
+_WebImpl::GetProtocolFromUri(const Tizen::Base::String& originUri, const Tizen::Base::String& currentUri)
+{
+ if (originUri == L"" || currentUri == L"")
+ {
+ return L"";
+ }
+
+ result r = E_SUCCESS;
+ String baseUri;
+ _DatabaseImpl db;
+ String handlerPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+ String originReplace(originUri);
+ String table(CUSTOM_PROTOCOL_TABLE_NAME);
+ int found = 0;
+ int foundQuery = 0;
+
+ r = currentUri.LastIndexOf(L"/", currentUri.GetLength()-1, found);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = currentUri.SubString(0, found + 1, baseUri);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = db.Construct(handlerPath, "r+", null);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select mime, url, allow From " + table + L" Where baseUrl = '" + baseUri + "'"));
+ SysTryReturn(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, L"", GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
+
+ if(pEnum.get())
+ {
+ while (pEnum->MoveNext() == E_SUCCESS)
+ {
+ String protocol;
+ String queryUrl;
+ int allow;
+ String originScheme;
+
+ r = pEnum->GetStringAt(0, protocol);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pEnum->GetStringAt(1, queryUrl);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pEnum->GetIntAt(2, allow);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ if (allow == 0)
+ {
+ break;
+ }
+
+ String protocolScheme(protocol + L":");
+
+ r = originReplace.SubString(0, protocolScheme.GetLength(), originScheme);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ if ((originReplace.GetLength() >= protocolScheme.GetLength()) && originScheme.Equals(protocolScheme, false))
+ {
+ if (queryUrl.IndexOf(L"%s", 0, foundQuery) == E_SUCCESS)
+ {
+ r = originReplace.Replace(originScheme, "");
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ queryUrl.Replace("%s", originReplace, 0);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ return queryUrl;
+ }
+ }
+ }
+ }
+
+ return L"";
+}
+
+
+const Tizen::Base::String
+_WebImpl::GetRedirectUri(const Tizen::Base::String& originUri, const Tizen::Base::String& currentUri, const Tizen::Base::String& mime)
+{
+ if (originUri == L"" || currentUri == L"" || mime == L"")
+ {
+ return L"";
+ }
+
+ result r = E_SUCCESS;
+ String baseUri;
+ String contentUrl;
+ String originUrlStr = originUri;
+ const String replaceStr = L"%s";
+ _DatabaseImpl db;
+ String handlerPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+ String table(CUSTOM_CONTENT_TABLE_NAME);
+ int allow = 0;
+ int found = 0;
+
+ r = currentUri.LastIndexOf(L"/", currentUri.GetLength()-1, found);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = currentUri.SubString(0, found + 1, baseUri);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = db.Construct(handlerPath, "r+", null);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ std::unique_ptr<DbEnumerator> pEnum(db.QueryN(L"Select allow, url From " + table + L" Where baseUrl = '" + baseUri + "' AND mime = '" + mime + L"'"));
+
+ if (pEnum.get())
+ {
+ r = pEnum->MoveNext();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+ r = pEnum->GetIntAt(0, allow);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+ r = pEnum->GetStringAt(1, contentUrl);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ if (allow == 0)
+ {
+ return L"";
+ }
+ else
+ {
+ if (contentUrl != L"")
+ {
+ r = contentUrl.Replace(replaceStr, originUrlStr, 0);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, L"", r, "[%s] Propagating.", GetErrorMessage(r));
+
+ return contentUrl;
+ }
+ }
+ }
+
+ return L"";
+}
+
+
+void
+_WebImpl::SetFormDataList(Eina_List* pFormDataList)
+{
+ __pFormDataList = pFormDataList;
+}
+
+
+bool
+_WebImpl::IsFormDataWindowVisible(void) const
+{
+ return __isFormDataVisible;
+}
+
+
+result
+_WebImpl::ShowFormDataWindow(const Rectangle& windowRect, Evas_Object* pWebView)
+{
+ Rectangle rect(_CoordinateSystemUtils::InverseTransform(Rectangle(windowRect.x, windowRect.y + windowRect.height, windowRect.width, windowRect.height)));
+
+ if (__isFormDataVisible)
+ {
+ result r = __pFormDataWindow->UpdateList(__pFormDataList, rect);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+ }
+ else
+ {
+ __pFormDataWindow.reset();
+
+ std::unique_ptr<_FormDataWindow> pFormDataWindow( new (std::nothrow) _FormDataWindow());
+ SysTryReturnResult(NID_WEB_CTRL, pFormDataWindow.get(), E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+ result r = pFormDataWindow->Construct(rect, this, pWebView);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pFormDataWindow->UpdateList(__pFormDataList, rect);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = pFormDataWindow->LaunchFormDataWindow();
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ __pFormDataWindow = std::move(pFormDataWindow);
+ __isFormDataVisible = true;
+ }
+
+ return E_SUCCESS;
+}
+
+
+void
+_WebImpl::HideFormDataWindow(bool delWindow)
+{
+ if (delWindow)
+ {
+ __pFormDataWindow.reset();
+ }
+
+ __isFormDataVisible = false;
+}
+
+
+void
+_WebImpl::ClearWebNotification(_WebNotification* pWebNotification)
+{
+ __webNotificationList.Remove(*pWebNotification);
+}
+
+
+void
+_WebImpl::SetWebNotification(_WebNotification* pWebNotification)
+{
+ __webNotificationList.Add(pWebNotification);
+}
+
+
+void
+_WebImpl::OnDownloadCompleted(RequestId reqId, const String &path)
+{
+ _ContentManagerImpl::ScanFile(path);
+}
+
+