[ Tizen 4.0] Update latest Ref Browser 62/122762/1
authorHyeKyoung Hwang <cookie@samsung.com>
Mon, 3 Apr 2017 09:39:31 +0000 (18:39 +0900)
committerHyeKyoung Hwang <cookie@samsung.com>
Mon, 3 Apr 2017 09:39:31 +0000 (18:39 +0900)
Change-Id: Ibc4a5984335e514adadf5ccb2a530bf7db35a0ed
Signed-off-by: HyeKyoung Hwang <cookie@samsung.com>
288 files changed:
.gbs.conf
CMakeLists.txt
README
build_mobile.sh
cmake/EDCCompile.cmake
core/AbstractInterfaces/AbstractContextMenu.h
core/AbstractInterfaces/AbstractFavoriteService.h [deleted file]
core/AbstractInterfaces/AbstractRotatable.h
core/AbstractInterfaces/AbstractUIComponent.h
core/AbstractWebEngine/AbstractWebEngine.h
core/AbstractWebEngine/TabOrigin.h
core/AbstractWebEngine/WebConfirmation.cpp
core/AbstractWebEngine/WebConfirmation.h
core/AbstractWebEngine/WebEngineSettings.h
core/BasicUI/AbstractMainWindow.h
core/BasicUI/Action.cpp
core/BasicUI/Action.h
core/BasicUI/EAction.cpp
core/BasicUI/EAction.h
core/BasicUI/MenuButton.cpp
core/BasicUI/MenuButton.h
core/BasicUI/NaviframeWrapper.cpp
core/BasicUI/NaviframeWrapper.h
core/BasicUI/PopupButtons.h
core/BrowserLogger.h
core/CMakeLists.txt
core/Config/Config.cpp
core/Config/Config.h
core/Config/ConfigKey.h
core/DownloadControl/DownloadControl.cpp
core/DownloadControl/DownloadControl.h
core/Logger/Logger.cpp
core/Logger/Logger.h
core/Logger/LoggerTools.cpp
core/Logger/TextLogger.cpp
core/Logger/TextLogger.h
core/ServiceManager/Debug/BrowserAssert.h
core/ServiceManager/ServiceLib.cpp
core/ServiceManager/ServiceLoader.h
core/ServiceManager/ServiceLoader_p.h
core/ServiceManager/ServiceManager.cpp
core/ServiceManager/ServiceManager.h
core/ServiceManager/ServiceManager_p.h
core/ServiceManager/service_macros.h
core/Tools/Blob.cpp
core/Tools/Blob.h
core/Tools/BookmarkItem.cpp
core/Tools/BookmarkItem.h
core/Tools/BrowserImage.cpp
core/Tools/BrowserImage.h
core/Tools/EflTools.cpp
core/Tools/EflTools.h
core/Tools/FeedChannel.cpp [deleted file]
core/Tools/FeedChannel.h [deleted file]
core/Tools/FeedItem.cpp [deleted file]
core/Tools/FeedItem.h [deleted file]
core/Tools/FocusManager.cpp [deleted file]
core/Tools/FocusManager.h [deleted file]
core/Tools/GeneralTools.h [changed mode: 0644->0755]
core/Tools/GengridWrapper.cpp [new file with mode: 0755]
core/Tools/GengridWrapper.h [new file with mode: 0755]
core/Tools/SettingsEnums.h
core/Tools/TabEnums.h
core/Tools/URIschemes.h
core/Tools/edc/CustomButton.edc [moved from services/WebPageUI/edc/CustomButton.edc with 96% similarity]
core/Tools/edc/EntryCustomLayout.edc
core/Tools/edc/ImageButton.edc [moved from services/WebPageUI/edc/ImageButton.edc with 100% similarity]
core/main.cpp
landscape.png [new file with mode: 0755]
manifest.xml.in.mb
packaging/org.tizen.browser.spec
portrait.png [new file with mode: 0755]
res/locale/ar.po
res/locale/az.po
res/locale/bg.po
res/locale/ca.po
res/locale/cs.po
res/locale/da.po
res/locale/de.po
res/locale/el_GR.po
res/locale/en.po
res/locale/en_PH.po
res/locale/en_US.po
res/locale/es_ES.po
res/locale/es_US.po
res/locale/et.po
res/locale/eu.po
res/locale/fi.po
res/locale/fr.po
res/locale/fr_CA.po
res/locale/ga.po
res/locale/gl.po
res/locale/hi.po
res/locale/hr.po
res/locale/hu.po
res/locale/hy.po
res/locale/is.po
res/locale/it_IT.po
res/locale/ja_JP.po
res/locale/ka.po
res/locale/kk.po
res/locale/ko_KR.po
res/locale/lt.po
res/locale/lv.po
res/locale/mk.po
res/locale/nb.po
res/locale/nl.po
res/locale/pl.po
res/locale/pt_BR.po
res/locale/pt_PT.po
res/locale/ro.po
res/locale/ru_RU.po
res/locale/sk.po
res/locale/sl.po
res/locale/sr.po
res/locale/sv.po
res/locale/tr_TR.po
res/locale/uk.po
res/locale/uz.po
res/locale/zh_CN.po
res/locale/zh_HK.po
res/locale/zh_TW.po
services/BookmarkFlowUI/BookmarkFlowUI.cpp
services/BookmarkFlowUI/BookmarkFlowUI.h
services/BookmarkManagerUI/BookmarkManagerUI.cpp
services/BookmarkManagerUI/BookmarkManagerUI.h
services/BookmarkManagerUI/edc/BookmarkManagerUI_mob.edc
services/BookmarkManagerUI/images_mob/internet_ic_private_mode.png [deleted file]
services/BookmarkService/BookmarkService.cpp
services/BookmarkService/BookmarkService.h
services/CMakeLists.txt
services/CertificateService/CertificateContents.cpp
services/CertificateService/CertificateContents.h
services/CertificateService/edc/CertificatePopup.edc
services/FindOnPageUI/FindOnPageUI.cpp
services/FindOnPageUI/FindOnPageUI.h
services/FindOnPageUI/edc/FindOnPage.edc
services/FindOnPageUI/images_mob/btn_bar_stop_nor.png [deleted file]
services/FindOnPageUI/images_mob/toolbar_input_ic_cancel.png [new file with mode: 0755]
services/HistoryService/HistoryItem.cpp
services/HistoryService/HistoryItem.h
services/HistoryService/HistoryService.cpp
services/HistoryService/HistoryService.h
services/HistoryService/HistoryServiceTools.cpp
services/HistoryService/HistoryServiceTools.h
services/HistoryUI/CMakeLists.txt
services/HistoryUI/HistoryDaysListManager/HistoryDayItemData.h
services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp
services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h
services/HistoryUI/HistoryDaysListManager/mob/HistoryDayItemMob.cpp
services/HistoryUI/HistoryDaysListManager/mob/HistoryDayItemMob.h
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.cpp
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.h
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemTitleMob.cpp
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemTitleMob.h
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.cpp
services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.h
services/HistoryUI/HistoryUI.cpp
services/HistoryUI/HistoryUI.h
services/HistoryUI/HistoryUIFocusManager.cpp [deleted file]
services/HistoryUI/HistoryUIFocusManager.h [deleted file]
services/HistoryUI/edc/HistoryDaysList_mob.edc
services/HistoryUI/edc/History_mob.edc [deleted file]
services/PlatformInputManager/PlatformInputManager.cpp
services/PlatformInputManager/PlatformInputManager.h
services/QuickAccess/QAGengrid.h [new file with mode: 0755]
services/QuickAccess/QuickAccess.cpp
services/QuickAccess/QuickAccess.h
services/QuickAccess/edc/QuickAccess_mob.edc
services/SettingsUI/AutoFillForm/AutoFillFormItem.h
services/SettingsUI/SettingsAFCreator.cpp
services/SettingsUI/SettingsAFCreator.h
services/SettingsUI/SettingsAFProfile.cpp
services/SettingsUI/SettingsAFProfile.h
services/SettingsUI/SettingsAdvanced.cpp
services/SettingsUI/SettingsAdvanced.h
services/SettingsUI/SettingsDelPersData.cpp
services/SettingsUI/SettingsDelPersData.h
services/SettingsUI/SettingsHomePage.cpp
services/SettingsUI/SettingsHomePage.h
services/SettingsUI/SettingsMain.cpp
services/SettingsUI/SettingsMain.h
services/SettingsUI/SettingsManager.cpp
services/SettingsUI/SettingsManager.h
services/SettingsUI/SettingsPrettySignalConnector.h
services/SettingsUI/SettingsPrivacy.cpp
services/SettingsUI/SettingsPrivacy.h
services/SettingsUI/SettingsUI.cpp
services/SettingsUI/SettingsUI.h
services/SettingsUI/SettingsUserAgent.cpp
services/SettingsUI/SettingsUserAgent.h
services/SettingsUI/edc/AutoFill_mob.edc
services/SimpleUI/CMakeLists.txt
services/SimpleUI/ContentPopup.cpp [moved from services/SimpleUI/ContentPopup_mob.cpp with 55% similarity]
services/SimpleUI/ContentPopup.h [moved from services/SimpleUI/ContentPopup_mob.h with 82% similarity]
services/SimpleUI/CustomPopup.cpp [deleted file]
services/SimpleUI/CustomPopup.h [deleted file]
services/SimpleUI/InputPopup.cpp
services/SimpleUI/InputPopup.h
services/SimpleUI/NotificationPopup.cpp
services/SimpleUI/ProgressiveWebApp.cpp
services/SimpleUI/ProgressiveWebApp.h
services/SimpleUI/RadioPopup.cpp
services/SimpleUI/RadioPopup.h
services/SimpleUI/SimplePopup.cpp [deleted file]
services/SimpleUI/SimplePopup.h [deleted file]
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/SimpleUI/SplashScreen.cpp [new file with mode: 0755]
services/SimpleUI/SplashScreen.h [new file with mode: 0755]
services/SimpleUI/TextPopup.cpp [moved from services/SimpleUI/TextPopup_mob.cpp with 85% similarity]
services/SimpleUI/TextPopup.h [moved from services/SimpleUI/TextPopup_mob.h with 90% similarity]
services/SimpleUI/edc/ContentPopup_mob.edc [deleted file]
services/SimpleUI/edc/CustomPopup.edc [deleted file]
services/SimpleUI/edc/InputPopup.edc [deleted file]
services/SimpleUI/edc/InputPopup_mob.edc [deleted file]
services/SimpleUI/edc/NotificationPopup.edc
services/SimpleUI/edc/NotificationPopup_mob.edc [deleted file]
services/SimpleUI/edc/TextPopup.edc [moved from services/SimpleUI/edc/TextPopup_mob.edc with 100% similarity]
services/SimpleUI/edc/Tooltip.edc [deleted file]
services/SimpleUI/edc/ViewManager.edc
services/SimpleUI/images_mob/input_ic_cancel.png [deleted file]
services/StorageService/CMakeLists.txt
services/StorageService/CertificateStorage.cpp
services/StorageService/CertificateStorage.h
services/StorageService/Field.cpp
services/StorageService/Field.h
services/StorageService/FoldersStorage.cpp [deleted file]
services/StorageService/FoldersStorage.h [deleted file]
services/StorageService/PWAStorage.cpp [new file with mode: 0755]
services/StorageService/PWAStorage.h [new file with mode: 0755]
services/StorageService/QuickAccessStorage.cpp
services/StorageService/QuickAccessStorage.h
services/StorageService/SQLDatabase.cpp
services/StorageService/SQLDatabaseImpl.h
services/StorageService/SQLTransactionScope.h
services/StorageService/SettingsStorage.cpp
services/StorageService/SettingsStorage.h
services/StorageService/StorageService.h
services/TabService/TabService.cpp
services/TabService/TabService.h
services/TabUI/PasswordUI.cpp
services/TabUI/PasswordUI.h
services/TabUI/TabUI.cpp
services/TabUI/TabUI.h
services/TabUI/edc/TabUI_mob.edc
services/WebEngineMin/CMakeLists.txt [new file with mode: 0755]
services/WebEngineMin/WebEngineMin.cpp [new file with mode: 0755]
services/WebEngineMin/WebEngineMin.h [new file with mode: 0755]
services/WebEngineService/WebEngineService.cpp
services/WebEngineService/WebEngineService.h
services/WebEngineService/WebView.cpp
services/WebEngineService/WebView.h
services/WebPageMin/CMakeLists.txt [new file with mode: 0755]
services/WebPageMin/WebPageMin.cpp [new file with mode: 0755]
services/WebPageMin/WebPageMin.h [new file with mode: 0755]
services/WebPageUI/ButtonBar.cpp
services/WebPageUI/ButtonBar.h
services/WebPageUI/CMakeLists.txt
services/WebPageUI/EditQuickAccessUI.cpp
services/WebPageUI/EditQuickAccessUI.h
services/WebPageUI/URIEntry.cpp
services/WebPageUI/URIEntry.h
services/WebPageUI/UrlHistoryList/GenlistItemsManager.cpp [deleted file]
services/WebPageUI/UrlHistoryList/GenlistItemsManager.h [deleted file]
services/WebPageUI/UrlHistoryList/GenlistManager.cpp [deleted file]
services/WebPageUI/UrlHistoryList/GenlistManager.h [deleted file]
services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.cpp [deleted file]
services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.h [deleted file]
services/WebPageUI/UrlHistoryList/TimerCallbacks.cpp [deleted file]
services/WebPageUI/UrlHistoryList/TimerCallbacks.h [deleted file]
services/WebPageUI/UrlHistoryList/UrlHistoryList.cpp [deleted file]
services/WebPageUI/UrlHistoryList/UrlHistoryList.h [deleted file]
services/WebPageUI/UrlHistoryList/UrlMatchesStyler.cpp [deleted file]
services/WebPageUI/UrlHistoryList/UrlMatchesStyler.h [deleted file]
services/WebPageUI/WebPageUI.cpp
services/WebPageUI/WebPageUI.h
services/WebPageUI/WebPageUIStatesManager.cpp
services/WebPageUI/WebPageUIStatesManager.h
services/WebPageUI/edc/BottomButtonBar.edc
services/WebPageUI/edc/RightButtonBar.edc
services/WebPageUI/edc/URIEntry.edc
services/WebPageUI/edc/UrlHistoryList.edc [deleted file]
services/WebPageUI/edc/WebPageUI.edc
services/WebPageUI/edc/WebPageUIUrlHistoryList.edc [deleted file]
unit_tests/ut_BookmarkItem.cpp
unit_tests/ut_Config.cpp
unit_tests/ut_WebEngineService.cpp

index 8125ce6..04c7714 100755 (executable)
--- a/.gbs.conf
+++ b/.gbs.conf
@@ -202,28 +202,28 @@ repos = repo.public_3.0_base_arm,repo.tzmo_v3.0_arm-wayland
 buildroot = ~/GBS-ROOT-3.0-MOBILE-arm-wayland
 
 [repo.public_3.0_base_arm]
-url = http://download.tizen.org/snapshots/tizen/base/latest/repos/arm/packages/
+url = http://download.tizen.org/snapshots/tizen/3.0-base/latest/repos/arm/packages/
 
 [repo.tzmo_v3.0_arm-wayland]
-url = http://download.tizen.org/snapshots/tizen/mobile/latest/repos/arm-wayland/packages/
+url = http://download.tizen.org/snapshots/tizen/3.0-mobile/latest/repos/arm-wayland/packages/
 
 
 ###############################################
 #
-# Tizen v3.0 for mobile (arm-wayland), Mirroring Server for HQ developers
+# Tizen v4.0 for mobile (arm-wayland), Mirroring Server for HQ developers
 #
 
-[profile.tzmo_v3.0_arm-wayland_mirror]
+[profile.tzmo_v4.0_arm-wayland_mirror]
 obs = obs.tizen_v3.0
-repos = repo.public_3.0_base_arm_mirror, repo.tzm0_v3.0_arm-wayland_mirror
-buildroot = ~/GBS-ROOT-3.0-MOBILE-arm-wayland
+repos = repo.public_4.0_base_arm_mirror, repo.tzm0_v4.0_arm-wayland_mirror
+buildroot = ~/GBS-ROOT-4.0-MOBILE-arm-wayland
 user = blinkbot
 passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
 
-[repo.public_3.0_base_arm_mirror]
-url = http://165.213.149.200/download/public_mirror/tizen/base/latest/repos/arm/packages/
+[repo.public_4.0_base_arm_mirror]
+url =http://165.213.149.200/download/public_mirror/tizen/base/latest/repos/arm/packages/
 
-[repo.tzm0_v3.0_arm-wayland_mirror]
+[repo.tzm0_v4.0_arm-wayland_mirror]
 url = http://165.213.149.200/download/public_mirror/tizen/mobile/latest/repos/target-TM1/packages/
 
 
index 94cf757..083e941 100755 (executable)
@@ -28,6 +28,8 @@ option(BUILD_UT "Build Unit tests" OFF)
 option(TIZEN_BUILD "Build for Tizen. Default ON" ON)
 option(DYN_INT_LIBS "Buils internal libs as dynamic" ON)
 option(COVERAGE_STATS "Code coverage" OFF)
+option(DUMMY_BUTTON "Build With Dummy Button" ON)
+option(PWA "Build with PWA" ON)
 
 #Enable C++14 support
 include(CheckCXXCompilerFlag)
@@ -92,6 +94,7 @@ if(TIZEN_BUILD)
         notification
         appsvc
         shortcut
+        push
         capi-network-connection
     )
     endif (${PROFILE} MATCHES "mobile")
@@ -121,13 +124,23 @@ if(TIZEN_BUILD)
 
     if (${PROFILE} MATCHES "mobile")
         ADD_DEFINITIONS(-DPROFILE_MOBILE=1)
-        ADD_DEFINITIONS(-DPWA=0)
-        ADD_DEFINITIONS(-DDUMMY_BUTTON=1)
     endif (${PROFILE} MATCHES "mobile")
 
+    if (${DUMMY_BUTTON} MATCHES "ON")
+        ADD_DEFINITIONS(-DDUMMY_BUTTON=1)
+    endif ()
+    if (${DUMMY_BUTTON} MATCHES "OFF")
+        ADD_DEFINITIONS(-DDUMMY_BUTTON=0)
+    endif()
+
+    if (${PWA} MATCHES "ON")
+        ADD_DEFINITIONS(-DPWA=1)
+    endif()
+
 endif(TIZEN_BUILD)
 
 ADD_DEFINITIONS(-DEDJE_DIR=\"${EDJE_DIR}\")
+ADD_DEFINITIONS(-DICONDIR=\"${ICONDIR}\")
 
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
@@ -163,6 +176,9 @@ endif (${PROFILE} MATCHES "mobile")
 install(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR})
 # install desktop file & icon
 install(FILES ${CMAKE_SOURCE_DIR}/org.tizen.browser.png DESTINATION ${ICONDIR})
+install(FILES ${CMAKE_SOURCE_DIR}/landscape.png DESTINATION ${ICONDIR})
+install(FILES ${CMAKE_SOURCE_DIR}/portrait.png DESTINATION ${ICONDIR})
+
 # install certs
 INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/certs/ DESTINATION ${CERTS_DIR})
 endif(TIZEN_BUILD)
@@ -173,4 +189,5 @@ message(STATUS "Interal libs are dynamic (DYN_INT_LIBS)    :" ${DYN_INT_LIBS})
 message(STATUS "Building Unit tests      (BUILD_UT)        :" ${BUILD_UT})
 message(STATUS "Code Coverage statistics (COVERAGE_STATS)  :" ${COVERAGE_STATS})
 message(STATUS "Device profile           (PROFILE)         :" ${PROFILE})
+message(STATUS "Building with Dummy Button (DUMMY_BUTTON)  :" ${DUMMY_BUTTON})
 message(STATUS "------------------------------------------")
diff --git a/README b/README
index 8026076..d0a870b 100755 (executable)
--- a/README
+++ b/README
@@ -1 +1 @@
-initial commit
+Reference Browser for mobile.
index 01e58ad..86933fc 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/bash
-gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm-wayland -A armv7l --include-all
+gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm-wayland_mirror -A armv7l --include-all
 #gbs -c .gbs.conf build -P profile.tzmo_v3.0_arm64-wayland -A aarch64 --include-all
index 6f9a340..4a6fab7 100755 (executable)
@@ -27,6 +27,13 @@ IF(EDJE_CC_EXECUTABLE)
             SET(IF_PROFILE_MOBILE 0)
          ENDIF()
 
+         if (${DUMMY_BUTTON} MATCHES "ON")
+             SET(IF_DUMMY_BUTTON 1)
+         endif ()
+         if (${DUMMY_BUTTON} MATCHES "OFF")
+             SET(IF_DUMMY_BUTTON 0)
+         endif()
+
          FOREACH(resolution ${BROWSER_RESOLUTION})
              SET(tmp_output ${Edj_Output}/${resolution}_${Name})
              ADD_CUSTOM_COMMAND(OUTPUT ${tmp_output}
index 0ef4aa7..4cabbf2 100755 (executable)
@@ -49,9 +49,13 @@ public:
      */
     boost::signals2::signal<Evas_Object* ()> getWindow;
 
+    AbstractContextMenu() : m_ctxpopup(nullptr) { }
+    virtual ~AbstractContextMenu() { }
+
 protected:
     static void _cm_dismissed(void *, Evas_Object * obj, void *)
     {
+        evas_object_smart_callback_del(obj, "dismissed", _cm_dismissed);
         evas_object_del(obj);
         obj = nullptr;
     }
@@ -62,7 +66,7 @@ protected:
     void createContextMenu(Evas_Object* parent)
     {
         if (m_ctxpopup)
-            _cm_dismissed(nullptr, m_ctxpopup, nullptr);
+            evas_object_smart_callback_call(m_ctxpopup, "dismissed", nullptr);
 
         m_ctxpopup = elm_ctxpopup_add(parent);
         elm_object_style_set(m_ctxpopup, "more/default");
diff --git a/core/AbstractInterfaces/AbstractFavoriteService.h b/core/AbstractInterfaces/AbstractFavoriteService.h
deleted file mode 100755 (executable)
index 79d2fbc..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- *
- * Created on: Apr, 2014
- *     Author: m.kielak
- */
-
-#ifndef ABSTRACTFAVORITESERVICE_H
-#define ABSTRACTFAVORITESERVICE_H
-
-#include "browser_config.h"
-
-#include "AbstractService.h"
-#include "service_macros.h"
-#include "BookmarkItem.h"
-#include "BrowserImage.h"
-#include "StorageService.h"
-
-namespace tizen_browser{
-namespace interfaces{
-
-class AbstractFavoriteService
-        : public tizen_browser::core::AbstractService
-{
-public:
-
-    /**
-     * @brief Add page to bookmarks
-     *
-     * @param address Webpage url.
-     * @param title Title of bookmark.
-     * @param note Bookmark note, default is empty .
-     * @param dirId Directory numeric ID, default is 0.
-     * @param thumbnail Page thumbnail, default is empty image.
-     * @param favicon Page favicon image, default is empty image.
-     *
-     * @return BookmarkItem class
-     */
-    virtual std::shared_ptr<tizen_browser::services::BookmarkItem> addBookmark(const std::string & address,
-        const std::string & title,
-        const std::string & note = std::string(),
-        std::shared_ptr<tizen_browser::tools::BrowserImage> thumbnail=std::shared_ptr<tizen_browser::tools::BrowserImage>(),
-        std::shared_ptr<tizen_browser::tools::BrowserImage> favicon = std::shared_ptr<tizen_browser::tools::BrowserImage>(),
-        unsigned int dirId = 0) = 0;
-
-    /**
-     * @brief Update bookmark snapshot by given url
-     *
-     * @param url of bookmark to delete
-     */
-    virtual void updateBookmarkItemSnapshot(const std::string & url,
-        std::shared_ptr<tizen_browser::tools::BrowserImage> snapshot) = 0;
-
-    /** \todo Need to change this callback function for finding stored bookmark, check getBookmarkId function
-     * @brief Check if bookmark exists
-     *
-     * @param url url to find
-     * @return true if exists, false if not
-     */
-     virtual bool bookmarkExists(const std::string & url)= 0;
-
-    /**
-     * @brief Get bookmarks in a folder from platform service and store it in private m_bookmarksList
-     *
-     * @return list of bookmark items in folder with id, folder_id
-     */
-    virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getBookmarks(int folder_id = -1) = 0;
-
-    /**
-     * @brief Delete all bookmarks
-     *
-     * @return true if success, false on error
-     */
-    virtual bool deleteAllBookmarks() = 0;
-
-    /**
-      * @brief Edit bookmark title and folder by given url
-      *
-      * @return true if success, false on error
-      */
-    virtual bool editBookmark(const std::string & url, const std::string & title, unsigned int folder_id = 0) = 0;
-
-    /**
-     * @brief Delete bookmark by given url
-     *
-     * @param url of bookmark to delete
-     * @return true if success, false on error of not found bookmark
-     */
-    virtual bool deleteBookmark(const std::string & url) = 0;
-
-    virtual std::shared_ptr<tizen_browser::services::BookmarkItem> addFolder(const std::string & title,
-        int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-
-    virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getFolders(
-        int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-    virtual bool folderExists(const std::string & title, int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-    virtual std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem>> getAllBookmarkItems(
-        int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-    virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getRoot() = 0;
-    virtual std::shared_ptr<tizen_browser::services::BookmarkItem> getBookmarkItem(int id) = 0;
-    virtual void editBookmark(int id, const std::string & url, const std::string & title, int parent = -1,
-        int order = -1) = 0;
-    virtual bool deleteBookmark(int id) = 0;
-    /**
-     * @brief Gets bookmark item
-     *
-     * @param url of bookmark, pointer to item
-     * @return true if success, false on error of not found bookmark
-     */
-    virtual bool getItem(const std::string & url, tizen_browser::services::BookmarkItem *item) = 0;
-    virtual int getFolderId(const std::string & title, int parent = tizen_browser::services::ROOT_FOLDER_ID) = 0;
-
-    boost::signals2::signal<void (std::shared_ptr<tizen_browser::services::BookmarkItem>)> bookmarkAdded;
-    boost::signals2::signal<void (const std::string& uri)> bookmarkDeleted;
-    boost::signals2::signal<void ()> bookmarksDeleted;
-
-};
-
-}
-}
-
-#endif // FAVORITESERVICE_H
index f8f7d16..1710068 100755 (executable)
@@ -17,6 +17,8 @@
 #ifndef __ABSTRACT_ROTATABLE_H__
 #define __ABSTRACT_ROTATABLE_H__
 
+#include <boost/signals2/signal.hpp>
+
 namespace tizen_browser
 {
 namespace interfaces
index dfe961c..5aa49d6 100755 (executable)
@@ -17,6 +17,7 @@
 #ifndef __ABSTRACT_UI_COMPONENT_H__
 #define __ABSTRACT_UI_COMPONENT_H__ 1
 
+#include <Evas.h>
 #include <boost/signals2/signal.hpp>
 
 namespace tizen_browser
index 9152064..7cd97c4 100755 (executable)
@@ -69,11 +69,6 @@ public:
     virtual void init(Evas_Object* guiParent) = 0;
 
     /**
-     * Preinitialize WebView parameters.
-     */
-    virtual void preinitializeWebViewCache() = 0;
-
-    /**
      * Set URI address for current tab.
      * @param uri
      */
@@ -84,9 +79,10 @@ public:
      */
     virtual std::string getURI(void) const = 0;
 
-#if PWA
-    virtual void requestManifest(void) = 0;
-#endif
+    /**
+     * Prepare data for PWA.
+     */
+    virtual void setPWAData() = 0;
 
     /**
      * @return title of page opened in current tab.
@@ -119,6 +115,11 @@ public:
     virtual void resume(void) = 0;
 
     /**
+     * Change a language of a webview.
+     */
+    virtual void languageChanged(void) = 0;
+
+    /**
      * @return true if current webview is suspended, false otherwise
      */
     virtual bool isSuspended(void) const = 0;
@@ -169,6 +170,11 @@ public:
     virtual TabId currentTabId() const = 0;
 
     /**
+     * @return TabId of current tab
+     */
+    virtual TabId oldestTabId() const = 0;
+
+    /**
      * Destroy active WebViews.
      */
     virtual void destroyTabs() = 0;
@@ -196,6 +202,12 @@ public:
             TabOrigin origin = TabOrigin::UNKNOWN) = 0;
 
     /**
+     * Opens previously requested page.
+     * @return TabId of created tab
+     */
+    virtual TabId openRequestedPage() = 0;
+
+    /**
      * @param tab id
      * @return returns underlaying UI component
      */
@@ -251,33 +263,29 @@ public:
     virtual bool isLoadError() const = 0;
 
     /**
-     * \brief Sets Focus to URI entry.
+     * \brief Sets IME state of the current webview.
      */
-    virtual void setFocus()=0;
+    virtual void setIMEState(const bool& state) = 0;
 
     /**
-     * @brief Remove focus form URI
+     * \brief Gets IME state of the current webview.
      */
-    virtual void clearFocus()=0;
+    virtual bool getIMEState() const = 0;
 
     /**
-     * @brief check if URI is focused
+     * \brief Sets Focus to URI entry.
      */
-    virtual bool hasFocus() const = 0;
+    virtual void setFocus()=0;
 
     /**
-     * @brief return current zoom factor in percentage.
-     *
-     * @return real zoom, also for "fit to screen" mode
+     * @brief Remove focus form URI
      */
-    virtual int getZoomFactor()const = 0;
+    virtual void clearFocus()=0;
 
     /**
-     * @brief Sets zoom factor in percentage
-     *
-     * @param zoomFactor in percentage of default zoom, 0 means autofit
+     * @brief check if URI is focused
      */
-    virtual void setZoomFactor(int zoomFactor) = 0;
+    virtual bool hasFocus() const = 0;
 
     /**
      * @brief Clear cache of WebView
@@ -323,11 +331,6 @@ public:
     virtual void backButtonClicked() = 0;
 
     /**
-     * @brief clear text selection or exit full screen when more key is pressed
-     */
-    virtual void moreKeyPressed() = 0;
-
-    /**
      * @brief Switch current view to mobile mode
      */
     virtual void switchToMobileMode() = 0;
@@ -345,15 +348,11 @@ public:
     virtual bool isDesktopMode() const = 0;
 
     /**
-     * Sets an absolute scroll of the given view.
-     *
-     * Both values are from zero to the contents size minus the viewport
-     * size.
+     * @brief Check if FullScreen mode is enabled for current view
      *
-     * @param x horizontal position to scroll
-     * @param y vertical position to scroll
+     * @return true if FullScreen mode is enabled
      */
-    virtual void scrollView(const int& dx, const int& dy) = 0;
+    virtual bool isFullScreenMode() const = 0;
 
     /**
      * Slot to which generated tab's id is passed.
@@ -381,11 +380,6 @@ public:
     virtual void setSettingsParam(WebEngineSettings param, bool value) = 0;
 
     /**
-     * @brief Reset WebView settings
-     */
-    virtual void resetSettingsParam() = 0;
-
-    /**
      * @brief Informs WebEngine that device orientation is changed.
      */
     virtual void orientationChanged() = 0;
@@ -401,6 +395,11 @@ public:
     virtual State getState() = 0;
 
     /**
+     * @brief If false bottom and url bar hide.
+     */
+    virtual void setBarsShown(bool value) const = 0;
+
+    /**
      * Ask browser to minimize itself
      */
     boost::signals2::signal<void ()> minimizeBrowser;
@@ -449,6 +448,12 @@ public:
      */
     boost::signals2::signal<void (double)> loadProgress;
 
+#if DUMMY_BUTTON
+    /**
+     * WebView wants to focus itself
+     */
+    boost::signals2::signal<void ()> focusWebView;
+#endif
     /**
      * Page load stopped.
      */
@@ -571,6 +576,68 @@ public:
      * Unsecure connection to https host, do not even ask to confirm, just inform.
      */
     boost::signals2::signal<void()> unsecureConnection;
+
+    /**
+     * Send the signal to change the offset of the top url bar.
+     */
+    boost::signals2::signal<void(float)> urlbarOffsetSet;
+    boost::signals2::signal<void(float)> bottombarOffsetSet;
+
+    /**
+     * Get current search engine and create search URL based on it
+     */
+    boost::signals2::signal<std::string (const std::string&)> createSearchQuery;
+
+    /**
+     * Change theme color
+     */
+    boost::signals2::signal<void(int,int,int,int)> changeUIColor;
+
+    /**
+     * Install PWA in DB
+     * Gets PWA ID
+     */
+    boost::signals2::signal<unsigned(const std::string&, const std::string&, const std::string&)> installPWA;
+
+    /**
+     * Stores PWA shortcut in DB
+     */
+    boost::signals2::signal<void(const unsigned&, const std::string&)> storePWAShortcut;
+
+    /**
+    * Push signal
+    */
+    boost::signals2::signal<std::string(const char*, const char*)> pushSignal;
+
+    /**
+     * Get PWA push instance id signal
+     */
+    boost::signals2::signal<std::string()> getPWAInstanceIDSignal;
+
+    /**
+     * Get PWA push data signal
+     */
+    boost::signals2::signal<std::string()> getPWADataSignal;
+
+    /**
+    * Store notification permission
+    */
+    boost::signals2::signal<unsigned(const std::string&, const bool&)> storePermission;
+
+    /**
+    * Get permission id
+    */
+    boost::signals2::signal<unsigned(const std::string&)> getPermissionId;
+
+    /**
+    * Update permission state
+    */
+    boost::signals2::signal<bool(const int&, const bool&)> updatePermissionState;
+
+    /**
+    * Get permissions map
+    */
+    boost::signals2::signal<std::map<std::string, bool>()> getPermissionsMap;
 };
 
 } /* end of basic_webengine */
index 513ab9c..d49237b 100755 (executable)
@@ -43,4 +43,4 @@ private:
 }
 }
 
-#endif
\ No newline at end of file
+#endif
index 6d446f7..99f5cef 100755 (executable)
@@ -36,6 +36,7 @@ WebConfirmation::WebConfirmation(ConfirmationType type, TabId tabId, const std::
     , m_tabId(tabId)
     , m_uri(uri)
     , m_message(msg)
+    , m_result(None)
 {
 }
 
@@ -45,6 +46,7 @@ WebConfirmation::~WebConfirmation()
 
 CertificateConfirmation::CertificateConfirmation(TabId tabId, const std::string & uri, const std::string & msg)
     : WebConfirmation(ConfirmationType::CertificateConfirmation, tabId, uri, msg)
+    , m_data(nullptr)
 {
 }
 
index 889fb42..983fd88 100755 (executable)
@@ -27,7 +27,7 @@ namespace tizen_browser {
 namespace basic_webengine {
 
 class WebConfirmation;
-typedef std::shared_ptr<WebConfirmation> WebConfirmationPtr;
+using WebConfirmationPtr = std::shared_ptr<WebConfirmation>;
 
 class WebConfirmation
 {
@@ -70,7 +70,7 @@ public:
     ConfirmationResult getResult() const {
         return m_result;
     }
-    void setResult(ConfirmationResult res) {
+    void setResult(const ConfirmationResult& res) {
         m_result = res;
     }
 
@@ -92,7 +92,7 @@ private:
 };
 
 class CertificateConfirmation;
-typedef std::shared_ptr<CertificateConfirmation> CertificateConfirmationPtr;
+using CertificateConfirmationPtr = std::shared_ptr<CertificateConfirmation>;
 
 class CertificateConfirmation : public WebConfirmation {
 public:
index 4382877..accf03d 100755 (executable)
@@ -30,6 +30,7 @@ enum class WebEngineSettings {
     LOAD_IMAGES,
     ENABLE_JAVASCRIPT,
     REMEMBER_FROM_DATA,
+    ENABLE_COOKIES,
     REMEMBER_PASSWORDS,
     AUTOFILL_PROFILE_DATA,
     SCRIPTS_CAN_OPEN_PAGES,
@@ -44,6 +45,7 @@ const std::map<WebEngineSettings, std::string> PARAMS_NAMES = {
     {WebEngineSettings::LOAD_IMAGES, "load_images"},
     {WebEngineSettings::ENABLE_JAVASCRIPT, "enable_javascript"},
     {WebEngineSettings::REMEMBER_FROM_DATA, "remember_form_data"},
+    {WebEngineSettings::ENABLE_COOKIES, "enable_cookies"},
     {WebEngineSettings::REMEMBER_PASSWORDS, "remember_passwords"},
     {WebEngineSettings::AUTOFILL_PROFILE_DATA, "autofill_profile_data"},
     {WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, "scripts_can_open_pages"},
index 5aa0196..ae2c225 100755 (executable)
@@ -21,6 +21,7 @@
 #include <functional>
 
 #include <boost/noncopyable.hpp>
+#include <app_control.h>
 
 #include "BrowserAssert.h"
 #include "Lifecycle.h"
@@ -31,6 +32,27 @@ namespace tizen_browser
 namespace base_ui
 {
 
+template <typename T>
+class PushPWAData
+{
+public:
+    PushPWAData() = default;
+    PushPWAData(const T& id, const T& push_data) :
+        instance_id(id),
+        data(push_data)
+    {}
+
+    T getInstanceId() const { return instance_id; }
+    T getData() const { return data; }
+    void setInstanceId(const T& id) { instance_id = id; }
+    void setData(const T& pwa_data) { data = pwa_data; }
+    bool dataExist() const { return (!instance_id.empty() && !data.empty()); }
+
+private:
+    std::string instance_id;
+    std::string data;
+};
+
 /**
  * @brief This class is placeholder for generic AbstractMainWindow object. It will
  * handle resource deallocation.
@@ -45,6 +67,7 @@ class AbstractMainWindow : public tizen_browser::core::AbstractService, boost::n
 public:
     AbstractMainWindow()
         : m_window()
+        , m_handle(nullptr)
     {}
 
     virtual int exec(
@@ -57,14 +80,19 @@ public:
      * \todo:
      * Extend API of main window placeholder class.
      */
-    void setMainWindow(T *rawPtr){ m_window=std::shared_ptr<T>(rawPtr);}
+    void setMainWindow(T *rawPtr){ m_window = std::shared_ptr<T>(rawPtr); }
+    void setHandle(app_control_h app_control){ m_handle = app_control; }
+    void setPushPWAData(const PushPWAData<std::string>& data){ m_pushPwaData = data; };
     virtual void destroyUI() { }
 
     virtual void suspend() = 0;
     virtual void resume() = 0;
+    virtual void languageChanged() = 0;
 
 protected:
     std::shared_ptr<T> m_window;
+    app_control_h m_handle;
+    PushPWAData<std::string> m_pushPwaData;
 };
 
 } /* end of namespace base_ui */
index 386b364..735fbd1 100755 (executable)
@@ -26,7 +26,6 @@ Action::Action()
     :m_enabled(true)
     ,m_checkable(false)
     ,m_checked(false)
-    ,m_iconVisibleInMenu(true)
 {
 
 }
@@ -35,7 +34,6 @@ Action::Action(const std::string& text)
     ,m_enabled(true)
     ,m_checkable(false)
     ,m_checked(false)
-    ,m_iconVisibleInMenu(true)
 {
 }
 
@@ -45,7 +43,6 @@ Action::Action(const std::string& icon, const std::string& text)
     ,m_enabled(true)
     ,m_checkable(false)
     ,m_checked(false)
-    ,m_iconVisibleInMenu(true)
 {
 }
 
@@ -60,7 +57,6 @@ Action::Action(const Action& other)
     ,m_enabled(other.m_enabled)
     ,m_checkable(other.m_checkable)
     ,m_checked(other.m_checked)
-    ,m_iconVisibleInMenu(other.m_iconVisibleInMenu)
 {
 
 }
@@ -140,11 +136,6 @@ bool Action::isEnabled() const
     return m_enabled;
 }
 
-bool Action::isIconVisibleInMenu() const
-{
-    return m_iconVisibleInMenu;
-}
-
 void Action::setCheckable(bool checkable)
 {
     m_checkable = checkable;
@@ -158,11 +149,6 @@ void Action::setEnabled(bool enabled)
        }
 }
 
-void Action::setIconVisibleInMenu(bool visible)
-{
-    m_iconVisibleInMenu = visible;
-}
-
 bool Action::isChecked() const
 {
     return m_checked;
index 2872b95..07696b0 100755 (executable)
@@ -82,7 +82,7 @@ class Action
 {
 public:
     Action();
-    Action(const std::string& text);
+    explicit Action(const std::string& text);
     Action(const std::string& icon, const std::string& text);
 
     Action(const Action& other);
@@ -105,12 +105,10 @@ public:
     bool isEnabled()const;
     bool isCheckable()const;
     bool isChecked()const;
-    bool isIconVisibleInMenu()const;
 
     void setEnabled(bool enabled);
     void setCheckable(bool checkable);
     void setChecked(bool checked);
-    void setIconVisibleInMenu(bool visible);
 
     /**
      * @brief Convenience function, switch state of checkable Actions.
@@ -154,10 +152,9 @@ private:
     bool m_enabled;  ///< Is action enabled.
     bool m_checkable; ///< Is action checkable.
     bool m_checked; ///< Is action checked, only checkable Actions can be checked. By default is false.
-    bool m_iconVisibleInMenu; ///<Shoud icon be displayed in menu.
 };
 
-typedef std::shared_ptr<Action> sharedAction;
+using sharedAction = std::shared_ptr<Action>;
 
 } /* end of namespace base_ui */
 } /* end of namespace tizen_browser */
index 5500f03..40b867c 100755 (executable)
@@ -32,11 +32,6 @@ void EAction::callbackFunction(void* data, Evas_Object *, void *)
     self->m_action->trigger();
 }
 
-sharedAction EAction::getAction()
-{
-    return m_action;
-}
-
 }
 
 }
index bb2b18b..0044b33 100755 (executable)
@@ -29,8 +29,7 @@ namespace base_ui
 class EAction
 {
 public:
-    EAction(sharedAction action);
-    sharedAction getAction();
+    explicit EAction(sharedAction action);
     static void callbackFunction(void *data, Evas_Object *obj, void *event_info);
 private:
     sharedAction m_action;
index 7624c08..fb99c90 100755 (executable)
@@ -27,13 +27,12 @@ namespace base_ui
 
 MenuButton * MenuButton::previousPopup = 0;
 
-MenuButton::MenuButton(std::shared_ptr< Evas_Object > mainWindow, Evas_Object* parentButton)
+MenuButton::MenuButton(std::shared_ptr<Evas_Object>& mainWindow, Evas_Object* parentButton)
     : m_ctxPopup(0)
     , m_window(mainWindow)
     , m_parentButton(parentButton)
     , m_isShown(false)
 {
-
 }
 
 MenuButton::~MenuButton()
@@ -94,7 +93,7 @@ void MenuButton::unbindFocus()
     elm_object_focus_next_object_set(m_parentButton, NULL, ELM_FOCUS_DOWN);
 }
 
-bool MenuButton::isShown()
+bool MenuButton::isShown() const
 {
     return m_isShown;
 }
index 1d9d977..0fe911a 100755 (executable)
@@ -40,7 +40,7 @@ public:
         unsigned int height;
     };
 
-    MenuButton(std::shared_ptr<Evas_Object> mainWindow, Evas_Object* parentButton);
+    MenuButton(std::shared_ptr<Evas_Object>& mainWindow, Evas_Object* parentButton);
     virtual ~MenuButton();
     void showPopup();
     void hidePopup();
@@ -78,7 +78,7 @@ public:
 
     virtual bool canBeDismissed();
 
-    bool isShown();
+    bool isShown() const;
 
 protected:
     static void dismissedCtxPopup(void *data, Evas_Object *obj, void *event_info);
index d2dc5d6..5bd9967 100755 (executable)
@@ -32,7 +32,14 @@ namespace base_ui{
 NaviframeWrapper::NaviframeWrapper(Evas_Object* parent)
     : m_parent(parent)
     , m_layout(nullptr)
+    , m_content(nullptr)
+    , m_prev_button(nullptr)
+    , m_left_button(nullptr)
+    , m_right_button(nullptr)
     , m_bottom_box(nullptr)
+    , m_prev_button_callback(nullptr)
+    , m_left_button_callback(nullptr)
+    , m_right_button_callback(nullptr)
 {
     M_ASSERT(m_parent);
     m_layout = elm_layout_add(m_parent);
@@ -72,11 +79,15 @@ void NaviframeWrapper::setTitle(std::string title)
 void NaviframeWrapper::unsetContent()
 {
     elm_object_part_content_unset(m_layout, "elm.swallow.content");
+    m_content = nullptr;
 }
 
 void NaviframeWrapper::setContent(Evas_Object *content)
 {
-    elm_object_part_content_set(m_layout, "elm.swallow.content", content);
+    if (m_content)
+        unsetContent();
+    m_content = content;
+    elm_object_part_content_set(m_layout, "elm.swallow.content", m_content);
 }
 
 void NaviframeWrapper::addPrevButton(Evas_Smart_Cb callback, void *data)
@@ -249,7 +260,7 @@ void NaviframeWrapper::addButtonToBottomBar(std::string text, Evas_Smart_Cb call
     elm_object_style_set(button, "bottom");
     evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    elm_object_part_text_set(button, "elm.text", text.c_str());
+    elm_object_translatable_part_text_set(button, "elm.text", text.c_str());
     elm_object_signal_emit(button, "elm,state,text,visible", "elm");
     evas_object_smart_callback_add(button, "clicked", callback, data);
 
@@ -271,7 +282,7 @@ void NaviframeWrapper::setEnableButtonInBottomBar(int number, bool enabled)
 void NaviframeWrapper::setBottomButtonText(int number, const std::string& text)
 {
     BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, text.c_str());
-    elm_object_part_text_set(m_bottom_buttons[number], "elm.text", text.c_str());
+    elm_object_translatable_part_text_set(m_bottom_buttons[number], "elm.text", text.c_str());
 }
 
 void NaviframeWrapper::setVisibleBottomBar(bool visible)
index 170df54..1fdbc93 100755 (executable)
@@ -38,7 +38,7 @@ namespace base_ui{
 class NaviframeWrapper
 {
 public:
-    NaviframeWrapper(Evas_Object *parent);
+    explicit NaviframeWrapper(Evas_Object *parent);
     ~NaviframeWrapper();
 
     void show() { evas_object_show(m_layout); }
@@ -76,6 +76,7 @@ public:
 protected:
     Evas_Object *m_parent;
     Evas_Object *m_layout;
+    Evas_Object *m_content;
     Evas_Object *m_prev_button;
     Evas_Object *m_left_button;
     Evas_Object *m_right_button;
index d815745..fe4f00f 100755 (executable)
@@ -40,6 +40,7 @@ namespace base_ui
        ,DELETE  = 1 << 10
        ,BACK_TO_SAFETY  = 1 << 11
        ,VIEW_CERTIFICATE  = 1 << 12
+       ,NEVER  = 1 << 13
     };
 
     static std::map<PopupButtons, std::string> createTranslations()
@@ -57,6 +58,7 @@ namespace base_ui
         m[DELETE] = "IDS_BR_SK_DELETE_ABB";
         m[BACK_TO_SAFETY] = "Back to safety";
         m[VIEW_CERTIFICATE] = "IDS_BR_OPT_VIEW_CERTIFICATE";
+        m[NEVER] = "Never";
 
         return m;
     }
index ba620f6..11dd99a 100755 (executable)
@@ -40,4 +40,7 @@
 
 #endif
 
+#define RETURN_NULL_ON_NO_DATA(data) if (!data) { BROWSER_LOGW("[%s:%d] No data", __PRETTY_FUNCTION__, __LINE__); return nullptr; }
+#define RETURN_ON_NO_DATA(data) if (!data) { BROWSER_LOGW("[%s:%d] No data", __PRETTY_FUNCTION__, __LINE__); return; }
+
 #endif /* __BROWSER_LOGGER_H__ */
index 00019d3..0c4e082 100755 (executable)
@@ -38,9 +38,8 @@ set(browserCore_SRCS
     Tools/BookmarkFolder.cpp
     Tools/QuickAccessItem.cpp
     Tools/CapiWebErrorCodes.cpp
-    Tools/FeedItem.cpp
-    Tools/FeedChannel.cpp
     Tools/StringTools.cpp
+    Tools/GengridWrapper.cpp
     )
 
 if(${PROFILE} MATCHES "mobile")
@@ -101,22 +100,6 @@ target_link_libraries(${BIN_NAME} ${Boost_LIBRARIES})
 
 if(TIZEN_BUILD)
     target_link_libraries(${BIN_NAME} ${tizen_pkgs_LDFLAGS} "-pie"
-    BookmarkFlowUI
-    BookmarkManagerUI
-    BookmarkService
-    CertificateService
-    FindOnPageUI
-    HistoryService
-    HistoryUI
-    PlatformInputManager
-    QuickAccess
-    SettingsUI
-    SimpleUI
-    StorageService
-    TabService
-    TabUI
-    WebEngineService
-    WebPageUI
 )
 endif(TIZEN_BUILD)
 
index 81b8a26..ea5d966 100755 (executable)
@@ -37,11 +37,14 @@ Config::Config()
     m_data["DB_SESSION"] = std::string(".browser.session.db");
     m_data["DB_CERTIFICATE"] = std::string(".browser.certificate.db");
     m_data["DB_QUICKACCESS"] = std::string(".browser.quickaccess.db");
+    m_data["DB_PWA"] = std::string(".browser.pwa.db");
 
+    m_data["URL_MAXCHAR"] = 4096;
+    m_data["ENTRY_MAXCHAR"] = 2048;
     m_data["TOOLTIP_DELAY"] = 0.05;       // time from mouse in to tooltip show
     m_data["TOOLTIP_HIDE_TIMEOUT"] = 2.0; // time from tooltip show to tooltip hide
-    m_data["TAB_LIMIT"] = 10;             // max number of open tabs
-    m_data["FAVORITES_LIMIT"] = 40;       // max number of added favorites
+    m_data["TAB_LIMIT"] = 20;             // max number of open tabs
+    m_data["QUICKACCESS_LIMIT"] = 100;    // max number of quickaccess elements
 
 #   include "ConfigValues.h"
 
@@ -52,19 +55,11 @@ Config::Config()
     m_keysValues[CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT] = 261;
     m_keysValues[CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH] = 319;
 
-    m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEMS_NUMBER_MAX] = 12;
-    m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX] = 5;
-    m_keysValues[CONFIG_KEY::URLHISTORYLIST_KEYWORD_LENGTH_MIN] = 3;
-#if PROFILE_MOBILE
-    m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT] = 74;
-#else
-    m_keysValues[CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT] = 82;
-#endif
-
     m_keysValues[CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA] = true;
+    m_keysValues[CONFIG_KEY::WEB_ENGINE_ENABLE_COOKIES] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA] = true;
     m_keysValues[CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES] = true;
@@ -74,9 +69,12 @@ Config::Config()
     m_keysValues[CONFIG_KEY::CACHE_IMAGE_VALUE] = 2048;
     m_keysValues[CONFIG_KEY::CACHE_INTERVAL_VALUE] = 32;
 
-    m_keysValues[CONFIG_KEY::SAVE_CONTENT_LOCATION] = base_ui::Translations::Device;
-    m_keysValues[CONFIG_KEY::DEFAULT_SEARCH_ENGINE] = base_ui::Translations::Google;
+    m_keysValues[CONFIG_KEY::SAVE_CONTENT_LOCATION] = base_ui::Translations::instance().Device;
+    m_keysValues[CONFIG_KEY::DEFAULT_SEARCH_ENGINE] = base_ui::Translations::instance().Google;
     m_keysValues[CONFIG_KEY::CURRENT_HOME_PAGE] = "http://www.samsung.com";
+
+    m_keysValues[CONFIG_KEY::URL_BAR_HEIGHT] = 108;
+    m_keysValues[CONFIG_KEY::BOTTOM_BAR_HEIGHT] = 96;
 }
 
 boost::any Config::get(const std::string& key)
@@ -94,10 +92,5 @@ void Config::set(const std::string & key, const boost::any & value)
     m_data[key] = value;
 }
 
-bool Config::isMobileProfile() const
-{
-    return boost::any_cast<std::string>(m_data.at("profile")) == MOBILE;
-}
-
 } /* end of namespace config */
 } /* end of namespace tizen_browser */
index 4d78d8c..59cafbe 100755 (executable)
@@ -60,10 +60,6 @@ public:
      */
     void set(const std::string & key, const boost::any & value);
 
-    /**
-     * @brief Check if current profile is mobile.
-     */
-    bool isMobileProfile() const;
 private:
     std::map<std::string, boost::any> m_data;
     std::map<CONFIG_KEY, boost::any> m_keysValues;
index 87f3280..763832e 100755 (executable)
@@ -23,14 +23,11 @@ enum class CONFIG_KEY
     HISTORY_TAB_SERVICE_THUMB_WIDTH,
     FAVORITESERVICE_THUMB_WIDTH,
     FAVORITESERVICE_THUMB_HEIGHT,
-    URLHISTORYLIST_ITEMS_NUMBER_MAX,
-    URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX,
-    URLHISTORYLIST_KEYWORD_LENGTH_MIN,
-    URLHISTORYLIST_ITEM_HEIGHT,
     WEB_ENGINE_PAGE_OVERVIEW,
     WEB_ENGINE_LOAD_IMAGES,
     WEB_ENGINE_ENABLE_JAVASCRIPT,
     WEB_ENGINE_REMEMBER_FROM_DATA,
+    WEB_ENGINE_ENABLE_COOKIES,
     WEB_ENGINE_REMEMBER_PASSWORDS,
     WEB_ENGINE_AUTOFILL_PROFILE_DATA,
     WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES,
@@ -40,7 +37,9 @@ enum class CONFIG_KEY
     CACHE_IMAGE_VALUE,
     SAVE_CONTENT_LOCATION,
     DEFAULT_SEARCH_ENGINE,
-    CURRENT_HOME_PAGE
+    CURRENT_HOME_PAGE,
+    URL_BAR_HEIGHT,
+    BOTTOM_BAR_HEIGHT
 };
 
 #endif /* CONFIGKEY_H_ */
index 7f5c405..fb69fff 100755 (executable)
@@ -60,106 +60,6 @@ Evas_Object *DownloadControl::brui_popup_add(Evas_Object *parent)
     return popup;
 }
 
-Eina_Bool DownloadControl::launch_streaming_player(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] uri = [%s] ", __PRETTY_FUNCTION__, __LINE__, uri);
-
-    bool vt_call_check = false;
-    if (app_manager_is_running(sec_vt_app, &vt_call_check) < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to get app running information", __PRETTY_FUNCTION__, __LINE__);
-        return EINA_FALSE;
-    }
-
-    if (vt_call_check) {
-        return EINA_FALSE;
-    }
-
-    app_control_h app_control = NULL;
-
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to create app_control handle", __PRETTY_FUNCTION__, __LINE__);
-        return EINA_FALSE;
-    }
-
-    if (!app_control) {
-        BROWSER_LOGE("[%s:%d] app_control handle is NULL", __PRETTY_FUNCTION__, __LINE__);
-        return EINA_FALSE;
-    }
-
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
-        BROWSER_LOGE("[%s:%d] app_control_set_operation failed", __PRETTY_FUNCTION__, __LINE__);
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-
-    if (app_control_set_mime(app_control, "video/") < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to app_control_set_mime", __PRETTY_FUNCTION__, __LINE__);
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-
-    if (app_control_add_extra_data(app_control, "path", uri) < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to set extra data", __PRETTY_FUNCTION__, __LINE__);
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to launch app_control operation", __PRETTY_FUNCTION__, __LINE__);
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
-void DownloadControl::__sdp_download_finished_cb(const char *file_path, void *data)
-{
-    BROWSER_LOGD("[%s:%d]file_path = [%s]", __PRETTY_FUNCTION__, __LINE__, file_path);
-    BROWSER_LOGD("[%s:%d]data = [%p] ", __PRETTY_FUNCTION__, __LINE__, data);
-}
-
-char *DownloadControl::get_file_size_str(const char *full_path)
-{
-    FILE *fp = NULL;
-    long size = 0;
-    double size_double = 0.0f;
-    char size_str[10 + 1] = {0, };
-    std::string size_text;
-
-    fp = fopen(full_path, "r");
-    if (!fp)
-        return NULL;
-    fseek(fp, 0L, SEEK_END);
-    size = ftell(fp);
-    fclose(fp);
-
-    if (size >= unit_size) {
-        size_double = (double)size / (double)unit_size;
-        if (size_double >= unit_size) {
-            size_double = (double)size_double / (double)unit_size;
-            if (size_double >= unit_size) {
-            size_double = (double)size_double / (double)unit_size;
-            snprintf(size_str, 10, "%.2f", size_double);
-            size_text = std::string(size_str) + std::string("GB");
-            } else {
-                snprintf(size_str, 10, "%.2f", size_double);
-                size_text = std::string(size_str) + std::string("MB");
-                }
-        } else {
-            snprintf(size_str, 10, "%.2f", size_double);
-            size_text = std::string(size_str) + std::string("KB");
-            }
-    } else {
-        snprintf(size_str, 10, "%u", (int)size);
-        size_text = std::string(size_str) + std::string("B");
-    }
-
-    return strdup(size_text.c_str());
-}
-
 Eina_Bool DownloadControl::_check_file_exist(const char *path)
 {
     BROWSER_LOGD("[%s:%d] path = [%s]", __PRETTY_FUNCTION__, __LINE__, path);
@@ -241,10 +141,8 @@ Eina_Bool DownloadControl::_update_contents_on_media_db(const char *path)
         return EINA_FALSE;
     }
 
-    int ret = -1;
     media_info_h info = NULL;
-
-    ret = media_content_connect();
+    int ret = media_content_connect();
     if (ret != MEDIA_CONTENT_ERROR_NONE) {
         BROWSER_LOGE("[%s:%d] Fail to media_content_connect", __PRETTY_FUNCTION__, __LINE__);
         return EINA_FALSE;
@@ -277,7 +175,7 @@ Eina_Bool DownloadControl::_get_download_path(const char *extension, char **full
 
     std::string storing_path;
 
-    if (!strcmp(getStorageType(),"0"))
+    if (getStorageType() == "0")
         storing_path = std::string(default_device_storage_path);
     else
         storing_path = std::string(defualt_sd_card_storage_path);
@@ -424,7 +322,7 @@ Eina_Bool DownloadControl::handle_data_scheme(const char *uri)
     return EINA_TRUE;
 }
 
-const char* DownloadControl::getStorageType()
+std::string DownloadControl::getStorageType()
 {
     int storage = 0;
     auto ret = preference_get_int("DefaultStorage", &storage);
@@ -432,7 +330,7 @@ const char* DownloadControl::getStorageType()
         BROWSER_LOGE("[%s:%d] Storage get error. Using default instead.", __PRETTY_FUNCTION__, __LINE__);
     std::ostringstream ss;
     ss << storage;
-    return ss.str().c_str();
+    return ss.str();
 }
 
 Eina_Bool DownloadControl::launch_download_app(const char *uri)
@@ -469,9 +367,9 @@ Eina_Bool DownloadControl::launch_download_app(const char *uri)
         return EINA_FALSE;
     }
 
-    const char* storage_type = getStorageType();
-    BROWSER_LOGE("[%s:%d] Storage type: %s", __PRETTY_FUNCTION__, __LINE__, storage_type);
-    if (app_control_add_extra_data(app_control, "default_storage", storage_type) < 0) {
+    std::string storage_type = getStorageType();
+    BROWSER_LOGE("[%s:%d] Storage type: %s", __PRETTY_FUNCTION__, __LINE__, storage_type.c_str());
+    if (app_control_add_extra_data(app_control, "default_storage", storage_type.c_str()) < 0) {
         BROWSER_LOGE("[%s:%d] Fail to set app_control extra data", __PRETTY_FUNCTION__, __LINE__);
         app_control_destroy(app_control);
         return EINA_FALSE;
@@ -493,10 +391,3 @@ Eina_Bool DownloadControl::launch_download_app(const char *uri)
     return EINA_TRUE;
 }
 
-void DownloadControl::show_noti_popup(const char *msg)
-{
-    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
-    notification_status_message_post(msg);
-    elm_access_say(msg);
-}
-
index f615594..844edab 100755 (executable)
@@ -100,30 +100,23 @@ public:
 
     void init(Evas_Object *mainWindow);
 
-    Eina_Bool launch_download_app(const char *uri);
-    Eina_Bool launch_streaming_player(const char *uri);
+    static Eina_Bool launch_download_app(const char *uri);
 
     /* If know the content type, use this method to handle it. */
     void handle_download_request(const char *uri, const char *content_type);
 
-    Eina_Bool handle_data_scheme(const char *uri);
+    static Eina_Bool handle_data_scheme(const char *uri);
 
 private:
-    /* String should be freed in caller side */
-    char *get_file_size_str(const char *full_path);
-
-    Eina_Bool _check_file_exist(const char *path);
-    Eina_Bool _save_file(const char *raw_data, const char *path);
-    Eina_Bool _update_contents_on_media_db(const char *path);   //
+    static Eina_Bool _check_file_exist(const char *path);
+    static Eina_Bool _save_file(const char *raw_data, const char *path);
+    static Eina_Bool _update_contents_on_media_db(const char *path);   //
 
     /* should be freed from caller side */
-    Eina_Bool _get_download_path(const char *extension, char **full_path, char **file_name);
-
-    static void __sdp_download_finished_cb(const char *file_path, void *data);
+    static Eina_Bool _get_download_path(const char *extension, char **full_path, char **file_name);
 
     Evas_Object *brui_popup_add(Evas_Object *parent);
-    void show_noti_popup(const char *msg);
-    const char* getStorageType();
+    static std::string getStorageType();
 
     std::string m_download_uri;
     Evas_Object *m_parent;
index 1948e12..12a1a79 100755 (executable)
@@ -32,12 +32,7 @@ static const std::string LEVEL_WARN_TAG = "Warning";
 static const std::string LEVEL_INFO_TAG = "Info";
 
 static const std::string LEVEL_TAG_ERROR = "TAG_ERROR";
-
-#ifdef LOG_LEVEL
-static const LoggerLevel globalLoggerLevel = Logger::parseLoggerLevel(LOG_LEVEL);
-#else
 static const LoggerLevel globalLoggerLevel = LoggerLevel::DEBUG;
-#endif
 
 Logger &Logger::getInstance() {
        static Logger instance;
@@ -60,8 +55,6 @@ LoggerLevel Logger::parseLoggerLevel(const char* levelString){
                        level = LoggerLevel::ERROR;
                } else if (strcmp(levelString, "WARN") == 0) {
                        level = LoggerLevel::WARN;
-               } else if (strcmp(levelString, "INFO") == 0) {
-                       level = LoggerLevel::INFO;
                } else {
                        level = LoggerLevel::INFO;
                }
index d53aa76..9bb4a60 100755 (executable)
@@ -107,7 +107,7 @@ public:
 
        //! set task name as a tag
        //! @see clearLogTag()
-       inline void setLogTag(const std::string tagName) {
+    inline void setLogTag(const std::string& tagName) {
                m_tag = tagName;
        }
 
index ce11275..3d6e269 100755 (executable)
@@ -28,9 +28,7 @@ namespace logger {
 
 std::string make_message(const char *fmt, ...)
 {
-       int n;
        int size = 512;   /* Guess we need no more than 512 bytes */
-       int old_size = 0;
        char *p, *np;
        va_list ap;
 
@@ -44,7 +42,7 @@ std::string make_message(const char *fmt, ...)
        {
                /* Try to print in the allocated space */
                va_start(ap, fmt);
-               n = vsnprintf(p, size, fmt, ap);
+               int n = vsnprintf(p, size, fmt, ap);
                va_end(ap);
 
                /* Check error code */
@@ -60,7 +58,7 @@ std::string make_message(const char *fmt, ...)
                        return retval;
                }
                /* Else try again with more space */
-               old_size = size;
+               int old_size = size;
                size = n + 1;       /* Precisely what is needed */
 
                try {
index f452d03..a05fc86 100755 (executable)
@@ -29,17 +29,16 @@ namespace logger
 TextLogger::TextLogger()
     : m_fb(nullptr)
     , m_output(nullptr)
+    , m_shallRelease(false)
 {
-       m_shallRelease = false;
-       m_filename.clear();
 }
 
 TextLogger::TextLogger(const char *name)
-    : m_fb(nullptr)
+    : m_filename(name)
+    , m_fb(nullptr)
     , m_output(nullptr)
+    , m_shallRelease(false)
 {
-       m_shallRelease = false;
-       m_filename = name;
 }
 
 TextLogger::~TextLogger()
index a2f503e..7fa6444 100755 (executable)
@@ -42,7 +42,7 @@ public:
        TextLogger();
        //! constructor used for logging plain text to file
        //! @param name filename to output
-       TextLogger(const char *name);
+    explicit TextLogger(const char *name);
        //! Destructor
        ~TextLogger();
        //! Initialize the output stream to stdout or file, depending on used constructor
index c745902..426ffa5 100755 (executable)
@@ -44,7 +44,7 @@ class EFailedAssertion
 {
     char const * _what;
 public:
-    EFailedAssertion(char const * const what_) : _what(what_) {}
+    explicit EFailedAssertion(char const * const what_) : _what(what_) {}
     EFailedAssertion(EFailedAssertion const & fa) : _what(fa._what) {}
     EFailedAssertion & operator = (EFailedAssertion const & fa) {
         if (&fa != this) {
index 0e3226b..ab9a9c5 100755 (executable)
@@ -42,7 +42,7 @@ void ServiceLib::load()
     int flags=0;
     flags = //RTLD_NOW     //resolve all symbols before dlopen returns
             RTLD_LAZY       //resolve sybols on ussage - fixes problem with cross linikg services.
-           | RTLD_GLOBAL; //export or sybols to be used by other libraries.
+            | RTLD_GLOBAL | RTLD_DEEPBIND; //export or sybols to be used by other libraries.
 
     pHnd = unique_library_ptr(dlopen(libraryFile.c_str(), flags), dlclose);
     if(!pHnd){
index a918eca..2bfca45 100755 (executable)
@@ -41,7 +41,7 @@ public:
      *
      * \param serviceName The name of service library.
      */
-    ServiceLoader(const std::string& serviceFileName);
+    explicit ServiceLoader(const std::string& serviceFileName);
     ~ServiceLoader();
 
     /**
index 8e365f6..2a780d7 100755 (executable)
@@ -33,7 +33,7 @@ public:
     ~ServiceLoaderPrivate();
 private:
     //only friend can crate me.
-    ServiceLoaderPrivate(const std::string& serviceName);
+    explicit ServiceLoaderPrivate(const std::string& serviceName);
 
     void loadService();
 
index 74ee523..b412533 100755 (executable)
@@ -26,58 +26,7 @@ namespace tizen_browser
 namespace core
 {
 
-ServiceManagerPrivate::ServiceManagerPrivate()
-{
-    findServiceLibs();
-    loadServiceLibs();
-}
-
-ServiceManagerPrivate::~ServiceManagerPrivate()
-{}
-
-void ServiceManagerPrivate::findServiceLibs() try
-{
-    boost::filesystem::path servicesDir(
-        boost::any_cast<std::string>(tizen_browser::config::Config::getInstance().get("services/dir")));
-    for (boost::filesystem::directory_iterator it(servicesDir);
-        it != boost::filesystem::directory_iterator();
-        ++it) {
-        boost::filesystem::path item(*it);
-        if (boost::filesystem::is_regular_file(item)) {
-            if ((item.extension().string() == ".so" ) &&
-                (item.filename().string().find("lib") != std::string::npos)) {
-                try {
-                    servicesLoaderMap[item.string()] = std::make_shared<ServiceLoader>(item.string());
-                } catch (std::runtime_error & e) {
-                    BROWSER_LOGD(e.what() );
-                }
-            }
-        }
-    }
-} catch (const boost::filesystem::filesystem_error& ex) {
-    BROWSER_LOGD(ex.what());
-}
-
-void ServiceManagerPrivate::loadServiceLibs()
-{
-    /// TODO make sure that librareis are founded.
-    for (auto slm : servicesLoaderMap) {
-        try {
-            auto factory = slm.second->getFactory();
-            servicesMap[factory->serviceName()] = factory;//do not write to map if there's an error.
-        } catch (const std::runtime_error& e) {
-            BROWSER_LOGD(e.what() );
-        }
-    }
-}
-
-void ServiceManagerPrivate::enumerateServices(){
-    for (auto sm : servicesMap)
-        BROWSER_LOGD("%s:%p", sm.first.c_str(), sm.second);
-}
-
 ServiceManager::ServiceManager()
-    :d(new ServiceManagerPrivate)
 {}
 
 ServiceManager& ServiceManager::getInstance(void)
@@ -86,17 +35,21 @@ ServiceManager& ServiceManager::getInstance(void)
     return instance;
 }
 
-std::shared_ptr< AbstractService > ServiceManager::getService(const std::string& service)
+std::shared_ptr< AbstractService > ServiceManager::getService(const std::string& service, const std::string& fileName)
 {
     static std::unordered_map<std::string, std::shared_ptr<AbstractService>> cache;
     static std::mutex mut;
 
-
     std::lock_guard<std::mutex> hold(mut);
     auto sp = cache[service];
 
-    if (!sp)
-        cache[service] = sp = std::shared_ptr<AbstractService>(d->servicesMap[service]->create());
+    if (!sp) {
+        boost::filesystem::path servicePath(
+            boost::any_cast<std::string>(config::Config::getInstance().get("services/dir")));
+        servicePath /= fileName;
+        auto factory = std::make_unique<ServiceLoader>(servicePath.string())->getFactory();
+        cache[service] = sp = std::shared_ptr<AbstractService>(factory->create());
+    }
     return sp;
 }
 
index b9e6106..fbb2081 100755 (executable)
@@ -82,9 +82,6 @@ namespace tizen_browser
 namespace core
 {
 
-
-class ServiceManagerPrivate;
-
 /**
  * \brief Managing services.
  *
@@ -114,7 +111,7 @@ public:
      * @param args Currently no used, may by omitted.
      * @return std::shared_ptr< tizen_browser::core::AbstractService >
      */
-    std::shared_ptr<AbstractService> getService(const std::string& service);
+    std::shared_ptr<AbstractService> getService(const std::string& service, const std::string& fileName);
 
 private:
     /**
@@ -122,8 +119,6 @@ private:
      * cretate this object by calling ServiceManager::getInstance!!!
      */
     ServiceManager();
-
-    std::unique_ptr<ServiceManagerPrivate> d;
 };
 
 } /* end of namespace core */
index 8faeaae..7793592 100755 (executable)
@@ -43,11 +43,6 @@ private:
      */
     void loadServiceLibs();
 
-    /**
-     * debug function to display all founded and loaded services.
-     */
-    void enumerateServices();/// write names of all services
-
     //ServiceFactory is a static ServiceFactory member - no need to delete it manually (or by smart_ptr) by calling delete or free on it
     std::unordered_map<std::string, ServiceFactory*> servicesMap; /// "com.class.interface":&ServiceFactory
     std::unordered_map<std::string, std::shared_ptr<ServiceLoader>>  servicesLoaderMap; /// "path/to/library.so": &service_factory_interface
index ea1a048..ebbf9e3 100755 (executable)
@@ -17,6 +17,7 @@
 #ifndef __SERVICE_MACROS_H__
 #define __SERVICE_MACROS_H__
 
+#include "ServiceFactory.h"
 /**
  * @def BROWSER_EXPORT
  * @ingroup BROWSERMacros
index 6df45ad..c752582 100755 (executable)
@@ -55,6 +55,7 @@ Blob::Blob(const void* ptr, unsigned long long length) :
 
 Blob::~Blob()
 {
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     free();
 }
 
@@ -74,8 +75,10 @@ Blob & Blob::operator=(Blob && other)
 }
 
 /*private*/
-Blob & Blob::operator=(const Blob &)
+Blob & Blob::operator=(const Blob &b)
 {
+    this->m_data = b.m_data;
+    this->m_length = b.m_length;
     return *this;
 }
 
@@ -102,21 +105,11 @@ void Blob::free()
     this->m_length = 0;
 }
 
-int Blob::getLength()
+int Blob::getLength() const
 {
     return this->m_length;
 }
 
-int Blob::transferData(void ** data) {
-       int len = this->m_length;
-       *data = m_data;
-
-       m_length = 0;
-       m_data = NULL;
-
-       return len;
-}
-
 
 }
 }
index 2777521..af1ab9d 100755 (executable)
@@ -33,8 +33,7 @@ public:
     const void * getData() const;
     void setData(void* ptr, unsigned long long length);
     void free();
-    int getLength();
-    int transferData(void ** data);
+    int getLength() const;
 
 private:
     Blob(const Blob &);
index 0ca1177..ad0854f 100755 (executable)
@@ -59,8 +59,9 @@ BookmarkItem::BookmarkItem(
 , m_order(order)
 , m_has_thumbnail(false)
 , m_has_favicon(false)
+, m_is_folder(false)
+, m_is_editable(true)
 {
-
 }
 
 BookmarkItem::~BookmarkItem()
index 0896cbd..d3dc304 100755 (executable)
@@ -55,9 +55,6 @@ public:
     void setId(int id) { m_saved_id = id; }
     int getId() const { return m_saved_id; }
 
-    //TODO: create bool with a value when database is updated
-    bool getPrivate() const { return false; }
-
     void setThumbnail(std::shared_ptr<tools::BrowserImage> thumbnail);
     std::shared_ptr<tizen_browser::tools::BrowserImage> getThumbnail() const ;
 
index df9f027..1d34c2c 100755 (executable)
@@ -77,7 +77,15 @@ BrowserImage::BrowserImage(const BrowserImage& copy) :
     setData(copy.getData(), copy.isSharedData(), copy.getImageType());
 }
 
-
+BrowserImage& BrowserImage::operator=(const BrowserImage& copy)
+{
+    m_width = copy.getWidth();
+    m_height = copy.getHeight();
+    m_dataSize = copy.getSize();
+    m_colorSpace = copy.getColorSpace();
+    setData(copy.getData(), copy.isSharedData(), copy.getImageType());
+    return *this;
+}
 
 void BrowserImage::setData(void* data, bool isSharedData, ImageType type)
 {
index 0221462..62771d9 100755 (executable)
@@ -36,9 +36,10 @@ class BrowserImage
 public:
     BrowserImage();
     BrowserImage(const int& w, const int& h, const long& s);
-    BrowserImage(Evas_Object* image);
+    explicit BrowserImage(Evas_Object* image);
     BrowserImage(const BrowserImage& copy);
     ~BrowserImage();
+    BrowserImage& operator=(const BrowserImage&);
 
     /**
      * Sets image raw data pointer, type and memory share
index d1dc97e..90b1cd9 100755 (executable)
  * Created on: May, 2014
  *     Author: k.dobkowski
  */
+#include <boost/any.hpp>
+#include <boost/format.hpp>
 #include <image_util.h>
 #include <BrowserAssert.h>
+#include <notification.h>
 
+#include "app_i18n.h"
 #include "browser_config.h"
 #include "BrowserLogger.h"
+#include "Config.h"
 #include "EflTools.h"
-#include "Elementary.h"
-
 
 namespace tizen_browser {
 namespace tools {
@@ -49,8 +52,7 @@ std::unique_ptr<Blob> getBlobPNG(std::shared_ptr<BrowserImage> browserImage)
         BROWSER_LOGW("Cannot create BlobPNG");
         return nullptr;
     }
-    std::unique_ptr<Blob> image(new Blob(mem_buffer, length));
-    return std::move(image);
+    return std::make_unique<Blob>(mem_buffer, length);
 }
 
 void* getBlobPNG(int width, int height, void* image_data, unsigned long long* length)
@@ -63,36 +65,45 @@ void* getBlobPNG(int width, int height, void* image_data, unsigned long long* le
 
     if (image_util_encode_create(IMAGE_UTIL_PNG, &handler) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_create: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
         return nullptr;
     }
 
     if (image_util_encode_set_png_compression(handler, IMAGE_UTIL_PNG_COMPRESSION_6) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_set_png_compression: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
         return nullptr;
     }
 
     if (image_util_encode_set_resolution(handler, width, height) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_set_resolution: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
         return nullptr;
     }
 
     if (image_util_encode_set_input_buffer(handler, (const unsigned char*) image_data) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_set_input_buffer: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
         return nullptr;
     }
 
     if (image_util_encode_set_output_buffer(handler, &outputBuffer) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_set_output_buffer: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
+        free(outputBuffer);
         return nullptr;
     }
 
     if (image_util_encode_run(handler, length) < 0) {
         BROWSER_LOGW("[%s:%d] image_util_encode_run: error!", __PRETTY_FUNCTION__, __LINE__);
+        image_util_encode_destroy(handler);
+        free(outputBuffer);
         return nullptr;
     }
 
     if (image_util_encode_destroy(handler) < 0) {
         BROWSER_LOGW("[%s:%d] mage_util_encode_destroy: error!", __PRETTY_FUNCTION__, __LINE__);
+        free(outputBuffer);
         return nullptr;
     }
     return outputBuffer;
@@ -104,24 +115,36 @@ void setExpandHints(Evas_Object* toSet)
     evas_object_size_hint_align_set(toSet, EVAS_HINT_FILL, EVAS_HINT_FILL);
 }
 
-bool pointInObject(Evas_Object* object, int px, int py)
+void createToastPopup(const char* text)
+{
+    notification_status_message_post(text);
+}
+
+static void _entry_maxlength_reached(void* data, Evas_Object*, void*)
 {
-    if (!object) {
-        BROWSER_LOGE("@@ [%s:%d] null object", __func__, __LINE__);
-        return false;
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    if (!data) {
+        BROWSER_LOGW("[%s:%d] data is null", __PRETTY_FUNCTION__, __LINE__);
+        return;
     }
-    Evas_Coord x, y, w, h;
-    evas_object_geometry_get(object, &x, &y, &w, &h);
-    return (px >= x && px <= x + w && py >= y && py <= y + h);
+    Elm_Entry_Filter_Limit_Size* limitFilterData = static_cast<Elm_Entry_Filter_Limit_Size*>(data);
+    createToastPopup((boost::format(_("IDS_BR_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_REACHED"))
+        % limitFilterData->max_char_count).str().c_str());
 }
 
-Evas_Object* createToastPopup(Evas_Object* parent, double timeout, const char* text)
+Elm_Entry_Filter_Limit_Size* setEntryLimit(Evas_Object* entry, bool standard_entry)
 {
-    auto toast(elm_popup_add(parent));
-    elm_object_style_set(toast, "toast");
-    elm_popup_timeout_set(toast, timeout);
-    elm_object_text_set(toast, text);
-    return toast;
+    Elm_Entry_Filter_Limit_Size* limitFilterData =
+        static_cast<Elm_Entry_Filter_Limit_Size*>(calloc(1, sizeof(Elm_Entry_Filter_Limit_Size)));
+    limitFilterData->max_char_count = boost::any_cast<int>(config::Config::getInstance().get(
+        standard_entry ? "ENTRY_MAXCHAR" : "URL_MAXCHAR"));
+    limitFilterData->max_byte_count = 0;
+
+    elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, limitFilterData);
+
+    evas_object_smart_callback_add(entry, "maxlength,reached", _entry_maxlength_reached, limitFilterData);
+
+    return limitFilterData;
 }
 
 } /* end of EflTools */
index 31220a7..e727261 100755 (executable)
 #ifndef __EFL_TOOLS_H__
 #define __EFL_TOOLS_H__ 1
 
+#include <Elementary.h>
 #include <Evas.h>
+#include <map>
+#include <memory>
 #include "BrowserImage.h"
 #include "Blob.h"
 
+
 // counts size exactly as is in Z3 device
 #define Z3_SCALE_SIZE(x) (int)(((double)(x) * elm_config_scale_get()) / 2.6)
 
@@ -37,6 +41,7 @@
 template <typename T>
 static void _genlist_del(void* data, Evas_Object*)
 {
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         auto itemData = static_cast<T*>(data);
         delete itemData;
@@ -46,18 +51,14 @@ static void _genlist_del(void* data, Evas_Object*)
 namespace tizen_browser {
 namespace tools {
 namespace EflTools {
-
     std::unique_ptr<Blob> getBlobPNG(BrowserImagePtr browserImage);
     void* getBlobPNG(int width, int height, void * image_data, unsigned long long* length);
 
     void setExpandHints(Evas_Object* toSet);
 
-    /**
-     * Check if coordinates are inside of a given object.
-     */
-    bool pointInObject(Evas_Object* object, int x, int y);
+    void createToastPopup(const char* text);
 
-    Evas_Object* createToastPopup(Evas_Object* parent, double timeout, const char* text);
+    Elm_Entry_Filter_Limit_Size* setEntryLimit(Evas_Object* entry, bool standard_entry = true);
 } /* end of namespace EflTools */
 } /* end of namespace tools */
 } /* end of namespace tizen_browser */
diff --git a/core/Tools/FeedChannel.cpp b/core/Tools/FeedChannel.cpp
deleted file mode 100755 (executable)
index df9d94d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#include "FeedChannel.h"
-
-namespace tizen_browser{
-namespace tools{
-
-std::string FeedChannel::getAuthor() const {
-    return m_author;
-}
-
-void FeedChannel::setAuthor(const std::string& author) {
-    this->m_author = author;
-}
-
-std::string FeedChannel::getDescription() const {
-    return m_description;
-}
-
-void FeedChannel::setDescription(const std::string& description) {
-    this->m_description = description;
-}
-
-FeedItemList FeedChannel::getItems() const {
-    return m_items;
-}
-
-void FeedChannel::setItems(const FeedItemList& items) {
-    this->m_items = items;
-}
-
-void FeedChannel::addItem(std::shared_ptr<FeedItem> item)
-{
-    this->m_items.push_back(item);
-}
-
-boost::posix_time::ptime FeedChannel::getLastBuildDate() const {
-    return m_lastBuildDate;
-}
-
-void FeedChannel::setLastBuildDate(const boost::posix_time::ptime& lastBuildDate) {
-    this->m_lastBuildDate = lastBuildDate;
-}
-
-std::string FeedChannel::getTitle() const {
-    return m_title;
-}
-
-void FeedChannel::setTitle(const std::string& title) {
-    this->m_title = title;
-}
-
-std::string FeedChannel::getUrl() const {
-    return m_url;
-}
-
-void FeedChannel::setUrl(const std::string& url) {
-    this->m_url = url;
-}
-
-std::string FeedChannel::getRealUrl() const {
-    return m_realUrl;
-}
-
-void FeedChannel::setRealUrl(const std::string& url) {
-    this->m_realUrl = url;
-}
-
-std::shared_ptr<BrowserImage> FeedChannel::getFavicon()
-{
-    return m_favicon;
-}
-
-void FeedChannel::setFavicon(std::shared_ptr<BrowserImage> favicon)
-{
-    this->m_favicon = favicon;
-}
-
-}
-}
diff --git a/core/Tools/FeedChannel.h b/core/Tools/FeedChannel.h
deleted file mode 100755 (executable)
index a6b496b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef FEEDCHANNEL_H
-#define FEEDCHANNEL_H
-
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <string>
-#include <memory>
-#include <list>
-
-#include "FeedItem.h"
-#include "EflTools.h"
-
-namespace tizen_browser {
-namespace tools {
-
-class FeedChannel
-{
-public:
-    std::string getAuthor() const;
-    void setAuthor(const std::string& author);
-    std::string getDescription() const;
-    void setDescription(const std::string& description);
-    tools::FeedItemList getItems() const;
-    void setItems(const tools::FeedItemList& items);
-    void addItem(std::shared_ptr<tools::FeedItem> item);
-    boost::posix_time::ptime getLastBuildDate() const;
-    void setLastBuildDate(const boost::posix_time::ptime& lastBuildDate);
-    std::string getTitle() const;
-    void setTitle(const std::string& title);
-    std::string getUrl() const;
-    void setUrl(const std::string& url);
-    std::string getRealUrl() const;
-    void setRealUrl(const std::string& url);
-    std::shared_ptr<BrowserImage> getFavicon();
-    void setFavicon(std::shared_ptr<BrowserImage>);
-
-private:
-    std::string m_title;
-    std::string m_description;
-    std::string m_url;
-    std::string m_realUrl;
-    boost::posix_time::ptime m_lastBuildDate;
-    std::string m_author;
-    tools::FeedItemList m_items;
-    std::shared_ptr<BrowserImage> m_favicon;
-};
-
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>> FeedChannelList;
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>>::iterator FeedChannelListIter;
-typedef std::vector<std::shared_ptr<tizen_browser::tools::FeedChannel>>::const_iterator FeedChannelListConstIter;
-
-}
-}
-
-
-
-#endif // FEEDCHANNEL_H
diff --git a/core/Tools/FeedItem.cpp b/core/Tools/FeedItem.cpp
deleted file mode 100755 (executable)
index d978c57..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "FeedItem.h"
-
-namespace tizen_browser
-{
-namespace tools
-{
-
-std::string FeedItem::getDescription() const {
-    return m_description;
-}
-
-void FeedItem::setDescription(const std::string& description) {
-    this->m_description = description;
-}
-
-int FeedItem::getId() const {
-    return m_id;
-}
-
-void FeedItem::setId(int id) {
-    this->m_id = id;
-}
-
-boost::posix_time::ptime FeedItem::getPubDate() const {
-    return m_pubDate;
-}
-
-void FeedItem::setPubDate(const boost::posix_time::ptime& pubDate) {
-    this->m_pubDate = pubDate;
-}
-
-std::string FeedItem::getTitle() const {
-    return m_title;
-}
-
-void FeedItem::setTitle(const std::string& title) {
-    this->m_title = title;
-}
-
-std::string FeedItem::getUrl() const {
-    return m_url;
-}
-
-void FeedItem::setUrl(const std::string& url) {
-    this->m_url = url;
-}
-
-std::shared_ptr<BrowserImage> FeedItem::getFavicon()
-{
-    return m_favicon;
-}
-
-void FeedItem::setFavicon(std::shared_ptr<BrowserImage> favicon)
-{
-    this->m_favicon = favicon;
-}
-
-}
-}
diff --git a/core/Tools/FeedItem.h b/core/Tools/FeedItem.h
deleted file mode 100755 (executable)
index 6be57be..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef FEEDITEM_H
-#define FEEDITEM_H
-
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <EflTools.h>
-#include <string>
-#include <list>
-
-namespace tizen_browser
-{
-namespace tools
-{
-
-class FeedItem
-{
-public:
-    std::string getDescription() const;
-    void setDescription(const std::string& description);
-    int getId() const;
-    void setId(int id);
-    boost::posix_time::ptime getPubDate() const;
-    void setPubDate(const boost::posix_time::ptime& pubDate);
-    std::string getTitle() const;
-    void setTitle(const std::string& title);
-    std::string getUrl() const;
-    void setUrl(const std::string& url);
-    std::shared_ptr<BrowserImage> getFavicon();
-    void setFavicon(std::shared_ptr<BrowserImage>);
-private:
-    std::string m_title;
-    std::string m_url;
-    int m_id;
-    boost::posix_time::ptime m_pubDate;
-    std::string m_description;
-    std::shared_ptr<BrowserImage> m_favicon;
-};
-
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>> FeedItemList;
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>>::iterator FeedItemListIter;
-typedef std::list<std::shared_ptr<tizen_browser::tools::FeedItem>>::const_iterator FeedItemListConstIter;
-
-}
-}
-
-#endif // FEEDITEM_H
diff --git a/core/Tools/FocusManager.cpp b/core/Tools/FocusManager.cpp
deleted file mode 100755 (executable)
index 3d1c7b8..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "FocusManager.h"
-#include "BrowserLogger.h"
-
-FocusManager::FocusManager()
-    : _rowTracker(0)
-    , _prevRowTracker(0)
-    , handlerDown(nullptr)
-    , _gen(nullptr)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-}
-
-FocusManager::~FocusManager()
-{
-    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
-}
-
-void FocusManager::startFocusManager(Evas_Object* gengrid)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    handlerDown = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_down_cb, this);
-    if (gengrid)
-        evas_object_smart_callback_add(gengrid, "item,focused", _row_tracker, this);
-}
-
-void FocusManager::stopFocusManager()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    verticalFocusVector.clear();
-    ecore_event_handler_del(handlerDown);
-}
-Eina_Bool FocusManager::_key_down_cb(void* data, int, void* event)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    FocusManager* fm = static_cast<FocusManager*>(data);
-    Ecore_Event_Key* ev = static_cast<Ecore_Event_Key*>(event);
-    const std::string keyName = ev->keyname;
-
-    if (!keyName.compare("Up")) {
-        BROWSER_LOGD("[%s:%d] Keyname: %s", __PRETTY_FUNCTION__, __LINE__, ev->keyname);
-        if (fm->_prevRowTracker) {
-            fm->_prevRowTracker = 0;
-            return EINA_FALSE;
-        }
-        if (fm->focusListIterator == fm->verticalFocusVector.begin()) {
-            elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
-            return EINA_FALSE;
-        }
-        --(fm->focusListIterator);
-        if (elm_object_disabled_get(*(fm->focusListIterator)) == EINA_TRUE)
-            --(fm->focusListIterator);
-        elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
-        return EINA_TRUE;
-    }
-    else if (!keyName.compare("Down")) {
-        BROWSER_LOGD("[%s:%d] Keyname: %s", __PRETTY_FUNCTION__, __LINE__, ev->keyname);
-        if (fm->focusListIterator == fm->verticalFocusVector.end()-1) {
-            elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
-            return EINA_FALSE;
-        }
-        ++(fm->focusListIterator);
-        if (elm_object_disabled_get(*(fm->focusListIterator)) == EINA_TRUE)
-            ++(fm->focusListIterator);
-        elm_object_focus_set(*(fm->focusListIterator), EINA_TRUE);
-        return EINA_TRUE;
-    }
-    return EINA_FALSE;
-}
-
-void FocusManager::_row_tracker(void* data, Evas_Object*, void* event)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    FocusManager* fm = static_cast<FocusManager*>(data);
-    Elm_Object_Item* it = static_cast<Elm_Object_Item*>(event);
-    unsigned int x, y;
-    elm_gengrid_item_pos_get(it, &x, &y);
-    fm->_prevRowTracker = fm->_rowTracker;
-    fm->_rowTracker = y;
-    BROWSER_LOGD("[%s:%d] prev Y:%d, Actual Y:%d", __PRETTY_FUNCTION__, __LINE__, fm->_prevRowTracker, fm->_rowTracker);
-}
-
-void FocusManager::addItem(Evas_Object* it)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    verticalFocusVector.push_back(it);
-}
-
-void FocusManager::setIterator()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    focusListIterator = verticalFocusVector.begin();
-}
diff --git a/core/Tools/FocusManager.h b/core/Tools/FocusManager.h
deleted file mode 100755 (executable)
index 1d4b7db..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FOCUSMANAGER_H
-#define FOCUSMANAGER_H
-
-#include <Evas.h>
-#include <Ecore.h>
-#include <Elementary.h>
-#include <vector>
-
-class FocusManager
-{
-public:
-    FocusManager();
-    ~FocusManager();
-
-    /**
-     *  This function runs FocusManager. Set the gengrid as the parameter of this function to run _raw_tracker. If the view does not have gengrid, set nullptr.
-     *  Before you call this function, add Evas_Object elements to verticalFocusVector using addItem(Evas_Object*) function and set focusListIterator using setIterator() function.
-     */
-    void startFocusManager(Evas_Object*);
-
-    /**
-     *  This function stops FocusManager.
-     */
-    void stopFocusManager();
-
-    /**
-     *  Use this function to add Evas_Object to FocusManager. The order matters.
-     */
-    void addItem(Evas_Object*);
-
-    /**
-     *  Use this function set focusListIterator. Call it after adding items. This function sets iterator at the beginnig of the verticalFocusVector.
-     */
-    void setIterator();
-private:
-    static Eina_Bool _key_down_cb(void *data, int type, void *event);
-    static void _row_tracker(void *data, Evas_Object *obj, void *event);
-
-    std::vector<Evas_Object*> verticalFocusVector;
-    std::vector<Evas_Object*>::iterator focusListIterator;
-    unsigned int _rowTracker, _prevRowTracker;
-    Ecore_Event_Handler* handlerDown;
-    Evas_Object* _gen;
-};
-
-#endif // FOCUSMANAGER_H
-
old mode 100644 (file)
new mode 100755 (executable)
index 0f465dc..2719e10
@@ -27,6 +27,36 @@ namespace tizen_browser
 {
 namespace tools
 {
+    struct Color {
+        Color() : r(240), g(240), b(240), a(255) {};
+        Color (int r, int g, int b, int a) : r(r), g(g), b(b), a(a) {};
+        Color(const Color& b) {
+            this->r = b.r;
+            this->g = b.g;
+            this->b = b.b;
+            this->a = b.a;
+        }
+        ~Color() = default;
+        bool operator==(const Color& b) const {
+            if (this->r != b.r) return false;
+            if (this->g != b.g) return false;
+            if (this->b != b.b) return false;
+            if (this->a != b.a) return false;
+            return true;
+        };
+        bool operator!=(const Color& b) const {
+            return !(*this == b);
+        };
+        Color& operator=(const Color& b) {
+            this->r = b.r;
+            this->g = b.g;
+            this->b = b.b;
+            this->a = b.a;
+            return *this;
+        };
+        int r, g, b, a;
+    };
+
     static const int SUFFIX_CHAR_DEL = 1;
     static const char * PROTCOL_BEGIN = "://";
     static const char END_SLASH = '/';
diff --git a/core/Tools/GengridWrapper.cpp b/core/Tools/GengridWrapper.cpp
new file mode 100755 (executable)
index 0000000..2aec83b
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "GengridWrapper.h"
+
+#include <cassert>
+
+#include "app_i18n.h"
+#include "BrowserLogger.h"
+#include "Tools/EflTools.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+GengridWrapper::GengridWrapper()
+    : m_gengrid(nullptr)
+    , m_parent(nullptr)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+GengridWrapper::GengridWrapper(Evas_Object* parent)
+    : m_gengrid(nullptr)
+    , m_parent(parent)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    assert(parent);
+    create();
+}
+
+GengridWrapper::~GengridWrapper()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    unregisterCallbacks();
+    clear();
+}
+
+void GengridWrapper::registerCallback(const std::string& key, Evas_Smart_Cb func, void* data)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    evas_object_smart_callback_add(m_gengrid, key.c_str(), func, data);
+    m_callbacks[key] = func;
+}
+
+void GengridWrapper::unregisterCallbacks()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    for (auto& el : m_callbacks)
+        evas_object_smart_callback_del(m_gengrid, el.first.c_str(), el.second);
+    m_callbacks.clear();
+}
+
+void GengridWrapper::deleteItem(Elm_Widget_Item* item)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_object_item_del(item);
+    elm_gengrid_realized_items_update(m_gengrid);
+}
+
+void GengridWrapper::deleteSelectedItem()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    deleteItem(elm_gengrid_selected_item_get(m_gengrid));
+}
+
+void GengridWrapper::updateRealized()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_gengrid_realized_items_update(m_gengrid);
+}
+
+void GengridWrapper::init(Evas_Object* parent)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    assert(parent);
+    m_parent = parent;
+    create();
+}
+void GengridWrapper::show()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    evas_object_show(m_gengrid);
+}
+
+void GengridWrapper::hide()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    evas_object_hide(m_gengrid);
+}
+
+void GengridWrapper::clear()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_gengrid_clear(m_gengrid);
+}
+
+void GengridWrapper::reorder(const bool& flag)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_gengrid_reorder_mode_set(m_gengrid, flag ? EINA_TRUE : EINA_FALSE);
+}
+
+Evas_Object* GengridWrapper::getContent()
+{
+    if (!m_gengrid)
+        create();
+    return m_gengrid;
+}
+
+void GengridWrapper::itemSizeSet(const int& width, const int& height)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    elm_gengrid_item_size_set(m_gengrid, width, height);
+}
+
+Elm_Widget_Item* GengridWrapper::append(
+    const Elm_Gengrid_Item_Class* itc,
+    const void* data,
+    Evas_Smart_Cb func,
+    const void* func_data)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    return elm_gengrid_item_append(m_gengrid, itc, data, func, func_data);
+}
+
+Elm_Widget_Item* GengridWrapper::insertBefore(
+    const Elm_Gengrid_Item_Class* itc,
+    const void* data,
+    Elm_Widget_Item* relative,
+    Evas_Smart_Cb func,
+    const void *func_data)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    return elm_gengrid_item_insert_before(m_gengrid, itc, data, relative, func, func_data);
+}
+
+}
+}
diff --git a/core/Tools/GengridWrapper.h b/core/Tools/GengridWrapper.h
new file mode 100755 (executable)
index 0000000..30922f7
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef GENGRID_WRAPPER_H
+#define GENGRID_WRAPPER_H
+
+#include <Elementary.h>
+#include <Evas.h>
+#include <string>
+#include <map>
+
+namespace tizen_browser{
+namespace base_ui{
+
+class GengridWrapper
+{
+public:
+    GengridWrapper();
+    GengridWrapper(Evas_Object* parent);
+    ~GengridWrapper();
+    virtual void create() {};
+
+    void init(Evas_Object* parent);
+    void clear();
+    void show();
+    void hide();
+    void registerCallback(const std::string& key, Evas_Smart_Cb func, void* data);
+    void unregisterCallbacks();
+    void deleteItem(Elm_Widget_Item *item);
+    void deleteSelectedItem();
+    void updateRealized();
+    void reorder(const bool&);
+    Evas_Object* getContent();
+    Evas_Object* operator()() { return getContent(); }
+    unsigned count() { return elm_gengrid_items_count(getContent()); }
+    void itemSizeSet(const int& width, const int& height);
+    Elm_Widget_Item* append(
+        const Elm_Gengrid_Item_Class* itc,
+        const void* data,
+        Evas_Smart_Cb func,
+        const void* func_data);
+    Elm_Widget_Item* insertBefore(
+        const Elm_Gengrid_Item_Class* itc,
+        const void* data,
+        Elm_Widget_Item* relative,
+        Evas_Smart_Cb func,
+        const void *func_data);
+protected:
+    Evas_Object* m_gengrid;
+    Evas_Object* m_parent;
+    std::map<std::string, Evas_Smart_Cb> m_callbacks;
+};
+
+}
+}
+
+#endif // GENGRID_WRAPPER_H
index 29e1b25..f55bf90 100755 (executable)
 
 #include "app_i18n.h"
 
-#define ADD_TRAN(x,y) static std::string x = _(y);
-
 namespace tizen_browser
 {
 namespace base_ui
 {
-namespace Translations {
-    ADD_TRAN(Google,"Google")
-    ADD_TRAN(Yahoo,"Yahoo")
-    ADD_TRAN(Bing,"Bing")
-    ADD_TRAN(TizenPage,"http://www.tizen.org")
-    ADD_TRAN(QuickPage,"QUICK_ACCESS")
-    ADD_TRAN(MostVisitedPage,"MOST_VISITED")
-    ADD_TRAN(OtherPage,"OTHER")
-    ADD_TRAN(CurrentPage,"CURRENT")
-    ADD_TRAN(Device,"IDS_BR_OPT_DEVICE")
-    ADD_TRAN(SDCard,"IDS_BR_OPT_SD_CARD")
-    ADD_TRAN(SettingsMainTitle,"IDS_BR_OPT_SETTINGS")
-    ADD_TRAN(SettingsMainHomePage, "IDS_BR_BUTTON_HOMEPAGE_ABB")
-    ADD_TRAN(SettingsMainHomePageDefault,"IDS_BR_BODY_DEFAULT")
-    ADD_TRAN(SettingsMainDefaultSearchEngine,"IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE")
-    ADD_TRAN(SettingsMainAutoFillProfiles,"IDS_BR_MBODY_MY_AUTO_FILL_PROFILE")
-    ADD_TRAN(SettingsMainAutoFillProfilesSub,"IDS_BR_SBODY_MANAGE_DATA_USED_TO_FILL_IN_FORMS_ONLINE")
-    ADD_TRAN(SettingsMainManualZoom,"IDS_BR_MBODY_MANUAL_ZOOM")
-    ADD_TRAN(SettingsMainManualZoomSub,"IDS_BR_BODY_OVERRIDE_WEBSITES_REQUEST_TO_CONTROL_ZOOM")
-    ADD_TRAN(SettingsMainPrivacy,"IDS_BR_BODY_PRIVACY")
-    ADD_TRAN(SettingsMainAdvanced,"IDS_BR_BODY_ADVANCED")
-    ADD_TRAN(SettingsDefaultSearchEngineTitle,"IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE")
-    ADD_TRAN(SettingsAdvancedTitle,"IDS_BR_BODY_ADVANCED")
-    ADD_TRAN(SettingsAdvancedEnableJavaScript,"IDS_BR_TMBODY_TURN_ON_JAVASCRIPT")
-    ADD_TRAN(SettingsAdvancedEnableJavaScriptSub,"IDS_BR_BODY_ALLOW_SITES_TO_RUN_JAVASCRIPT")
-    ADD_TRAN(SettingsAdvancedBlockPopups,"IDS_BR_BODY_BLOCK_POP_UPS")
-    ADD_TRAN(SettingsAdvancedBlockPopupsSub,"IDS_BR_BODY_BLOCK_POP_UPS_ON_WEBPAGES")
-    ADD_TRAN(SettingsAdvancedSaveContent,"IDS_BR_HEADER_SAVE_CONTENT_TO_ABB")
-    ADD_TRAN(SettingsAdvancedSaveContentTitle,"IDS_BR_HEADER_SAVE_CONTENT_TO_ABB")
-    ADD_TRAN(SettingsAdvancedManageWebsiteData,"IDS_BR_TMBODY_MANAGE_WEBSITE_DATA")
-    ADD_TRAN(SettingsAdvancedManageWebsiteDataSub,"IDS_BR_SBODY_SET_ADVANCED_SETTINGS_FOR_INDIVIDUAL_WEBSITES")
-    ADD_TRAN(SettingsPrivacyTitle,"IDS_BR_BODY_PRIVACY");
-    ADD_TRAN(SettingsPrivacyAcceptCookies,"IDS_BR_BODY_ACCEPT_COOKIES")
-    ADD_TRAN(SettingsPrivacyAcceptCookiesSub,"IDS_BR_SBODY_ALLOW_SITES_TO_SAVE_AND_READ_COOKIES")
-    ADD_TRAN(SettingsPrivacySuggestSearches,"IDS_BR_MBODY_SUGGEST_SEARCHES")
-    ADD_TRAN(SettingsPrivacySuggestSearchesSub,"IDS_BR_SBODY_SET_THE_DEVICE_TO_SUGGEST_QUERIES_AND_SITES_IN_THE_WEB_ADDRESS_BAR_AS_YOU_TYPE")
-    ADD_TRAN(SettingsPrivacySaveSigninInfo,"IDS_BR_MBODY_SAVE_SIGN_IN_INFO")
-    ADD_TRAN(SettingsPrivacySaveSigninInfoSub,"IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG")
-    ADD_TRAN(SettingsPrivacyDeletePersonalData,"IDS_BR_BODY_DELETE_PERSONAL_DATA")
-    ADD_TRAN(SettingsDelPersDataTitle,"IDS_BR_BODY_DELETE_PERSONAL_DATA")
-    ADD_TRAN(SettingsDelPersDataCancel,"IDS_BR_SK_CANCEL")
-    ADD_TRAN(SettingsDelPersDataDelete,"IDS_BR_SK_DELETE")
-    ADD_TRAN(SettingsDelPersDataSelectAll,"IDS_BR_OPT_SELECT_ALL_ABB")
-    ADD_TRAN(SettingsDelPersDataBrowsingHistory,"IDS_BR_BODY_BROWSING_HISTORY")
-    ADD_TRAN(SettingsDelPersDataCache,"IDS_BR_OPT_CACHE")
-    ADD_TRAN(SettingsDelPersDataCookies,"IDS_BR_BODY_COOKIES_AND_SITE_DATA_ABB")
-    ADD_TRAN(SettingsDelPersDataPasswords,"IDS_BR_OPT_PASSWORDS")
-    ADD_TRAN(SettingsDelPersDataAutoFillData,"IDS_BR_OPT_AUTO_FILL_DATA")
-    ADD_TRAN(SettingsDelPersDataLocationData,"IDS_BR_OPT_LOCATION_ACCESS_DATA")
-    ADD_TRAN(SettingsAutoFillProfileTitle,"IDS_BR_MBODY_MY_AUTO_FILL_PROFILE")
-    ADD_TRAN(SettingsAutoFillProfileSetMyProfile,"IDS_BR_MBODY_SET_MY_PROFILE")
-    ADD_TRAN(SettingsHomePageTitle,"IDS_BR_BUTTON_HOMEPAGE_ABB")
-    ADD_TRAN(SettingsHomePageCurrentPage,"IDS_BR_BODY_CURRENT_PAGE")
-    ADD_TRAN(SettingsHomePageDefault,"IDS_BR_BODY_DEFAULT")
-    ADD_TRAN(SettingsHomePageOther,"IDS_BR_BODY_OTHER_ABB")
-    ADD_TRAN(SettingsHomePageMostVisited,"IDS_BR_MBODY_MOST_VISITED_WEBSITES")
-    ADD_TRAN(SettingsHomePageQuickAccess,"IDS_BR_HEADER_QUICK_ACCESS_ABB")
+struct Translations {
+    static Translations& instance() {
+       static Translations INSTANCE;
+       return INSTANCE;
+    }
+    Translations(Translations const&) = delete;
+    void operator=(Translations const&) = delete;
+
+    void update() {
+        Google = _("Google");
+        Yahoo = _("Yahoo");
+        Bing = _("Bing");
+        TizenPage = _("http://www.tizen.org");
+        QuickPage = _("QUICK_ACCESS");
+        MostVisitedPage = _("MOST_VISITED");
+        OtherPage = _("OTHER");
+        CurrentPage = _("CURRENT");
+        Device = _("IDS_BR_OPT_DEVICE");
+        SDCard = _("IDS_BR_OPT_SD_CARD");
+        SettingsMainTitle = _("IDS_BR_OPT_SETTINGS");
+        SettingsMainHomePage = _( "IDS_BR_BUTTON_HOMEPAGE_ABB");
+        SettingsMainHomePageDefault = _("IDS_BR_BODY_DEFAULT");
+        SettingsMainDefaultSearchEngine = _("IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE");
+        SettingsMainAutoFillProfiles = _("IDS_BR_MBODY_MY_AUTO_FILL_PROFILE");
+        SettingsMainAutoFillProfilesSub = _("IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE");
+        SettingsMainManualZoom = _("IDS_BR_MBODY_MANUAL_ZOOM");
+        SettingsMainManualZoomSub = _("IDS_BR_BODY_OVERRIDE_WEBSITES_REQUEST_TO_CONTROL_ZOOM");
+        SettingsMainPrivacy = _("IDS_BR_BODY_PRIVACY");
+        SettingsMainAdvanced = _("IDS_BR_BODY_ADVANCED");
+        SettingsDefaultSearchEngineTitle = _("IDS_BR_TMBODY_DEFAULT_SEARCH_ENGINE");
+        SettingsAdvancedTitle = _("IDS_BR_BODY_ADVANCED");
+        SettingsAdvancedEnableJavaScript = _("IDS_BR_TMBODY_TURN_ON_JAVASCRIPT");
+        SettingsAdvancedEnableJavaScriptSub = _("IDS_BR_BODY_ALLOW_SITES_TO_RUN_JAVASCRIPT");
+        SettingsAdvancedBlockPopups = _("IDS_BR_BODY_BLOCK_POP_UPS");
+        SettingsAdvancedBlockPopupsSub = _("IDS_BR_BODY_BLOCK_POP_UPS_ON_WEBPAGES");
+        SettingsAdvancedSaveContent = _("IDS_BR_HEADER_SAVE_CONTENT_TO_ABB");
+        SettingsAdvancedSaveContentTitle = _("IDS_BR_HEADER_SAVE_CONTENT_TO_ABB");
+        SettingsAdvancedManageWebsiteData = _("IDS_BR_TMBODY_MANAGE_WEBSITE_DATA");
+        SettingsAdvancedManageWebsiteDataSub = _("IDS_BR_SBODY_SET_ADVANCED_SETTINGS_FOR_INDIVIDUAL_WEBSITES");
+        SettingsPrivacyTitle = _("IDS_BR_BODY_PRIVACY");
+        SettingsPrivacyAcceptCookies = _("IDS_BR_BODY_ACCEPT_COOKIES");
+        SettingsPrivacyAcceptCookiesSub = _("IDS_BR_SBODY_ALLOW_SITES_TO_SAVE_AND_READ_COOKIES");
+        SettingsPrivacySuggestSearches = _("IDS_BR_MBODY_SUGGEST_SEARCHES");
+        SettingsPrivacySuggestSearchesSub = _("IDS_BR_SBODY_SET_THE_DEVICE_TO_SUGGEST_QUERIES_AND_SITES_IN_THE_WEB_ADDRESS_BAR_AS_YOU_TYPE");
+        SettingsPrivacySaveSigninInfo = _("IDS_BR_MBODY_SAVE_SIGN_IN_INFO");
+        SettingsPrivacySaveSigninInfoSub = _("IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG");
+        SettingsPrivacyDeletePersonalData = _("IDS_BR_BODY_DELETE_PERSONAL_DATA");
+        SettingsDelPersDataTitle = _("IDS_BR_BODY_DELETE_PERSONAL_DATA");
+        SettingsDelPersDataCancel = _("IDS_BR_SK_CANCEL");
+        SettingsDelPersDataDelete = _("IDS_BR_SK_DELETE");
+        SettingsDelPersDataSelectAll = _("IDS_BR_OPT_SELECT_ALL_ABB");
+        SettingsDelPersDataBrowsingHistory = _("IDS_BR_BODY_BROWSING_HISTORY");
+        SettingsDelPersDataCache = _("IDS_BR_OPT_CACHE");
+        SettingsDelPersDataCookies = _("IDS_BR_BODY_COOKIES_AND_SITE_DATA_ABB");
+        SettingsDelPersDataPasswords = _("IDS_BR_OPT_PASSWORDS");
+        SettingsDelPersDataAutoFillData = _("IDS_BR_OPT_AUTO_FILL_DATA");
+        SettingsDelPersDataLocationData = _("IDS_BR_OPT_LOCATION_ACCESS_DATA");
+        SettingsAutoFillProfileTitle = _("IDS_BR_MBODY_MY_AUTO_FILL_PROFILE");
+        SettingsAutoFillProfileSetMyProfile = _("IDS_BR_MBODY_SET_MY_PROFILE");
+        SettingsHomePageTitle = _("IDS_BR_BUTTON_HOMEPAGE_ABB");
+        SettingsHomePageCurrentPage = _("IDS_BR_BODY_CURRENT_PAGE");
+        SettingsHomePageDefault = _("IDS_BR_BODY_DEFAULT");
+        SettingsHomePageOther = _("IDS_BR_BODY_OTHER_ABB");
+        SettingsHomePageMostVisited = _("IDS_BR_MBODY_MOST_VISITED_WEBSITES");
+        SettingsHomePageQuickAccess = _("IDS_BR_HEADER_QUICK_ACCESS_ABB");
+    }
+private:
+    Translations() {
+        update();
+    }
+public:
+    std::string Google;
+    std::string Yahoo;
+    std::string Bing;
+    std::string TizenPage;
+    std::string QuickPage;
+    std::string MostVisitedPage;
+    std::string OtherPage;
+    std::string CurrentPage;
+    std::string Device;
+    std::string SDCard;
+    std::string SettingsMainTitle;
+    std::string SettingsMainHomePage;
+    std::string SettingsMainHomePageDefault;
+    std::string SettingsMainDefaultSearchEngine;
+    std::string SettingsMainAutoFillProfiles;
+    std::string SettingsMainAutoFillProfilesSub;
+    std::string SettingsMainManualZoom;
+    std::string SettingsMainManualZoomSub;
+    std::string SettingsMainPrivacy;
+    std::string SettingsMainAdvanced;
+    std::string SettingsDefaultSearchEngineTitle;
+    std::string SettingsAdvancedTitle;
+    std::string SettingsAdvancedEnableJavaScript;
+    std::string SettingsAdvancedEnableJavaScriptSub;
+    std::string SettingsAdvancedBlockPopups;
+    std::string SettingsAdvancedBlockPopupsSub;
+    std::string SettingsAdvancedSaveContent;
+    std::string SettingsAdvancedSaveContentTitle;
+    std::string SettingsAdvancedManageWebsiteData;
+    std::string SettingsAdvancedManageWebsiteDataSub;
+    std::string SettingsPrivacyTitle;
+    std::string SettingsPrivacyAcceptCookies;
+    std::string SettingsPrivacyAcceptCookiesSub;
+    std::string SettingsPrivacySuggestSearches;
+    std::string SettingsPrivacySuggestSearchesSub;
+    std::string SettingsPrivacySaveSigninInfo;
+    std::string SettingsPrivacySaveSigninInfoSub;
+    std::string SettingsPrivacyDeletePersonalData;
+    std::string SettingsDelPersDataTitle;
+    std::string SettingsDelPersDataCancel;
+    std::string SettingsDelPersDataDelete;
+    std::string SettingsDelPersDataSelectAll;
+    std::string SettingsDelPersDataBrowsingHistory;
+    std::string SettingsDelPersDataCache;
+    std::string SettingsDelPersDataCookies;
+    std::string SettingsDelPersDataPasswords;
+    std::string SettingsDelPersDataAutoFillData;
+    std::string SettingsDelPersDataLocationData;
+    std::string SettingsAutoFillProfileTitle;
+    std::string SettingsAutoFillProfileSetMyProfile;
+    std::string SettingsHomePageTitle;
+    std::string SettingsHomePageCurrentPage;
+    std::string SettingsHomePageDefault;
+    std::string SettingsHomePageOther;
+    std::string SettingsHomePageMostVisited;
+    std::string SettingsHomePageQuickAccess;
 };
 
 struct SearchEngineTranslation
@@ -95,11 +163,18 @@ struct SearchEngineTranslation
     SearchEngineTranslation(SearchEngineTranslation const&) = delete;
     void operator=(SearchEngineTranslation const&) = delete;
     std::string get(const std::string& key) { return searchEngine[key]; }
+    static std::string createSearchQuery(const std::string& query, const std::string& searchEngine)
+    {
+        std::string searchString = instance().get(searchEngine);
+        searchString += query;
+        std::replace(searchString.begin(), searchString.end(), ' ', '+');
+        return searchString;
+    }
 private:
     SearchEngineTranslation() {
-        searchEngine[Translations::Google] = "http://www.google.com/search?q=";
-        searchEngine[Translations::Yahoo] = "http://www.yahoo.com/search?q=";
-        searchEngine[Translations::Bing] = "http://www.bing.com/search?q=";
+        searchEngine[Translations::instance().Google] = "http://www.google.com/search?q=";
+        searchEngine[Translations::instance().Yahoo] = "http://www.yahoo.com/search?q=";
+        searchEngine[Translations::instance().Bing] = "http://www.bing.com/search?q=";
     }
     std::map<std::string, std::string> searchEngine;
 };
index 538e44f..9433b9b 100755 (executable)
 
 #include "app_i18n.h"
 
-#define ADD_TRAN(x,y) static std::string x = _(y);
-
 namespace tizen_browser
 {
 namespace base_ui
 {
-namespace Translations {
-    ADD_TRAN(CreatePassword,"IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER")
-    ADD_TRAN(ConfirmCreatePassword, "IDS_BR_BODY_ENTER_THE_PASSWORD_AGAIN_TO_CONFRIM_IT")
-    ADD_TRAN(ConfirmPassword, "IDS_BR_BODY_ENTER_YOUR_CURRENT_SECRET_MODE_PASSWORD")
-    ADD_TRAN(IncorrectPassword, "IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN")
-    ADD_TRAN(ShowPassword, "IDS_BR_OPT_SHOW_PASSWORD_ABB2")
-    ADD_TRAN(UsePassword, "IDS_BR_BUTTON_USE_PASSWORD_ABB")
-    ADD_TRAN(ChangePassword, "IDS_BR_TMBODY_CHANGE_PASSWORD")
+struct TabTranslations {
+    static TabTranslations& instance() {
+       static TabTranslations INSTANCE;
+       return INSTANCE;
+    }
+    TabTranslations(TabTranslations const&) = delete;
+    void operator=(TabTranslations const&) = delete;
+    void update() {
+        CreatePassword = _("IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER");
+        ConfirmCreatePassword =  _("IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT");
+        ConfirmPassword =  _("IDS_BR_BODY_ENTER_YOUR_CURRENT_SECRET_MODE_PASSWORD");
+        IncorrectPassword =  _("IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN");
+        ShowPassword =  _("IDS_BR_OPT_SHOW_PASSWORD_ABB2");
+        UsePassword =  _("IDS_BR_BUTTON_USE_PASSWORD_ABB");
+        ChangePassword =  _("IDS_BR_TMBODY_CHANGE_PASSWORD");
+    }
+private:
+    TabTranslations() {
+        update();
+    }
+public:
+    std::string CreatePassword;
+    std::string ConfirmCreatePassword;
+    std::string ConfirmPassword;
+    std::string IncorrectPassword;
+    std::string ShowPassword;
+    std::string UsePassword;
+    std::string ChangePassword;
 };
 
 enum class PasswordAction {
index b847701..c5c4747 100755 (executable)
 #ifndef URISCHEMES_H
 #define URISCHEMES_H
 
+#include <string>
+#include <map>
+#include <memory>
+#include <vector>
+#include <app_control.h>
+
 namespace tizen_browser {
 
 const char* HTTP_SCHEME = "http://";
@@ -33,6 +39,362 @@ const char* SMSTO_SCHEME = "smsto:";
 
 const char* TIZENSTORE_APP_ID = "org.tizen.tizenstore";  //Tizen store package ID
 
+static std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse) __attribute__ ((unused));
+static Eina_Bool handle_scheme(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_email(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_contact(const char *uri, const char *protocol) __attribute__ ((unused));
+static Eina_Bool launch_dialer(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_message(const char *uri) __attribute__ ((unused));
+static Eina_Bool launch_tizenstore(const char *uri) __attribute__ ((unused));
+
+
+static std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::string uri = uriToParse;
+    std::map<std::string, std::vector<std::string> > uri_parts;
+    std::string::size_type mainDelimiter;
+    mainDelimiter = uri.find_first_of("?");
+    if (mainDelimiter != std::string::npos) {
+        uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
+        std::string argsString = uri.substr(mainDelimiter+1, std::string::npos);
+        const char *delimiter = "&";
+        std::vector<std::string> argsVector;
+        auto i = 0;
+        auto pos = argsString.find(delimiter);
+        if (pos != std::string::npos) {
+            while (pos != std::string::npos) {
+                argsVector.push_back(argsString.substr(i, pos-i));
+                i = ++pos;
+                pos = argsString.find(delimiter, pos);
+                if (pos == std::string::npos)
+                    argsVector.push_back(argsString.substr(i, argsString.length()));
+            }
+        } else
+            argsVector.push_back(argsString.substr(i, argsString.length()));
+
+        const char *valueDelimiter = "=";
+        const char *itemsDelimiter = ";";
+        for (auto item : argsVector) {
+            pos = item.find(valueDelimiter);
+            if (pos != std::string::npos) {
+                std::string key = item.substr(0, pos);
+                std::string value = item.substr(pos+1, std::string::npos);
+
+                auto pos2 = value.find(itemsDelimiter);
+                auto j = 0;
+                if (pos2 != std::string::npos) {
+                    while (pos2 != std::string::npos) {
+                        uri_parts[key].push_back(value.substr(j, pos2-j));
+                        j = ++pos2;
+                        pos2 = value.find(itemsDelimiter, pos2);
+                        if (pos2 == std::string::npos)
+                            uri_parts[key].push_back(value.substr(j, value.length()));
+                    }
+                } else
+                    uri_parts[key].push_back(value);
+            }
+        }
+    } else {
+        uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
+    }
+    return uri_parts;
+}
+
+static Eina_Bool handle_scheme(const char *uri)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (!strncmp(uri, HTTP_SCHEME, strlen(HTTP_SCHEME)))
+        return EINA_FALSE;
+    else if (!strncmp(uri, HTTPS_SCHEME, strlen(HTTPS_SCHEME)))
+        return EINA_FALSE;
+    else if (!strncmp(uri, FILE_SCHEME, strlen(FILE_SCHEME)))
+        return EINA_FALSE;
+    else if (!strncmp(uri, TIZENSTORE_SCHEME, strlen(TIZENSTORE_SCHEME))) {
+        launch_tizenstore(uri);
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, MAILTO_SCHEME, strlen(MAILTO_SCHEME))) {
+        launch_email(uri);
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, TEL_SCHEME, strlen(TEL_SCHEME))) {
+        launch_dialer(uri);
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, TELTO_SCHEME, strlen(TELTO_SCHEME))) {
+        std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(TELTO_SCHEME));
+        launch_dialer(request_uri.c_str());
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, CALLTO_SCHEME, strlen(CALLTO_SCHEME))) {
+        std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(CALLTO_SCHEME));
+        launch_dialer(request_uri.c_str());
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, SMS_SCHEME, strlen(SMS_SCHEME))) {
+        launch_message(uri);
+        return EINA_TRUE;
+    }
+    else if (!strncmp(uri, SMSTO_SCHEME, strlen(SMSTO_SCHEME))) {
+        std::string request_uri = std::string(SMS_SCHEME) + std::string(uri + strlen(SMSTO_SCHEME));
+        launch_message(request_uri.c_str());
+        return EINA_TRUE;
+    }
+
+    return EINA_FALSE;
+}
+
+static Eina_Bool launch_email(const char *uri)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+    app_control_h app_control = NULL;
+    if (app_control_create(&app_control) < 0) {
+        BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
+        return EINA_FALSE;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
+        BROWSER_LOGE("Fail to app_control_set_operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    auto it = uri_parts.find("url");
+    if (it != uri_parts.end()) {
+        if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_set_uri");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    } else
+        return EINA_FALSE;
+
+    it = uri_parts.find("subject");
+    if (it != uri_parts.end()) {
+        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    it = uri_parts.find("body");
+    if (it != uri_parts.end()) {
+        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    it = uri_parts.find("cc");
+    if (it != uri_parts.end()) {
+        size_t size = it->second.size();
+        const char* cc[size];
+        int i = 0;
+        for(auto item : it->second) {
+            cc[i] = item.c_str();
+            ++i;
+        }
+        if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_CC, cc, size) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data_array");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    it = uri_parts.find("bcc");
+    if (it != uri_parts.end()) {
+        size_t size = it->second.size();
+        const char* bcc[size];
+        int i = 0;
+        for(auto item : it->second) {
+            bcc[i] = item.c_str();
+            ++i;
+        }
+        if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_BCC, bcc, size) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data_array");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+        BROWSER_LOGE("Fail to app_control_send_launch_request");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    app_control_destroy(app_control);
+
+    return EINA_TRUE;
+}
+
+static Eina_Bool launch_contact(const char *uri, const char *protocol)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+    app_control_h app_control = NULL;
+    if (app_control_create(&app_control) < 0) {
+        BROWSER_LOGE("Fail to create app_control handle");
+        return EINA_FALSE;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_ADD) < 0) {
+        BROWSER_LOGE("Fail to app_control_set_operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_set_mime(app_control, "application/vnd.tizen.contact") < 0) {
+        BROWSER_LOGE("Fail to app_control_set_mime");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    auto it = uri_parts.find("url");
+    if (it != uri_parts.end()) {
+        if (!strcmp(protocol, "tel")) {
+            if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_PHONE,
+                                           it->second.front().c_str()) < 0) {
+                BROWSER_LOGE("Fail to app_control_add_extra_data");
+                app_control_destroy(app_control);
+                return EINA_FALSE;
+            }
+        } else if (strcmp(protocol, "mailto") == 0) {
+            if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_EMAIL,
+                                           it->second.front().c_str()) < 0) {
+                BROWSER_LOGE("Fail to app_control_add_extra_data");
+                app_control_destroy(app_control);
+                return EINA_FALSE;
+            }
+        } else
+            BROWSER_LOGE("Not supported protocol!");
+    }
+    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+        BROWSER_LOGE("Fail to launch app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    app_control_destroy(app_control);
+
+    return EINA_TRUE;
+}
+
+static Eina_Bool launch_dialer(const char *uri)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    app_control_h app_control = NULL;
+    if (app_control_create(&app_control) < 0) {
+        BROWSER_LOGE("Fail to create app_control handle");
+        return EINA_FALSE;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_DIAL) < 0) {
+        BROWSER_LOGE("Fail to app_control_set_operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_set_uri(app_control, uri) < 0) {
+        BROWSER_LOGE("app_control_set_uri is failed.");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+        BROWSER_LOGE("Fail to launch app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    app_control_destroy(app_control);
+
+    return EINA_TRUE;
+}
+
+static Eina_Bool launch_message(const char *uri)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::map<std::string, std::vector<std::string> >uri_parts = parse_uri(uri);
+
+    app_control_h app_control = NULL;
+    if (app_control_create(&app_control) < 0) {
+        BROWSER_LOGE("Fail to create app_control handle");
+        return EINA_FALSE;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
+        BROWSER_LOGE("Fail to set app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    auto it = uri_parts.find("url");
+    if (it != uri_parts.end()) {
+        if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_set_uri");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    else
+        return EINA_FALSE;
+
+    it = uri_parts.find("subject");
+    if (it != uri_parts.end()) {
+        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    it = uri_parts.find("body");
+    if (it != uri_parts.end()) {
+        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
+            BROWSER_LOGE("Fail to app_control_add_extra_data");
+            app_control_destroy(app_control);
+            return EINA_FALSE;
+        }
+    }
+    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+        BROWSER_LOGE("Fail to launch app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    app_control_destroy(app_control);
+
+    return EINA_TRUE;
+}
+
+static Eina_Bool launch_tizenstore(const char *uri)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    app_control_h app_control = NULL;
+    if (app_control_create(&app_control) < 0) {
+        BROWSER_LOGE("Fail to create app_control handle");
+        return EINA_FALSE;
+    }
+    if (!app_control) {
+        BROWSER_LOGE("Fail to create app_control handle");
+        return EINA_FALSE;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
+        BROWSER_LOGE("Fail to set app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_set_uri(app_control, uri) < 0) {
+        BROWSER_LOGE("Fail to set uri operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_set_app_id(app_control, TIZENSTORE_APP_ID) < 0) {
+        BROWSER_LOGE("Fail to app_control_set_app_id");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
+        BROWSER_LOGE("Fail to launch app_control operation");
+        app_control_destroy(app_control);
+        return EINA_FALSE;
+    }
+    app_control_destroy(app_control);
+
+    return EINA_TRUE;
+}
+
 } /* end of tizen_browser */
 
 #endif // URISCHEMES_H
similarity index 96%
rename from services/WebPageUI/edc/CustomButton.edc
rename to core/Tools/edc/CustomButton.edc
index 2f18a87..a162067 100755 (executable)
@@ -1,5 +1,5 @@
 #include "ImageButton.edc"
-#include "../../../core/Tools/edc/ColorClasses.edc"
+#include "ColorClasses.edc"
 
 #define BUTTON_MIN_WIDTH_INC 50
 #define BUTTON_MIN_HEIGHT_INC 50
@@ -16,9 +16,6 @@
 collections { base_scale: 2.6;
 
 IMAGE_BUTTON("toolbar_input_ic_cancel.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_cancel.png")
-IMAGE_BUTTON("toolbar_input_ic_refresh.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_refresh.png")
-IMAGE_BUTTON("toolbar_input_ic_security.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security.png")
-IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security_off.png")
 
    group { name: "elm/button/base/custom";
       data.item: "vector_ux" "default";
@@ -74,10 +71,10 @@ IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC
             type: RECT;
             scale: 1;
             description { state: "default" 0.0;
-               color_class: "uri_bg";
+               color_class: "transparent";
             }
             description { state: "disabled" 0.0;
-               color_class: "elm/widget/button/default/bg-disabled";
+               color_class: "transparent";
             }
          }
          part { name: "effect_spacer";
@@ -399,7 +396,6 @@ IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC
                } else {
                   set_state(PART:"icon_rect", "icon_only", 0.0);
                   set_state(PART:"elm.swallow.content", "icon_only", 0.0);
-                  set_state(PART:"padding_left_top", "icon_only", 0.0);
                }
             }
          }
@@ -500,4 +496,4 @@ IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC
          }
       }
    }
-}
\ No newline at end of file
+}
index 23db0be..7c3e545 100755 (executable)
@@ -84,22 +84,12 @@ collections {
                  text.min: 0 1;
               }
            }
-           part { name: "text_content_padding";
-              type: SPACER;
-              scale: 1;
-              description { state: "default" 0.0;
-                 min: 0 24;
-                 align: 0.0 0.0;
-                 rel1 { to: "elm.text"; relative: 0.0 1.0; }
-                 rel2 { to_x: "right_padding"; to_y: "base"; relative: 0.0 0.0; }
-              }
-           }
            part { name: "elm.swallow.content";
               type: SWALLOW;
               scale: 1;
               description { state: "default" 0.0;
                  align: 0.5 0.0;
-                 rel1 { to: "text_content_padding"; relative: 0.0 1.0; }
+                 rel1 { to_x: "base"; to_y: "elm.text"; relative: 0.0 1.0; }
                  rel2 { to: "bottom_padding"; relative: 1.0 0.0; }
               }
            }
index bdaf41f..b719190 100755 (executable)
@@ -23,6 +23,7 @@
 #include <Elementary.h>
 #include <stdexcept>
 #include <app.h>
+#include <app_control_internal.h>
 #include <ewk_main_internal.h>
 #include <ewk_context.h>
 #include <ewk_context_internal.h>
@@ -45,12 +46,16 @@ const char *engineCommandLineFlags[] = {
   "allow-file-access-from-files",
 };
 
+std::vector<char*> browser_argv;
+
 ///\note Odroid platform modification
 const std::string DEFAULT_URL = "";
 const std::string DEFAULT_CALLER = "org.tizen.homescreen-efl";
 const int WEB_INSPECTOR_PORT = 9222;
 
-using BrowserDataPtr = std::shared_ptr<tizen_browser::base_ui::AbstractMainWindow<Evas_Object>>;
+using namespace tizen_browser::base_ui;
+
+using BrowserDataPtr = std::shared_ptr<AbstractMainWindow<Evas_Object>>;
 
 #if WEB_INSPECTOR
 static void start_webInspectorServer()
@@ -66,12 +71,12 @@ static void start_webInspectorServer()
 
 static void set_arguments(char **argv)
 {
-    std::vector<char*> browser_argv;
+    //std::vector<char*> browser_argv;
     browser_argv.push_back(argv[0]);
     for (auto arg: engineCommandLineFlags)
         browser_argv.push_back(const_cast<char*>(arg));
 
-    ewk_set_arguments(browser_argv.size(), browser_argv.data());
+    //ewk_set_arguments(browser_argv.size(), browser_argv.data());
 }
 
 static bool app_create(void* app_data)
@@ -96,7 +101,7 @@ static bool app_create(void* app_data)
             tizen_browser::base_ui::AbstractMainWindow<Evas_Object>,
             tizen_browser::core::AbstractService
         >
-        (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleui"));
+        (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.simpleui", "libSimpleUI.so"));
     elm_app_base_scale_set(boost::any_cast<double>(tizen_browser::config::Config::getInstance().get("scale")));
     return true;
 }
@@ -108,17 +113,20 @@ static void app_terminate(void* app_data)
     (*bd)->destroyUI();
 }
 
-static void app_control(app_control_h app_control, void* app_data){
+static void app_control(app_control_h app_control, void* app_data)
+{
     /* to test this functionality please use aul_test command on target:
      *  $aul_test org.tizen.browser __APP_SVC_URI__ <http://full.url.com/>
      */
-    BROWSER_LOGD("%s\n", __func__);
+    BROWSER_LOGD("%s app_control_h=%p\n", __func__,app_control);
 
     char *operation = NULL;
     char *request_uri = NULL;
     char *request_mime_type = NULL;
     char *request_caller = NULL;
     char *search_keyword = NULL;
+    char *instance_id = NULL;
+    char *push_data = NULL;
 
     if (app_control_get_operation(app_control, &operation) != APP_CONTROL_ERROR_NONE) {
         BROWSER_LOGD("get app_control operation failed");
@@ -139,6 +147,8 @@ static void app_control(app_control_h app_control, void* app_data){
 
     std::string uri = request_uri != NULL ? std::string(request_uri) : DEFAULT_URL;
     std::string caller = request_caller != NULL ? std::string(request_caller) : DEFAULT_CALLER;
+    std::string inst_id;
+    std::string pushData;
 
     if((operation && !strcmp(operation, APP_CONTROL_OPERATION_VIEW)) && (request_uri != NULL)) {
         if (request_uri) {
@@ -157,6 +167,22 @@ static void app_control(app_control_h app_control, void* app_data){
         }
     }
 
+    if (app_control_get_instance_id(app_control, &instance_id) == APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("get instance id %s", instance_id);
+        if (instance_id) {
+            inst_id=std::string(instance_id);
+            free(instance_id);
+        }
+    }
+
+    if (app_control_get_extra_data(app_control, "push_data", &push_data) == APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("get push data %s", push_data);
+        if (push_data) {
+            pushData=std::string(push_data);
+            free(push_data);
+        }
+    }
+
     if ((operation && !strcmp(operation, APP_CONTROL_OPERATION_SEARCH )) &&
     ((app_control_get_extra_data(app_control, "http://tizen.org/appcontrol/data/keyword", &search_keyword) == APP_CONTROL_ERROR_NONE) ||
     (app_control_get_extra_data(app_control, APP_CONTROL_DATA_TEXT, &search_keyword) == APP_CONTROL_ERROR_NONE))) {
@@ -173,7 +199,19 @@ static void app_control(app_control_h app_control, void* app_data){
     free(request_caller);
     free(operation);
 
+    if(inst_id.empty()) {
+        inst_id="browser0";
+    }
+    std::string pwa_id="--browser-instance-id="+inst_id;
+    BROWSER_LOGD("+++Set Instance-ID=%s",pwa_id.c_str());
+    browser_argv.push_back(const_cast<char*>(pwa_id.c_str()));
+    ewk_set_arguments(browser_argv.size(), browser_argv.data());
+
+    PushPWAData<std::string> pwaData(inst_id, pushData);
     auto bd = static_cast<BrowserDataPtr*>(app_data);
+    (*bd)->setHandle(app_control);
+    if (pwaData.dataExist())
+        (*bd)->setPushPWAData(pwaData);
     (*bd)->exec(uri, caller, oper);
     evas_object_show((*bd)->getMainWindow().get());
     elm_win_activate((*bd)->getMainWindow().get());
@@ -197,7 +235,7 @@ static void app_resume(void* app_data){
 }
 
 #if PROFILE_MOBILE
-static void app_language_changed(app_event_info*, void *)
+static void app_language_changed(app_event_info*, void* app_data)
 {
    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
    char *language;
@@ -208,6 +246,9 @@ static void app_language_changed(app_event_info*, void *)
         // Set the language in elementary
         elm_language_set(language);
         free(language);
+
+        auto bd = static_cast<BrowserDataPtr*>(app_data);
+        (*bd)->languageChanged();
    } else {
         BROWSER_LOGD("[%s:%d] Warning, failed to set new language!", __PRETTY_FUNCTION__, __LINE__);
    }
@@ -245,7 +286,7 @@ int main(int argc, char* argv[])try
 
 #if PROFILE_MOBILE
     app_event_handler_h lang_changed_handler;
-    ui_app_add_event_handler(&lang_changed_handler, APP_EVENT_LANGUAGE_CHANGED, app_language_changed, NULL);
+    ui_app_add_event_handler(&lang_changed_handler, APP_EVENT_LANGUAGE_CHANGED, app_language_changed, &bd);
 #endif
 
 #if WEB_INSPECTOR
diff --git a/landscape.png b/landscape.png
new file mode 100755 (executable)
index 0000000..d4126c3
Binary files /dev/null and b/landscape.png differ
index 84f242d..7649155 100755 (executable)
         </app-control>
         <app-control>
             <operation name="http://tizen.org/appcontrol/operation/view" />
-            <mime name="application/x-shockwave-flash" />
-        </app-control>
-        <app-control>
-            <operation name="http://tizen.org/appcontrol/operation/view" />
-            <mime name="image/svg+xml" />
         </app-control>
         <app-control>
             <operation name="http://tizen.org/appcontrol/operation/view" />
         <privilege>http://tizen.org/privilege/internet</privilege>
         <privilege>http://tizen.org/privilege/appdir.shareddata</privilege>
      </privileges>
-</manifest>
\ No newline at end of file
+</manifest>
index 79868bb..6f59c1e 100755 (executable)
@@ -2,7 +2,7 @@
 
 Name:       org.tizen.browser-profile_mobile
 Summary:    Tizen TV Open Browser
-Version:    2.0.0
+Version:    3.2.0
 Release:    0
 Provides:   org.tizen.browser = %{version}-%{release}
 Conflicts:  org.tizen.browser-profile_common
@@ -42,6 +42,7 @@ BuildRequires:  pkgconfig(capi-system-system-settings)
 BuildRequires:  pkgconfig(libsoup-2.4)
 BuildRequires:  browser-provider-devel
 BuildRequires:  pkgconfig(efl-extension)
+BuildRequires:  pkgconfig(push)
 
 BuildRequires:  cmake
 BuildRequires:  gettext
@@ -58,6 +59,9 @@ BuildRequires:  pkgconfig(capi-appfw-app-manager)
 BuildRequires:  pkgconfig(capi-content-media-content)
 BuildRequires:  pkgconfig(shortcut)
 
+#This is the main switch for The Dummy Button - ON/OFF
+%define _dummy_button "ON"
+
 %define BUILD_UT  %{?build_ut:ON}%{!?build_ut:OFF}
 %if %BUILD_UT == "ON"
 BuildRequires:  boost-test
@@ -102,6 +106,7 @@ cmake .. \
     -DBUILD_UT=%{BUILD_UT} \
     -DCOVERAGE_STATS=%{COVERAGE_STATS} \
     -DPROFILE=mobile \
+    -DDUMMY_BUTTON=%{_dummy_button} \
     -DTZ_SYS_RO_PACKAGES=%{TZ_SYS_RO_PACKAGES} \
     -DTZ_SYS_RO_ICONS=%{TZ_SYS_RO_ICONS} \
 %if "%{?_with_wayland}" == "1"
@@ -121,6 +126,8 @@ cd %{_build_dir}
 %files
 %manifest org.tizen.browser.manifest
 %{_icondir}/org.tizen.browser.png
+%{_icondir}/portrait.png
+%{_icondir}/landscape.png
 %{_manifestdir}/%{alias}.xml
 %defattr(-,root,root,-)
 %{_appdir}/bin/browser
diff --git a/portrait.png b/portrait.png
new file mode 100755 (executable)
index 0000000..e3985bd
Binary files /dev/null and b/portrait.png differ
index 7b8708e..19ca8a7 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "لن تظهر أي صفحات ويب تم عرضها عندما كان 
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "تم"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "أدخل كلمة المرور مرة أخرى لتأكيدها."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "إنشاء كلمة مرور"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "عدم استخدام كلمة المرور"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "لحماية بيانات الوضع السري، قم بإنشاء كلمة مرور. إذا كنت تستخدم الوضع السري بدون إنشاء كلمة مرور، فلن تتمكّن من منع الآخرين من عرض متصفحك ومحفوظات البحث والإشارات المرجعية والصفحات المحفوظة."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "ستظهر الإشارات المرجعية هنا بعد إضافتها."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "اضبط جهازك لعرض إطار منبثق مع خيار لحفظ اسم المستخدم الخاص بك وكلمة مرورك عندما تُدخل بيانات اعتماد المستخدم لمواقع الويب."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "إدارة ملف التعريف لملء نماذج ويب."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "أضف للعلامات"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "تأكيد كلمة المرور"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "ليس لديك أي علامة تبويب مفتوحة"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "انقر فوق ”علامة تبويب جديدة“ لفتح علامة تبويب جديدة وبدء استكشاف الإنترنت."
+
index 6dee1da..9453f28 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Gizli rejim aktiv olan zaman daxil olunan bütün vebsəhifələr Gizli
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Hazırdır"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Təsdiq etmək üçün parolu yenidən daxil et."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parol yarat"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Paroldan istif etmə"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Gizli rejimin məlumatını qorumaq üçün parol yaradın. Parol yaratmadan Gizli rejimdən istifadə edirsinizsə, başqalarının brauzerinizi və axtarış tarixçənizi, əlfəcinləri və saxlanmış səhifələri görməsinin qarşısını ala bilməyəcəksiniz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Əlfəcinləri əlavə etdikdən sonra onlar burada görünəcək."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Cihazınızı elə qurun ki, vebsaytlar üçün istifadəçi məlumatlarını daxil edən zaman istifadəçi adınız və parolunuzu saxlamaq seçimi ilə ani mesajı göstərsin."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Avto doldurma profilinizi idarə edin."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Nişanlara əlavə et"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parolu təsdiqlə"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Açıq tab-vərəqəniz yoxdur"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yeni tab-vərəqə açmaq üçün Yeni tab-vərəqə vurun və interneti tədqiq etməyə başlayın."
+
index 2845b5a..1af9103 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Всички уеб страници, които преглеждате,
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Готово"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Въведете отново паролата, за да я потвърдите."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Създаване на парола"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Да не се изп. парола"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "За да защитите данните на Таен режим, създайте парола. Ако използвате Таен режим, без да създадете парола, няма да можете да се предпазите от това други да виждат браузъра ви и хронологията на търсене, показалците и записаните страници."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "След като добавите показалци, те ще се покажат тук."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Задайте устройството си да показва изскачащи прозорци с опцията да запише вашето потребителско име и парола, когато въвеждате потребителските идентификационни данни за уеб сайтове."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Управлявайте профила си за автоматично попълване."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Добави към маркери"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Потвърждаване на паролата"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Нямате никакви отворени раздели"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Докоснете иконата за нов раздел, за да отворите нов раздел и да започнете да преглеждате в интернет."
+
index 4fdd305..2af9acc 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Les pàgines web que es vegin mentre el mode Secret estigui activat no a
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Finalitzat"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Torni a introduir la contrasenya per confirmar-la."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contrasenya"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contrasenya"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Per protegir les dades del mode Secret, creï una contrasenya. Si utilitza el mode Secret sense crear una contrasenya, no podrà impedir que els altres usuaris vegin el seu navegador i l'historial de cerques, els marcadors i les pàgines desades."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Un cop afegits els preferits, es mostraran aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configuri el dispositiu perquè mostri una finestra emergent amb l'opció de desar el nom d'usuari i la contrasenya quan introdueixi les credencials d'usuari dels llocs web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestionar l'Emplenament automàtic del perfil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Afegir a Preferits"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contrasenya"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No té cap pestanya oberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toqui Pestanya nova per obrir una pestanya nova i començar a explorar Internet."
+
index 592f67a..2c993c0 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Žádné webové stránky, které navštívíte při zapnutém Režimu u
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Hotovo"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Zadejte znovu heslo a potvrďte ho."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Vytvořit heslo"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nepoužívat heslo"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Chcete-li chránit data Režimu utajení, vytvořte heslo. Když použijete Režim utajení bez vytvoření hesla, nebudete moci ostatním uživatelům zabránit, aby se podívali na váš prohlížeč a historii hledání, záložky a uložené stránky."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Až přidáte záložky, zobrazí se zde."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nastaví zařízení tak, aby se při zadávání přihlašovacích údajů k webovým stránkám zobrazilo okno s možností uložit uživatelské jméno a heslo."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Umožňuje spravovat Profil automaticky vyplňovaných položek."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Přidat záložku"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrďte heslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemáte žádné otevřené karty"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Klepnutím na tlačítko Nová karta otevřete novou kartu a můžete začít procházet Internet."
+
index a14c9c0..451bfd4 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Websider, du har set, mens Hemmelig tilstand har været aktiveret, vises
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Udført"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Indtast din adgangskode igen for at bekræfte den."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Opret adgangskode"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Brug ikke adg.-kode"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Opret en adgangskode for at beskytte dine Hemmelig tilstand-data. Hvis du bruger Hemmelig tilstand uden at oprette en adgangskode, kan du ikke forhindre andre i at se din browser- og søgeoversigt, dine bogmærker og dine gemte sider."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Når du har tilføjet bogmærker, vil de blive vist her."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Indstil din enhed til at vise et pop op-vindue med mulighed for at gemme dit brugernavn og din adgangskode, når du indtaster dine brugeroplysninger til websteder."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrer din automatisk udfyldte profil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Føj til Bogmærker"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekræft adgangskoden"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har ingen åbne faner"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tryk på Ny fane for at åbne en ny fane og begynde at surfe på internettet."
+
index 804e6b7..481710e 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Alle Webseiten, die bei aktiviertem geheimen Modus angezeigt werden, wer
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "OK"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Geben Sie Ihr Passwort zur Bestätigung erneut ein."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Passwort erstellen"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Passwort nicht verwenden"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Erstellen Sie ein Passwort, um die Daten Ihres geheimen Modus zu schützen. Wenn Sie den geheimen Modus verwenden, ohne ein Passwort zu erstellen, können andere Personen Ihren Browser- und Suchverlauf, Ihre Lesezeichen und gespeicherten Seiten einsehen."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nachdem Sie Lesezeichen hinzugefügt haben, werden diese hier angezeigt."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Stellen Sie Ihr Gerät so ein, dass ein Pop-up mit der Option zum Speichern Ihres Benutzernamens und Passworts angezeigt wird, wenn Sie Anmeldeinformationen für Webseiten eingeben."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Automatisch ausgefülltes Profil verwalten."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Zu Favoriten hinzufügen"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bestätigen des Passworts"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Sie haben keine offenen Registerkarten."
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tippen Sie auf „Neuer Tab“, um eine neue Registerkarte zu öffnen und im Internet zu surfen."
+
index 8b4bcac..9d243a4 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Οι ιστοσελίδες που επισκέπτεστε ενώ εί
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "OΚ"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Καταχωρήστε ξανά τον κωδικό σας πρόσβασης για επιβεβαίωση."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Δημιουργία κωδ. πρόσβασης"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Χωρίς χρήση κωδικού"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Δημιουργήστε έναν κωδικό πρόσβασης, για να προστατεύσετε τα δεδομένα της Μυστικής λειτουργίας. Αν χρησιμοποιήσετε τη Μυστική λειτουργία χωρίς να δημιουργήσετε κωδικό πρόσβασης, δεν θα μπορέσετε να εμποδίσετε την προβολή του προγράμματος περιήγησης, του ιστορικού αναζήτησης, των σελιδοδεικτών και των αποθηκευμένων σελίδων από άλλους χρήστες."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Αφού προσθέσετε σελιδοδείκτες, αυτοί θα εμφανίζονται εδώ."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ρυθμίστε τη συσκευή σας ώστε να εμφανίζει ένα αναδυόμενο μήνυμα με την επιλογή για αποθήκευση του ονόματος χρήστη και του κωδικού πρόσβασης όταν καταχωρίζετε διαπιστευτήρια χρήστη σε τοποθεσίες web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Διαχείριση του προφίλ αυτόματης συμπλήρωσης."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Προσθήκη στους σελιδ/τες"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Επιβεβ. κωδικού πρόσβασης"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Δεν έχετε ανοιχτές καρτέλες"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Πατήστε «Νέα καρτέλα» για να ανοίξετε μια νέα καρτέλα και να ξεκινήσετε την εξερεύνηση στο Internet."
+
index 9c30744..30a9a98 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Any webpages viewed while Secret mode is enabled will not appear in your
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Done"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks, and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
index 15ac057..6bfccd4 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Any webpages viewed while Secret mode is enabled will not appear in your
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Done"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
index 7bc20f0..972f358 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Any webpages viewed while Secret mode is turned on will not appear in yo
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Done"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Enter your password again to confirm it."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Create password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Do not use password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "To protect your Secret mode data, create a password. If you use Secret mode without creating a password, you won't be able to prevent others from viewing your browser and search history, bookmarks, and saved pages."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "After you add bookmarks, they will be shown here."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Set your device to show a pop-up with the option to save your username and password when you enter user credentials for websites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Manage your Auto fill profile."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Add to Bookmarks"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirm password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "You don't have any open tabs"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tap New tab to open a new tab and start exploring the internet."
+
index 44bca5b..56a4c49 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Las páginas web que visite con el modo Secreto activado no se mostrará
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Guardar"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduzca la contraseña de nuevo para confirmarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contraseña"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contraseña"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Cree una contraseña para proteger sus datos del modo Secreto. Si usa el modo Secreto sin una contraseña, no podrá impedir que otros puedan ver su historial de búsquedas y de navegación, los marcadores y las páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Después de añadir marcadores, se mostrarán aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configura el dispositivo para que muestre una ventana emergente con la opción de guardar su nombre de usuario y contraseña cuando introduzca las credenciales de usuario en sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrar su Perfil de Autocompletar."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Añadir a Marcadores"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contraseña"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No tiene ninguna pestaña abierta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pulse Nueva pestaña para abrir una pestaña nueva y empezar a navegar por Internet."
+
index 728a9ed..865d1f6 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Las páginas web visitadas con el modo Secreto activado no se muestran e
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Realizado"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduzca de nuevo su contraseña para confirmarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contraseña"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "No usar contraseña"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Cree una contraseña para proteger los datos del modo Secreto. Si usa el modo Secreto sin crear una contraseña, no podrá impedir que otros vean su historial de búsqueda y del navegador, sus favoritos y sus páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Después de añadir favoritos, estos se mostrarán aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Definir el dispositivo para que muestre una ventana emergente con la opción de guardar el nombre de usuario y la contraseña cuando se introducen credenciales de usuario de sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administre su perfil de llenado automático"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Añadir a Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contraseña"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "No tiene ventanas abiertas"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pulse Nueva ventana para abrir una ventana nueva y comenzar a navegar en Internet."
+
index 2add5d0..6477369 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Mitte ükski veebileht, mida kuvatakse aktiivse salarežiimi ajal, et il
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Valmis"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Kinnitamiseks sisestage oma parool uuesti."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parooli loomine"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ära kasuta parooli"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Looge parool, et kaitsta oma salarežiimi andmeid. Kui kasutate salarežiimi ilma paroolita, saavad teised vaadata teie brauseri ja otsingute ajalugu, järjehoidjaid ja salvestatud lehti."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Järjehoidjad kuvatakse siin pärast nende lisamist."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Saate määrata, et teie seade kuvaks hüpikut koos valikuga salvestada oma kasutajanimi ja parool, kui sisestate veebilehtedel kasutajavolitusi."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Saate hallata oma automaatse täitmise profiili."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lisa järjehoidjatesse"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parooli kinnitamine"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Teil pole ühtki avatud vahekaarti"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toksake valikut Uus vahekaart, et avada uus vahekaart ja hakata kasutama internetti."
+
index 68fde3e..51c3fcc 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Modu sekretua gaituta dagoela ikusitako web orriak ez dira arakatzailean
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Egina"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Berresteko, idatzi pasahitza berriz."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Sortu pasahitza"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ez erab. pasahitza"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Modu sekretuko datuak babesteko, sortu pasahitza. Modu sekretua pasahitzik sortu gabe erabiltzen baduzu, ezingo diezu eragotzi besteei zure arakatzailea, bilaketa historia, laster markak eta gordetako orriak ikustea."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Laster markak gehitu ondoren, hemen erakutsiko dira."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ezarri gailua webguneetako erabiltzaile kredentzialak idaztean erabiltzaile izena eta pasahitza gordetzeko aukera leiho gainerakor batean erakuts dezan."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Kudeatu automatikoki betetzeko profila."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Laster-marketara gehitu"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Berretsi pasahitza"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ez duzu fitxarik irekita"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Ukitu Berria beste fitxa bat irekitzeko eta Internet arakatzeko."
+
index 83080bb..6066039 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Salaisen tilan käytön aikana avatut verkkosivut eivät näy selain- ta
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Valmis"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Vahvista salasanasi antamalla se uudelleen."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Luo salasana"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Älä käytä salasanaa"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Luo salasana salaisen tilan tietojen suojausta varten. Jos käytät salaista tilaa salasanaa luomatta, et pysty estämään muita tarkastelemasta selaintasi sekä hakuhistoriaasi, kirjanmerkkejä ja tallennettuja sivuja."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Kun olet lisännyt kirjanmerkkejä, ne näytetään täällä."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Aseta laite näyttämään ponnahdusikkuna ja salli käyttäjänimen ja salasanan tallennus, kun annat sivustojen tunnistetiedot."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Hallitse automaattisesti täytettyä profiilia."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lisää kirjanmerkkeihin"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Vahvista salasana"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Avoimia välilehtiä ei ole"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Voit avata uuden välilehden ja aloittaa verkossa etsimisen napauttamalla Uusi välilehti."
+
index f261e8d..c6c3c61 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Les pages Web affichées pendant que le mode Secret est activé ne s'aff
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Terminé"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Entrez de nouveau votre mot de passe pour le confirmer."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Créer un mot de passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne pas utiliser MDP"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pour protéger vos données du mode Secret, créez un mot de passe. Si vous utilisez le mode Secret sans créer de mot de passe, vous ne pourrez empêcher personne d'afficher votre historique de navigation et de recherche, vos favoris et vos pages enregistrées."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Les favoris ajoutés seront affichés ici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configurez votre appareil de façon à afficher une fenêtre contextuelle vous permettant d'enregistrer votre nom d'utilisateur et votre mot de passe lorsque vous saisissez ces informations de connexion sur des sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gérez le profil de vos entrées automatiques."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ajouter aux favoris"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmation mot de passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Vous n'avez aucun onglet ouvert"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Appuyez sur l'onglet Nouveau pour ouvrir un nouvel onglet et commencer à naviguer sur Internet."
+
index 098d236..b43cc3f 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Les pages Web affichées pendant que le mode Secret est activé ne s'aff
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Terminé"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Entrez de nouveau votre mot de passe pour le confirmer."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Créer un mot de passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne pas utiliser MDP"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pour protéger vos données du mode Secret, créez un mot de passe. Si vous utilisez le mode Secret sans créer de mot de passe, vous ne pourrez empêcher personne d'afficher votre historique de navigation et de recherche, vos favoris et vos pages enregistrées."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Les favoris ajoutés seront affichés ici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Configurez votre appareil de façon à afficher une fenêtre contextuelle vous permettant d'enregistrer votre nom d'utilisateur et votre mot de passe lorsque vous saisissez ces informations de connexion sur des sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gérez le profil de vos entrées automatiques."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ajouter aux signets"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmation mot de passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Vous n'avez aucun onglet ouvert"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Touchez l'onglet Nouveau pour ouvrir un nouvel onglet et commencer à naviguer sur Internet."
+
index 735236c..b1d9eba 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Aon leathanaigh ghréasáin ar amharcadh orthu agus Mód rúnda cumasait
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Déanta"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Iontráil do phasfhocal arís lena dheimhniú."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Cruthaigh pasfhocal"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ná húsáid pasfhocal"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Le do chuid sonraí i Mód rúnda a chosaint, cruthaigh pasfhocal. Má úsáideann tú Mód rúnda gan pasfhocal a chruthú, ní bheidh tú in ann cosc a chur ar dhaoine eile amharc ar do stair bhrabhsálaí agus chuardaigh, leabharmharcanna ná leathanaigh shábháilte."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Tar éis duit leabharmharcanna a chur leis, taispeánfar anseo iad."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Socraigh do ghléas le mír aníos a thaispeáint ar a mbeidh rogha le d'ainm úsáideora agus le do phasfhocal a shábháil nuair a iontrálann tú faisnéis aitheantais úsáideora ar láithreáin ghréasáin."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Bainistigh do Phróifíl uathlíonta."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Cuir le Leabharmharcanna"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Deimhnigh an pasfhocal"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Níl aon tháib ar oscailt agat"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tapáil Táb nua le táb nua a oscailt agus le tosú ar an Idirlíon a thaiscéaladh."
+
index 5127f50..805384d 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Todas as páxinas web visualizadas co modo Secreto activado non aparecer
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Feito"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Volve inserir o contrasinal para confirmalo."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crear contrasinal"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Non usar contras."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para protexer os datos do modo Secreto, crea un contrasinal. Se usas o modo Secreto sen crear un contrasinal, non poderás evitar que outros usuarios visualicen o teu navegador nin o historial de buscas, os favoritos nin as páxinas gardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Despois de engadir favoritos, estes amosaranse aquí."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Define o teu dispositivo para mostrar unha ventá emerxente coa opción de gardar o teu nome de usuario e contrasinal cando introduces as credenciais de usuario dos sitios web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Xestiona o teu perfil de encher automaticamente."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Engadir a Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar contrasinal"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Non tes ningunha pestana aberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toca Pestana nova para abrir unha pestana nova e comezar a explorar Internet."
+
index 1ee721d..1e39d4d 100755 (executable)
@@ -197,7 +197,7 @@ msgid "IDS_BR_TPOP_1_ITEM_DELETED_FROM_BROWSING_HISTORY"
 msgstr "ब्राउजिंग इतिहास से 1 मद हटाई गयी।"
 
 msgid "IDS_BR_TMBODY_NOTIFICATIONS"
-msgstr "à¤\85धिसà¥\82à¤\9aनाà¤\8fà¤\81"
+msgstr "सूचनाएँ"
 
 msgid "IDS_BR_TAB_MOST_VISITED"
 msgstr "अधिकतम दौरा किया"
@@ -719,7 +719,7 @@ msgid "IDS_BR_MBODY_RUN_JAVASCRIPT"
 msgstr "जावास्क्रिप्ट चलाएँ"
 
 msgid "IDS_BR_MBODY_RESET_SETTINGS"
-msgstr "रà¥\80सà¥\87à¤\9f à¤¸à¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस"
+msgstr "सà¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस à¤°à¥\80सà¥\87à¤\9f à¤\95रà¥\87à¤\82"
 
 msgid "IDS_BR_MBODY_PRELOAD_WEBPAGES"
 msgstr "वेबपेजो को प्रीलोड करें"
@@ -1064,7 +1064,7 @@ msgid "IDS_BR_BODY_RESET_TO_DEFAULT"
 msgstr "डिफॉल्‍ट में रीसेट करें"
 
 msgid "IDS_BR_BODY_RESET_SETTINGS"
-msgstr "रà¥\80सà¥\87à¤\9f à¤¸à¥\87à¤\9fिà¤\82à¤\97à¥\8dस"
+msgstr "सà¥\87à¤\9fिà¤\82à¤\97à¥\8dâ\80\8dस à¤°à¥\80सà¥\87à¤\9f à¤\95रà¥\87à¤\82"
 
 msgid "IDS_BR_BODY_RESET_ALL_SETTINGS_TO_THEIR_DEFAULTS"
 msgstr "सभी सेटिंग्स को उनके डिफॉल्ट पर रीसेट करें।"
@@ -2176,3 +2176,36 @@ msgstr "गुप्त मोड सक्षम होने पर देख
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "पूर्ण"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "अपने पासवर्ड की पुष्टि करने के लिए इसे फिर से प्रविष्ट करें।"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "पासवर्ड बनाएँ"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "पासवर्ड उपयोग न करे"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "अपना गुप्त मोड डाटा सुरक्षित करने के लिए, एक पासवर्ड बनाएँ। यदि आप पासवर्ड बनाए बिना गुप्त मोड का उपयोग करते हैं, तो आप अन्य लोगों को अपना ब्राउजर और खोज इतिहास, बुकमार्क्स और सुरक्षित किए गए पेजेस देखने से रोकने में समर्थ नहीं होंगे।"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "आपके द्वारा बुकमार्क्स जोड़ने के बाद, वे यहां दिखाई देंगे।"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "आपके द्वारा वेबसाइट्स के लिए उपयोगकर्ता क्रेडेंशियल्स प्रविष्ट करने पर अपने डिवाइस को उपयोगकर्ता नाम और पासवर्ड सुरक्षित करने के विकल्प वाला पॉप-अप दिखाने के लिए सेट करें।"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "अपनी स्वतः भरण प्रोफाइल प्रबंधित करें।"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "बुकमार्क्स में जोड़ें"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "पासवर्ड की पुष्टि करें"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "आपके पास कोई खुले टैब्स नहीं हैं"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "एक नया टैब खोलने और इंटरनेट एक्सप्लोर करना प्रारंभ करने के लिए “नया टैब” पर टैप करें।"
+
index 6f1f2f3..4df5788 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Nijedna web-stranica kojoj ste pristupili dok je uključen Tajni način
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "OK"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ponovno unesite lozinku da biste je potvrdili."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kreiraj lozinku"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne koristi lozinku"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Da biste zaštitili podatke Tajnog načina, stvorite lozinku. Ako upotrebljavate Tajni način bez stvaranja lozinke, nećete moći spriječiti da drugi vide vašu povijest preglednika i povijest pretraživanja, oznake i spremljene stranice."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Oznake će se prikazati ovdje nakon što ih dodate."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Postavite uređaj da bi vam prikazao skočni prozor s opcijom za spremanje korisničkog imena i lozinke kada unesete korisničke podatke za prijavu na web-mjesta."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljajte automatski ispunjenim profilom."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj u Oznake"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrda lozinke"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemate otvorene kartice"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Dodirnite Nova kartica za otvaranje nove kartice i počnite pregledavati internet."
+
index 2ddb55b..985d705 100755 (executable)
@@ -1016,7 +1016,7 @@ msgid "IDS_BR_BODY_SPLIT_BAR_HANDLE"
 msgstr "Osztóvonal fogópontja"
 
 msgid "IDS_BR_BODY_SIGN_IN_TO_YOUR_SAMSUNG_ACCOUNT_TO_ACCESS_THE_BOOKMARKS_AND_TABS_ON_YOUR_OTHER_DEVICES"
-msgstr "Samsung-fiókjába bejelentkezve hozzáférhet egyéb eszközeiről a könyvjelzőkhöz és lapokhoz."
+msgstr "Samsung accountjába bejelentkezve hozzáférhet egyéb eszközeiről a könyvjelzőkhöz és lapokhoz."
 
 msgid "IDS_BR_BODY_SHOW_OVERVIEW_OF_NEWLY_OPENED_PAGES"
 msgstr "Újonnan megnyitott oldalak áttekintésének megjelenítése"
@@ -1469,7 +1469,7 @@ msgid "IDS_BR_POP_INFORM_MEMORY_ERROR"
 msgstr "Memóriahiba"
 
 msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
 
 msgid "IDS_BR_POP_BROWSERERRORREQUESTTIMEOUT"
 msgstr "Kérés időtúllépése."
@@ -1574,7 +1574,7 @@ msgid "IDS_BR_BODY_UNABLE_TO_FIND_AN_APPLICATION_TO_OPEN_THIS_FILE"
 msgstr "Nem található alkalmazás a fájl megnyitásához."
 
 msgid "IDS_BR_BODY_UNABLE_TO_CONNECT_TO_MOBILE_NETWORKS_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
-msgstr "Repülő üzemmódban nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi hálózathoz, vagy a Beállítások pont megérintése után kapcsolja ki a Repülő üzemmódot, majd próbálja újra."
+msgstr "Repülő üzemmódban nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi-hálózathoz, vagy a Beállítások pont megérintése után kapcsolja ki a Repülő üzemmódot, majd próbálja újra."
 
 msgid "IDS_BR_BODY_THIS_CERTIFICATE_IS_FROM_A_TRUSTED_AUTHORITY"
 msgstr "A tanúsítvány megbízható hitelesítésszolgáltatótól származik."
@@ -1595,7 +1595,7 @@ msgid "IDS_BR_BODY_NO_MATCHES"
 msgstr "Nincs találat"
 
 msgid "IDS_BR_BODY_MOBILE_DATA_IS_TURNED_OFF_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_TAP_SETTINGS_TO_TURN_ON_MOBILE_DATA_AND_THEN_TRY_AGAIN"
-msgstr "A mobil internetkapcsolat ki van kapcsolva. Kapcsolódjon Wi-Fi hálózathoz, vagy a Beállítások pont megérintése után kapcsolja be a mobil internetkapcsolatot, és próbálja újra."
+msgstr "A mobilinternet-kapcsolat ki van kapcsolva. Kapcsolódjon Wi-Fi-hálózathoz, vagy a Beállítások pont megérintése után kapcsolja be a mobilinternet-kapcsolatot, és próbálja újra."
 
 msgid "IDS_BR_BODY_FIT_TO_WIDTH"
 msgstr "Szélességhez"
@@ -1634,7 +1634,7 @@ msgid "IDS_BR_SK_BACK"
 msgstr "Vissza"
 
 msgid "IDS_BR_POP_WI_FI_CONNECTION_REQUIRED_CONNECT_TO_WI_FI_NETWORK_AND_TRY_AGAIN"
-msgstr "Wi-Fi kapcsolat szükséges. Kapcsolódjon a Wi-Fi hálózathoz, és próbálja újra"
+msgstr "Wi-Fi-kapcsolat szükséges. Kapcsolódjon a Wi-Fi-hálózathoz, és próbálja újra"
 
 msgid "IDS_BR_POP_URL_NOT_FOUND"
 msgstr "URL nem található."
@@ -1664,7 +1664,7 @@ msgid "IDS_BR_POP_NEVER"
 msgstr "Soha"
 
 msgid "IDS_BR_POP_MOBILE_DATA_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_MOBILE_DATA_AND_TRY_AGAIN"
-msgstr "A mobil internetkapcsolat le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze a mobil internetkapcsolatot, és próbálja újra"
+msgstr "A mobilinternet-kapcsolat le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze a mobilinternet-kapcsolatot, és próbálja újra"
 
 msgid "IDS_BR_POP_LOADING_PLEASE_WAIT_ING"
 msgstr "Betöltés. Kis türelmet..."
@@ -1910,10 +1910,10 @@ msgid "IDS_BR_BODY_ENTER_FOLDER_NAME"
 msgstr "Adja meg a mappa nevét."
 
 msgid "IDS_BR_BODY_ENTER_EMAIL_ADDRESS"
-msgstr "Adja meg az e-mail címet."
+msgstr "Adja meg az e-mail-címet."
 
 msgid "IDS_BR_BODY_EMAIL_ADDRESS"
-msgstr "E-mail cím"
+msgstr "E-mail-cím"
 
 msgid "IDS_BR_BODY_DOWNLOADING_ING"
 msgstr "Letöltés..."
@@ -1949,7 +1949,7 @@ msgid "IDS_BR_POP_UNSUPPORTMEDIATYPE"
 msgstr "Nem támogatott médiatípus"
 
 msgid "IDS_BR_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORKS_WHILE_FLIGHT_MODE_IS_ENABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_DISABLE_FLIGHT_MODE_AND_TRY_AGAIN"
-msgstr "Amíg a Repülő üzemmód be van kapcsolva, nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi hálózathoz, vagy tiltsa le a Repülő üzemmódot, és próbálja újra"
+msgstr "Amíg a Repülő üzemmód be van kapcsolva, nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi-hálózathoz, vagy tiltsa le a Repülő üzemmódot, és próbálja újra"
 
 msgid "IDS_BR_POP_INSTALL_SUCCESS"
 msgstr "A telepítés befejeződött."
@@ -1961,7 +1961,7 @@ msgid "IDS_BR_POP_DELETING_ING"
 msgstr "Törlés..."
 
 msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra"
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra"
 
 msgid "IDS_BR_OPT_SHARE_VIA"
 msgstr "Megosztás"
@@ -1997,7 +1997,7 @@ msgid "IDS_BR_BODY_DOWNLOADS_VODA"
 msgstr "Letöltések"
 
 msgid "IDS_BR_BODY_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
-msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
+msgstr "Az adatroaming le van tiltva. Kapcsolódjon Wi-Fi-hálózathoz, vagy engedélyezze az adatroamingot, és próbálja újra."
 
 msgid "IDS_BR_POP_DOWNLOAD_CANCELLED"
 msgstr "Letöltés megszakítva."
@@ -2176,3 +2176,36 @@ msgstr "A Titkos módban megtekintett weboldalak a Titkos mód kikapcsolása ut
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Kész"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Adja meg még egyszer a jelszót."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Jelszó létrehozása"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nem használ jelszót"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Hozzon létre jelszót a Titkos mód védelméhez. A Titkos mód jelszó nélkül használatával nem tudja megakadályozni, hogy mások megtekintsék a böngészési és a keresési előzményeket, a könyvjelzőket és a mentett oldalakat."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Itt jelennek majd meg a hozzáadott könyvjelzők."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Beállíthatja, hogy az eszköz a felhasználónév és a jelszó mentését felajánló előugró ablakot jelenítsen meg, amikor a felhasználó megadja a hitelesítő adatait egy webhelyen."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Kezelheti az automatikus kitöltési profilját."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Könyvjelző mentése"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Jelszó újból"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nincsenek megnyitott lapok"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Érintse meg az Új lap lehetőséget egy új lap nyitásához és a böngészés megkezdéséhez."
+
index 1bd41cb..08c0361 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Գաղտնի ռեժիմի ընձեռված ժամանակ դիտված 
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Արված է"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Այն հաստատելու համար նորից մուտքագրեք գաղտնաբառը:"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Ստեղծել գաղտնաբառ"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Չօգտգրծել գաղտնաբառ"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Ձեր Գաղտնի ռեժիմի տվյալները պաշտպանելու համար ստեղծեք գաղտնաբառ: Եթե օգտվեք Գաղտնի ռեժիմից՝ առանց գաղտնաբառ ստեղծելու, ապա չեք կարողանա կանխել Ձեր զննարկչի կամ որոնումների պատմության, էջանիշերի և պահպանված էջերի դիտումն այլոց կողմից:"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Ավելացվելուց հետո, էջանիշները կցուցադրվեն այստեղ:"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Սարքը նախադրեք այնպես, որ կայքերի համար նույնականացման տվյալներ մուտքագրելիս ցուցադրվի ելնող պատուհան Ձեր օգտանունն ու գաղտնաբառը պահպանելու ընտրանքով:"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Կառավարեք Ձեր Ինքնալրացվող պրոֆիլը:"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Ավելացնել Էջանիշերում"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Հաստատել գաղտնաբառը"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Դուք բաց ներդիրներ չունեք"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Թակեք «Նոր ներդիր»՝ նոր ներդիր բացելու և ինտերնետը հետազոտելու համար:"
+
index 5cea360..391bbfe 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Vefsíður sem þú skoðar þegar kveikt er á leyndarstillingu birtast
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Lokið"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Sláðu lykilorðið aftur inn til að staðfesta það."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Búa til lykilorð"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ekki nota lykilorð"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Búðu til lykilorð til að vernda leyndarstillingargögnin þín. Ef þú notar leyndarstillingu án þess að búa til lykilorð geturðu ekki hindrað aðra í að skoða vafrann þinn og leitarferil, bókamerki og vistaðar síður."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Bókamerki birtast hér eftir að þeim er bætt við."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Láta tækið opna sprettiglugga þar sem hægt er að vista notandanafn og lykilorð þegar þú slærð inn notandaupplýsingar fyrir vefsvæði."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Vinna með útfyllingarsnið."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Bæta við Bókamerki"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Staðfesta lykilorð"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Þú ert ekki með neina opna flipa"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pikkaðu á „Nýr flipi“ til að opna nýjan flipa og vafra um á netinu."
+
index 54c851d..f7c9b4f 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Le pagine Web visitate mentre la Modalità segreta è attiva non verrann
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Fatto"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Inserite nuovamente la password per confermarla."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Crea password"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Non usare password"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Per proteggere i dati della Modalità segreta, create una password. Se utilizzate la Modalità segreta senza creare una password, non potrete impedire agli altri utenti di visualizzare la cronologia del browser e di ricerca, i preferiti e le pagine salvate."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "I preferiti aggiunti saranno visualizzati qui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Con questa impostazione viene visualizzato un popup che consente di salvare nome utente e password quando inserite le credenziali utente nei siti Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestite il profilo di riempimento automatico."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Aggiungi a Preferiti"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Conferma password"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nessuna scheda aperta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toccate Nuova scheda per aprire una nuova scheda e iniziare a navigare su Internet."
+
index 21902fd..f1fa679 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "シークレットモードが有効な間に表示した全てのWebペ
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "完了"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "確認のため、再度パスワードを入力してください。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "パスワードを作成"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "パスワードを使用しない"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "シークレットモードのデータを保護するには、パスワードを作成してください。パスワードを作成せずにシークレットモードを使用すると、閲覧履歴、検索履歴、ブックマーク、および保存したページを他者に見られることを防止できません。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "ブックマークを追加すると、ここに表示されます。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Webサイトのユーザー認証情報を入力するときに、ユーザー名とパスワードを保存するオプションを含むポップアップを表示するように端末を設定します。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "自動入力プロフィールを管理します。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "ブックマークに追加"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "パスワードを確認"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "開いているタブがありません"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "新しいタブを開いてインターネットへのアクセスを開始するには、[新規タブ]をタップしてください。"
+
index c730121..532afb8 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "„საიდუმლო რეჟიმში“ დათვალ
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "შესრულდა"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "დასადასტურებლად ისევ შეიყვანეთ პაროლი."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "შექმენით პაროლი"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "არ გამოიყენო პაროლი"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "თქვენი „საიდუმლო რეჟიმის“ მონაცემების დასაცავად, შექმენით პაროლი. თუ „საიდუმლო რეჟიმს“ გამოიყენებთ პაროლის შექმნის გარეშე, სხვებს ვერ აუკრძალავთ თქვენი ბრაუზერისა და ძიების ისტორიის, სანიშნეებისა და შენახული გვერდების ნახვას."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "სანიშნეების დამატების შემდეგ ისინი გამოჩნდება აქ."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "მოწყობილობაში აირჩიეთ, რომ გამოჩნდეს სარკმლები, მომხმარებლის სახელისა და პაროლის დამახსოვრების შესაძლებლობით, როდესაც შეიყვანთ ვებსაიტის მომხმარებლის ავტორიზაციის პარამეტრებს."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "მართეთ ავტომატური შევსების პროფილი."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "სანიშნეებში დამატება"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "პაროლის დამოწმება"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "გახსნილი ჩანართები არ არის"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "შეეხეთ „ახალ გრაფას“, რომ გაიხსნას ახალი ჩანართი და დაიწყოთ ინტერნეტში საიტების დათვალიერება."
+
index 07d6b69..2b21e0b 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Құпия режим қосулы кезде кірген кез кел
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Дайын"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Растау үшін құпиясөзді қайта енгізіңіз."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Құпиясөз жасау"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Құпиясөз қолданбау"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Құпия режимі деректерін сақтау үшін құпиясөз ойлап табыңыз. Егер Құпия режимін құпиясөзсіз орнатататын болсаңыз, өзгелердің сіздің шолғышыңызды, іздеген ақпараттарыңызды, бетбелгілеріңізді және сақталған парақтарыңызды қарауының алдын алуға мүмкіндігіңіз болмайды."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Бетбелгілерді қосқаннан кейін, олар осы жерде көрсетіледі."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Пайдаланушының есептік жазба мәліметтерін веб-сайттарға енгізген кезде пайдаланушы аты мен құпия сөзді сақтау үшін, құрылғыны опциясы бар қалқымалы терезені көрсететіндей етіп орнатыңыз."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Авто толтыру профилін басқарыңыз."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Бетбелгілерге қосу"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Құпия сөзді растау"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Сіз әлі ешқандай қойындыны ашпағансыз"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Жаңа қойындыны ашу үшін, “Жаңа қойынды” түймесін түртіп, Интернетті шолуды бастаңыз."
+
index e19af7d..0a560af 100755 (executable)
@@ -1,5 +1,5 @@
 msgid "IDS_BR_POP_NETWORK_ERROR"
-msgstr "ë\84¤í\8a¸ì\9b\8cí\81¬ ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\95\98ì\98\80습니다."
+msgstr "ë\84¤í\8a¸ì\9b\8cí\81¬ ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\96\88습니다."
 
 msgid "IDS_BR_BODY_DESTINATIONS_AUTHENTICATION_REQUIRED"
 msgstr "인증이 필요합니다."
@@ -149,52 +149,52 @@ msgid "IDS_BR_BUTTON_FAILED"
 msgstr "완료 안 됨"
 
 msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 ë¹ ë¥¸ ì\8b¤í\96\89ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 ë¹ ë¥¸ ì\8b¤í\96\89ì\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_BOOKMARKS"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¶\81ë§\88í\81¬]ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [ë¶\81ë§\88í\81¬]ì\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_TPOP_QUICK_ACCESS_SHORTCUT_DELETED"
-msgstr "빠른 ì\8b¤í\96\89 ë°\94ë¡\9cê°\80기를 ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "빠른 ì\8b¤í\96\89 ë°\94ë¡\9cê°\80기를 ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_TPOP_PD_ITEMS_DELETED_FROM_BROWSING_HISTORY"
-msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95­ëª© %dê°\9c를 ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95­ëª© %dê°\9c를 ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_TPOP_OPENING_SAMSUNG_ACCOUNT_ING"
 msgstr "삼성 계정 실행 중..."
 
 msgid "IDS_BR_TPOP_LOW_DATA_USAGE_ENABLED"
-msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 ì\8b¤í\96\89í\95\98ì\98\80습니다."
+msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 ì\8b¤í\96\89í\96\88습니다."
 
 msgid "IDS_BR_TPOP_LOW_DATA_USAGE_DISABLED_PDP_OF_BANDWIDTH_SAVED"
-msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 í\95´ì \9cí\95\98ì\98\80ì\8aµë\8b\88ë\8b¤. ë\8c\80ì\97­í\8f­ì\9d\98 %d%를 ì \88ì\95½í\95\98ì\98\80습니다."
+msgstr "[ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89 ì¤\84ì\9d´ê¸°]를 í\95´ì \9cí\96\88ì\8aµë\8b\88ë\8b¤. ë\8c\80ì\97­í\8f­ì\9d\98 %d%를 ì \88ì\95½í\96\88습니다."
 
 msgid "IDS_BR_TPOP_IMAGE_COPIED_TO_CLIPBOARD"
-msgstr "ì\9d´ë¯¸ì§\80를 í\81´ë¦½ë³´ë\93\9cì\97\90 ë³µì\82¬í\95\98ì\98\80습니다."
+msgstr "ì\9d´ë¯¸ì§\80를 í\81´ë¦½ë³´ë\93\9cì\97\90 ë³µì\82¬í\96\88습니다."
 
 msgid "IDS_BR_TPOP_FAILED_TO_ADD_TO_HOME_SCREEN_ABB"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 ëª»í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 ëª»í\96\88습니다."
 
 msgid "IDS_BR_TPOP_DOWNLOADING_IMAGE_ING"
 msgstr "이미지 다운로드 중..."
 
 msgid "IDS_BR_TPOP_DATA_SAVING_STATISTICS_RESET"
-msgstr "ë\8d°ì\9d´í\84° ì \88ì\95½ í\86µê³\84를 ì´\88기í\99\94í\95\98ì\98\80습니다."
+msgstr "ë\8d°ì\9d´í\84° ì \88ì\95½ í\86µê³\84를 ì´\88기í\99\94í\96\88습니다."
 
 msgid "IDS_BR_TPOP_BOOKMARK_DELETED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_TPOP_ADDED_TO_QUICK_ACCESS_LIST"
-msgstr "[빠른 ì\8b¤í\96\89\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "[빠른 ì\8b¤í\96\89\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_TPOP_ADDED_TO_HOME_SCREEN"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_TPOP_1_POP_UP_BLOCKED"
-msgstr "í\8c\9dì\97\85 1ê°\9c를 ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "í\8c\9dì\97\85 1ê°\9c를 ì°¨ë\8b¨í\96\88습니다."
 
 msgid "IDS_BR_TPOP_1_ITEM_DELETED_FROM_BROWSING_HISTORY"
-msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95­ëª© 1ê°\9c를 ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "방문기ë¡\9dì\97\90ì\84\9c í\95­ëª© 1ê°\9c를 ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_TMBODY_NOTIFICATIONS"
 msgstr "알림"
@@ -278,7 +278,7 @@ msgid "IDS_BR_POP_UNABLE_TO_VIEW_THE_CERTIFICATE_THE_PAGE_INFORMATION_HAS_BEEN_C
 msgstr "페이지 정보가 변경되어 인증서를 볼 수 없습니다."
 
 msgid "IDS_BR_POP_TO_SIGN_IN_TO_THIS_WEBSITE_USING_YOUR_FINGERPRINTS_GO_TO_SETTINGS_AND_ENABLE_WEB_SIGN_IN"
-msgstr "지문을 이용하여 웹사이트에 로그인하려면 [설정]에서 [웹 로그인]을 실행하세요."
+msgstr "지문을 이용하여 웹사이트에 로그인하려면 설정에서 [웹 로그인]을 실행하세요."
 
 msgid "IDS_BR_POP_THIS_CERTIFICATE_IS_NOT_FROM_A_TRUSTED_AUTHORITY"
 msgstr "신뢰할 수 없는 기관에서 발급한 인증서입니다."
@@ -311,13 +311,13 @@ msgid "IDS_BR_POP_SETTINGS_WILL_BE_RESET_TO_DEFAULTS"
 msgstr "설정을 초기화합니다."
 
 msgid "IDS_BR_POP_SETTIGS_SAVED"
-msgstr "ì\84¤ì \95ì\9d\84 ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ì\84¤ì \95ì\9d\84 ì \80ì\9e¥í\96\88습니다."
 
 msgid "IDS_BR_POP_SECURITY_POLICY_RESTRICTS_USE_OF_INTERNET_BROWSER"
-msgstr "보안정책에 따라 [인터넷]을 사용할 수 없습니다."
+msgstr "보안정책에 따라 인터넷을 사용할 수 없습니다."
 
 msgid "IDS_BR_POP_SAVED_TO_BOOKMARKS"
-msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì \80ì\9e¥í\96\88습니다."
 
 msgid "IDS_BR_POP_RENAME_TAG"
 msgstr "태그 이름 변경"
@@ -347,10 +347,10 @@ msgid "IDS_BR_POP_P1SS_HP2SS_IS_ATTEMPTING_TO_STORE_A_LARGE_AMOUNT_OF_DATA_ON_YO
 msgstr "%1$s(%2$s)에서 오프라인에서 사용할 수 있도록 용량이 큰 데이터를 내 디바이스에 저장하려고 합니다."
 
 msgid "IDS_BR_POP_P1SS_HAS_BEEN_DETECTED_DETECTED_IN_C_P2SS_SOME_CONTENT_HAS_BEEN_BLOCKED_TO_PROTECT_YOUR_DEVICE"
-msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\95\98ì\98\80ì\8aµë\8b\88ë\8b¤.\nê°\90ì§\80 ì\9c\84ì¹\98: %2$s\n\në\94\94ë°\94ì\9d´ì\8a¤ë¥¼ ë³´í\98¸í\95\98기 ì\9c\84í\95´ ì\9d¼ë¶\80 ì½\98í\85\90츠를 ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\96\88ì\8aµë\8b\88ë\8b¤.\nê°\90ì§\80 ì\9c\84ì¹\98: %2$s\n\në\94\94ë°\94ì\9d´ì\8a¤ë¥¼ ë³´í\98¸í\95\98기 ì\9c\84í\95´ ì\9d¼ë¶\80 ì½\98í\85\90츠를 ì°¨ë\8b¨í\96\88습니다."
 
 msgid "IDS_BR_POP_P1SS_HAS_BEEN_DETECTED_DETECTED_IN_C_P2SS_OPEN_WEBPAGE_ANYWAY_Q"
-msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\95\98ì\98\80습니다.\n감지 위치: %2$s\n\n그래도 웹페이지를 열까요?"
+msgstr "â\80\9c%1$sâ\80\9dì\9d\84(를) ê°\90ì§\80í\96\88습니다.\n감지 위치: %2$s\n\n그래도 웹페이지를 열까요?"
 
 msgid "IDS_BR_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
 msgstr "저장공간이 부족합니다. 일부 항목을 삭제한 후 다시 시도하세요."
@@ -359,7 +359,7 @@ msgid "IDS_BR_POP_NOT_ALLOWED"
 msgstr "사용할 수 없습니다."
 
 msgid "IDS_BR_POP_MOVED"
-msgstr "ì\9d´ë\8f\99í\95\98ì\98\80습니다."
+msgstr "ì\9d´ë\8f\99í\96\88습니다."
 
 msgid "IDS_BR_POP_ENTER_URL"
 msgstr "URL을 입력하세요."
@@ -419,7 +419,7 @@ msgid "IDS_BR_POP_CLEAR_HISTORY_Q"
 msgstr "기록을 삭제할까요?"
 
 msgid "IDS_BR_POP_BOOKMARK_REMOVED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_POP_ALREADY_EXISTS"
 msgstr "동일한 항목이 있습니다."
@@ -443,7 +443,7 @@ msgid "IDS_BR_POP_ALLOW_SITES_TO_SAVE_AND_READ_COOKIES"
 msgstr "쿠키를 저장하고 읽을 수 있도록 허용합니다."
 
 msgid "IDS_BR_POP_ADDED_TO_BOOKMARKS"
-msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ì\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_OPT_WINDOWS"
 msgstr "실행 창 보기"
@@ -1100,7 +1100,7 @@ msgid "IDS_BR_BODY_POSTCODE_ABB"
 msgstr "우편번호"
 
 msgid "IDS_BR_BODY_PD_POP_UPS_BLOCKED_ABB"
-msgstr "í\8c\9dì\97\85 %dê°\9c를 ì°¨ë\8b¨í\95\98ì\98\80습니다."
+msgstr "í\8c\9dì\97\85 %dê°\9c를 ì°¨ë\8b¨í\96\88습니다."
 
 msgid "IDS_BR_BODY_PAGE_LOADED_T_TTS"
 msgstr "페이지 불러오기를 완료했습니다"
@@ -1205,7 +1205,7 @@ msgid "IDS_BR_BODY_FINGERPRINTS_C"
 msgstr "지문:"
 
 msgid "IDS_BR_BODY_FAILED_TO_ADD_TO_HOME_SCREEN_ABB"
-msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 ëª»í\95\98ì\98\80습니다."
+msgstr "í\99\88 í\99\94ë©´ì\97\90 ì¶\94ê°\80í\95\98ì§\80 ëª»í\96\88습니다."
 
 msgid "IDS_BR_BODY_ENTER_YOUR_NAME_ABB"
 msgstr "이름을 입력하세요."
@@ -1280,7 +1280,7 @@ msgid "IDS_BR_BODY_DEFAULT_PAGE_ABB"
 msgstr "기본 페이지"
 
 msgid "IDS_BR_BODY_DATA_USAGE_REDUCED_BY_P1SDP_HP2SD_KB_OF_P3SD_KB_RECEIVED_TAP_HERE_TO_RESET_STATISTICS"
-msgstr "%3$dKB를 %2$dKB í\81¬ê¸°ë¡\9c ë°\9bì\95\84, ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89ì\9d´ %1$d% ê°\90ì\86\8cí\95\98ì\98\80습니다. 통계를 초기화하려면 여기를 누르세요."
+msgstr "%3$dKB를 %2$dKB í\81¬ê¸°ë¡\9c ë°\9bì\95\84, ë\8d°ì\9d´í\84° ì\82¬ì\9a©ë\9f\89ì\9d´ %1$d% ê°\90ì\86\8cí\96\88습니다. 통계를 초기화하려면 여기를 누르세요."
 
 msgid "IDS_BR_BODY_CUSTOM_USER_AGENT"
 msgstr "사용자 에이전트 설정"
@@ -1289,7 +1289,7 @@ msgid "IDS_BR_BODY_CURRENT_PAGE"
 msgstr "현재 페이지"
 
 msgid "IDS_BR_BODY_CREATED"
-msgstr "ì\83\88ë¡\9c ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\83\88ë¡\9c ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_BODY_COUNTY_ABB"
 msgstr "지역"
@@ -1439,7 +1439,7 @@ msgid "IDS_BR_TPOP_STARTING_DOWNLOAD_ING"
 msgstr "다운로드 시작하는 중..."
 
 msgid "IDS_BR_TPOP_FOLDER_RENAMED"
-msgstr "í\8f´ë\8d\94 ì\9d´ë¦\84ì\9d\84 ë³\80ê²½í\95\98ì\98\80습니다."
+msgstr "í\8f´ë\8d\94 ì\9d´ë¦\84ì\9d\84 ë³\80ê²½í\96\88습니다."
 
 msgid "IDS_BR_TMBODY_SUGGEST_SEARCH_TERMS_AND_URLS"
 msgstr "검색어 및 URL 제안"
@@ -1463,16 +1463,16 @@ msgid "IDS_BR_POP_SEARCH_COMPLETED_JPN_SBM"
 msgstr "검색을 완료하였습니다"
 
 msgid "IDS_BR_POP_READY"
-msgstr "ì¤\80ë¹\84í\95\98ì\98\80습니다."
+msgstr "ì¤\80ë¹\84í\96\88습니다."
 
 msgid "IDS_BR_POP_INFORM_MEMORY_ERROR"
-msgstr "ë©\94모리 ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\95\98ì\98\80습니다."
+msgstr "ë©\94모리 ì\98¤ë¥\98ê°\80 ë°\9cì\83\9dí\96\88습니다."
 
 msgid "IDS_BR_POP_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_OR_ENABLE_DATA_ROAMING_AND_TRY_AGAIN"
 msgstr "[데이터 로밍]이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나 [데이터 로밍]을 실행한 후 다시 시도하세요."
 
 msgid "IDS_BR_POP_BROWSERERRORREQUESTTIMEOUT"
-msgstr "ì\9a\94ì²­ ì\8b\9cê°\84ì\9d\84 ì´\88ê³¼í\95\98ì\98\80습니다."
+msgstr "ì\9a\94ì²­ ì\8b\9cê°\84ì\9d\84 ì´\88ê³¼í\96\88습니다."
 
 msgid "IDS_BR_POP_A_WI_FI_CONNECTION_IS_REQUIRED_TAP_OK_TO_GO_TO_YOUR_WI_FI_SETTINGS"
 msgstr "Wi-Fi 연결이 필요합니다. Wi-Fi 설정으로 이동하려면 확인 버튼을 누르세요."
@@ -1595,7 +1595,7 @@ msgid "IDS_BR_BODY_NO_MATCHES"
 msgstr "일치하는 검색 결과가 없습니다."
 
 msgid "IDS_BR_BODY_MOBILE_DATA_IS_TURNED_OFF_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_OR_TAP_SETTINGS_TO_TURN_ON_MOBILE_DATA_AND_THEN_TRY_AGAIN"
-msgstr "[모바일 데이터]가 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나, [모바일 데이터]를 실행할 수 있도록 설정 버튼을 누른 후 다시 시도하세요."
+msgstr "모바일 데이터 기능이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나, 모바일 데이터 기능을 실행할 수 있도록 설정 버튼을 누른 후 다시 시도하세요."
 
 msgid "IDS_BR_BODY_FIT_TO_WIDTH"
 msgstr "너비에 맞추기"
@@ -1643,16 +1643,16 @@ msgid "IDS_BR_POP_URL"
 msgstr "URL"
 
 msgid "IDS_BR_POP_SAVED"
-msgstr "ì \80ì\9e¥í\95\98ì\98\80습니다."
+msgstr "ì \80ì\9e¥í\96\88습니다."
 
 msgid "IDS_BR_POP_REMOVED"
-msgstr "ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_POP_PD_ITEMS_WILL_BE_DELETED"
 msgstr "항목 %d개를 삭제합니다."
 
 msgid "IDS_BR_POP_PD_ITEMS_SELECTED"
-msgstr "í\95­ëª© %dê°\9c를 ì\84 í\83\9dí\95\98ì\98\80습니다."
+msgstr "í\95­ëª© %dê°\9c를 ì\84 í\83\9dí\96\88습니다."
 
 msgid "IDS_BR_POP_NO_ITEMS_SELECTED"
 msgstr "선택한 항목이 없습니다."
@@ -1664,7 +1664,7 @@ msgid "IDS_BR_POP_NEVER"
 msgstr "안 함"
 
 msgid "IDS_BR_POP_MOBILE_DATA_IS_DISABLED_CONNECT_TO_WI_FI_NETWORK_INSTEAD_OR_ENABLE_MOBILE_DATA_AND_TRY_AGAIN"
-msgstr "[모바일 데이터]를 해제하였습니다. Wi-Fi 네트워크에 연결하거나 [모바일 데이터]를 실행한 후 다시 시도하세요."
+msgstr "모바일 데이터 기능을 해제했습니다. Wi-Fi 네트워크에 연결하거나 모바일 데이터 기능을 실행한 후 다시 시도하세요."
 
 msgid "IDS_BR_POP_LOADING_PLEASE_WAIT_ING"
 msgstr "불러오는 중입니다. 잠시 기다리세요..."
@@ -1673,7 +1673,7 @@ msgid "IDS_BR_POP_INVALID_URL"
 msgstr "URL이 바르지 않습니다."
 
 msgid "IDS_BR_POP_FAIL"
-msgstr "ì\99\84ë£\8cí\95\98ì§\80 ëª»í\95\98ì\98\80습니다."
+msgstr "ì\99\84ë£\8cí\95\98ì§\80 ëª»í\96\88습니다."
 
 msgid "IDS_BR_POP_ENTER_TITLE_ABB"
 msgstr "제목 입력"
@@ -1682,22 +1682,22 @@ msgid "IDS_BR_POP_DO_NOT_SHOW_AGAIN"
 msgstr "다시 보지 않기"
 
 msgid "IDS_BR_POP_DOWNLOADCOMPLETE"
-msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì\99\84ë£\8cí\95\98ì\98\80습니다."
+msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì\99\84ë£\8cí\96\88습니다."
 
 msgid "IDS_BR_POP_DISABLED"
-msgstr "í\95´ì \9cí\95\98ì\98\80습니다."
+msgstr "í\95´ì \9cí\96\88습니다."
 
 msgid "IDS_BR_POP_DELETE_Q"
 msgstr "삭제할까요?"
 
 msgid "IDS_BR_POP_DELETED"
-msgstr "ì\82­ì \9cí\95\98ì\98\80습니다."
+msgstr "ì\82­ì \9cí\96\88습니다."
 
 msgid "IDS_BR_POP_CLOSE_APPLICATION_Q"
 msgstr "애플리케이션을 종료할까요?"
 
 msgid "IDS_BR_POP_BOOKMARK_ADDED"
-msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ë¶\81ë§\88í\81¬ë¥¼ ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_POP_AUTOMATIC_BRIGHTNESS"
 msgstr "자동 밝기"
@@ -1709,7 +1709,7 @@ msgid "IDS_BR_POP_1_ITEM_WILL_BE_DELETED"
 msgstr "항목 1개를 삭제합니다."
 
 msgid "IDS_BR_POP_1_ITEM_SELECTED"
-msgstr "í\95­ëª© 1ê°\9c를 ì\84 í\83\9dí\95\98ì\98\80습니다."
+msgstr "í\95­ëª© 1ê°\9c를 ì\84 í\83\9dí\96\88습니다."
 
 msgid "IDS_BR_OPT_TRANSLATE"
 msgstr "번역"
@@ -1763,7 +1763,7 @@ msgid "IDS_BR_OPT_BOOKMARK"
 msgstr "북마크"
 
 msgid "IDS_BR_OPT_ADDED"
-msgstr "ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_OPT_ADD"
 msgstr "추가"
@@ -1829,7 +1829,7 @@ msgid "IDS_BR_BODY_TITLE"
 msgstr "제목"
 
 msgid "IDS_BR_BODY_THE_MAXIMUM_NUMBER_OF_CHARACTERS_HPD_HAS_BEEN_EXCEEDED"
-msgstr "ìµ\9cë\8c\80 ê¸\80ì\9e\90 ì\88\98(%d)를 ì´\88ê³¼í\95\98ì\98\80습니다."
+msgstr "ìµ\9cë\8c\80 ê¸\80ì\9e\90 ì\88\98(%d)를 ì´\88ê³¼í\96\88습니다."
 
 msgid "IDS_BR_BODY_STREAMING"
 msgstr "스트리밍"
@@ -1952,10 +1952,10 @@ msgid "IDS_BR_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORKS_WHILE_FLIGHT_MODE_IS_ENAB
 msgstr "비행기 탑승 모드 실행 중에는 모바일 네트워크에 연결할 수 없습니다. Wi-Fi 네트워크에 연결하거나 비행기 탑승 모드를 해제한 후 다시 시도하세요."
 
 msgid "IDS_BR_POP_INSTALL_SUCCESS"
-msgstr "ì\84¤ì¹\98를 ì\99\84ë£\8cí\95\98ì\98\80습니다."
+msgstr "ì\84¤ì¹\98를 ì\99\84ë£\8cí\96\88습니다."
 
 msgid "IDS_BR_POP_INSTALLATION_FAILED"
-msgstr "ì\84¤ì¹\98í\95\98ì§\80 ëª»í\95\98ì\98\80습니다."
+msgstr "ì\84¤ì¹\98í\95\98ì§\80 ëª»í\96\88습니다."
 
 msgid "IDS_BR_POP_DELETING_ING"
 msgstr "삭제 중..."
@@ -1982,7 +1982,7 @@ msgid "IDS_BR_BUTTON_RETRY"
 msgstr "다시 시도"
 
 msgid "IDS_BR_BODY_REQUEST_FAILED"
-msgstr "ì\9a\94ì²­í\95\98ì§\80 ëª»í\95\98ì\98\80습니다."
+msgstr "ì\9a\94ì²­í\95\98ì§\80 ëª»í\96\88습니다."
 
 msgid "IDS_BR_BODY_LOGIN"
 msgstr "로그인"
@@ -2000,7 +2000,7 @@ msgid "IDS_BR_BODY_DATA_ROAMING_IS_DISABLED_CONNECT_TO_A_WI_FI_NETWORK_INSTEAD_O
 msgstr "[데이터 로밍]이 해제된 상태입니다. Wi-Fi 네트워크에 연결하거나 [데이터 로밍]을 실행한 후 다시 시도하세요."
 
 msgid "IDS_BR_POP_DOWNLOAD_CANCELLED"
-msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì·¨ì\86\8cí\95\98ì\98\80습니다."
+msgstr "ë\8b¤ì\9a´ë¡\9cë\93\9c를 ì·¨ì\86\8cí\96\88습니다."
 
 msgid "IDS_BR_BUTTON_SECRET_ON_ABB"
 msgstr "비밀 모드 실행"
@@ -2111,7 +2111,7 @@ msgid "IDS_BR_HEADER_SET_HOME_PAGE_ABB"
 msgstr "홈페이지 설정"
 
 msgid "IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS_LIST"
-msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [빠른 ì\8b¤í\96\89\97\90 ì¶\94ê°\80í\95\98ì\98\80습니다."
+msgstr "ì\9b¹í\8e\98ì\9d´ì§\80를 [빠른 ì\8b¤í\96\89\97\90 ì¶\94ê°\80í\96\88습니다."
 
 msgid "IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"
 msgstr "빠른 실행 편집"
@@ -2156,7 +2156,7 @@ msgid "IDS_BR_HEADER_SELECT_ITEMS_ABB2"
 msgstr "항목 선택"
 
 msgid "IDS_BR_BODY_YOUR_PASSWORD_MUST_CONTAIN_AT_LEAST_PD_CHARACTERS_INCLUDING_AT_LEAST_1_LETTER"
-msgstr "비밀번호를 %d자 이상 입력하세요.(문자 1개 이상 포함)"
+msgstr "비밀번호를 %d자 이상 입력하세요.\n(문자 1개 이상 포함)"
 
 msgid "IDS_BR_BODY_AN_INCORRECT_PASSWORD_HAS_BEEN_ENTERED_TRY_AGAIN"
 msgstr "입력된 비밀번호가 바르지 않습니다. 다시 시도하세요."
@@ -2176,3 +2176,36 @@ msgstr "비밀 모드 실행 중에 방문한 웹페이지는 해당 모드를 
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "완료"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "확인을 위해 비밀번호를 한 번 더 입력하세요."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "비밀번호 설정"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "비밀번호 사용 안 함"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "비밀 모드 데이터를 보호하려면 비밀번호를 만드세요. 비밀번호를 설정하지 않고 이 모드를 사용하면 내 검색기록, 방문기록, 북마크, 저장된 페이지가 다른 사람에게 노출되지 않도록 보호할 수 없습니다."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "북마크를 추가하면 여기에 표시됩니다."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "웹사이트에 로그인할 때 사용자 ID 및 비밀번호 저장 옵션 팝업을 표시합니다."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "내 프로필을 저장하고 관리할 수 있습니다."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "북마크에 추가"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "비밀번호 확인"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "열린 탭이 없습니다"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "새 탭을 열어 인터넷을 사용하려면 새 탭 버튼을 누르세요."
+
index 93eaa4c..56ee513 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Tinklalapiai, kuriuos peržiūrėsite veikiant slaptajam režimui, nebus
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Atlikta"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Dar kartą įveskite slaptažodį, kad patvirtintumėte."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kurti slaptažodį"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nenaudokit slaptaž."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Norėdami apsaugoti slaptojo režimo duomenis, sukurkite slaptažodį. Jei slaptuoju režimu naudositės nesukūrę slaptažodžio, kiti galės peržiūrėti jūsų naršyklės ir paieškos istoriją, adresyno įrašus ir išsaugotus puslapius."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Kai pridėsite adresyno įrašų, jie bus rodomi čia."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nustatykite, kad įrenginyje būtų parodytas iškylantysis langas su parinktimi išsaugoti naudotojo vardą bei slaptažodį, kai svetainėse įvedami naudotojo kredencialai."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Tvarkykite savo automatiškai užpildomą profilį."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pridėti prie adresyno įrašų"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Patvirtinti slaptažodį"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nesate atidarę jokių skirtukų"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Naują skirtuką atidarykite bakstelėdami „Naujas skirtukas“ ir naršykite internete."
+
index a1c05f3..a0cbfe4 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Slepenajā režīmā skatītās tīmekļa vietnes netiks rādītas jūsu
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Gatavs"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ievadiet paroli vēlreiz, lai to apstiprinātu."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Izveidot paroli"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Neizmantot paroli"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Izveidojiet paroli, lai aizsargātu slepenā režīma datus. Ja slepeno režīmu izmantosit bez paroles, jūs nevarēsit liegt citām personām skatīt jūsu pārlūkprogrammas un meklēšanas vēsturi, grāmatzīmes un saglabātās lapas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Pēc grāmatzīmju pievienošanas tās tiks parādītas šeit."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Iestatiet, lai ierīce rādītu uznirstošo logu ar iespēju saglabāt jūsu lietotājvārdu un paroli, kad tīmekļa vietnēs ievadāt lietotāja akreditācijas datus."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Pārvaldiet savu automātiskās aizpildīšanas profilu."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pievienot grāmatzīmēm"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Apstiprināt paroli"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Jums nav nevienas atvērtas cilnes"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pieskarieties pie Jauna cilne, lai atvērtu jaunu cilni un sāktu pārlūkot internetu."
+
index cbc4509..6ec8110 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Сите интернет-страници прегледани доде
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Готово"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Внесете ја лозинката повторно за потврда."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Направи лозинка"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не користи лозинка"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "За да ги заштитите своите податоци во Таен режим, направете лозинка. Ако користите Таен режим без да направите лозинка, нема да можете да ги спречите другите да ја гледаат историјата на Вашиот прегледник и на пребарувањата, ознаките и зачуваните страници."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Откако ќе додадете ознаки, ќе се прикажат тука."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Поставете ги уредите да прикажуваат појавен прозорец со опцијата за меморирање на корисничкото име и лозинката кога ќе внесувате кориснички акредитиви за интернет-страници."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Уредување на профилот за автоматско пополнување."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Додај во Омилени"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Потврда на лозинката"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Немате отворени картички"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Допрете Нова картичка за да отворите нова картичка и да почнете да истражувате на интернет."
+
index c7b4ed6..7e29535 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Alle nettsider du viser når Hemmelig modus er aktivert, vises ikke i ne
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Utført"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Angi passordet på nytt for å bekrefte det."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Opprett passord"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ikke bruk passord"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "For å beskytte Hemmelig modus-dataene må du opprette et passord. Hvis du bruker Hemmelig modus uten å opprette et passord, vil du ikke kunne hindre andre fra å vise nettleser- og søkehistorikken, bokmerkene og lagrede sider."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Når du har lagt til bokmerker, vises de her."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Angi at enheten skal vise et sprettoppvarsel med valget om å lagre brukernavnet og passordet ditt når du angir påloggingsinformasjon for nettsteder."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Administrer autoutfyllingsprofilen din."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Legg til i Bokmerker"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekreft passord"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har ingen åpne faner"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Trykk på Ny fane for å åpne en ny fane og begynne å utforske Internett."
+
index ceadce7..8398ca2 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Webpagina's die u hebt bekeken terwijl Geheime stand is ingeschakeld, ve
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Klaar"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Voer uw wachtwoord nogmaals in om het te bevestigen."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Wachtwoord maken"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Wachtw. niet gebr."
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Maak een wachtwoord om uw gegevens in Geheime stand te beschermen. Als u Geheime stand wilt gebruiken zonder een wachtwoord te maken, kunt u niet voorkomen dat anderen uw browser- en zoekhistorie, favorieten en opgeslagen pagina's bekijken."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nadat u favorieten hebt toegevoegd, worden ze hier getoond."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Stel uw apparaat in op het weergeven van een pop-up met de optie om uw gebruikersnaam en wachtwoord op te slaan, wanneer u gebruikergegevens voor websites invoert."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Beheer uw profiel voor automatisch aanvullen."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Toevoegen aan Favorieten"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Wachtwoord bevestigen"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "U hebt geen open tabbladen"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Tik op Nieuw tabblad om een nieuw tabblad te openen en internet te verkennen."
+
index 47fedc8..d3faffb 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Żadne strony WWW wyświetlane przy włączonym trybie chronionym nie b
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Gotowe"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Wprowadź hasło ponownie, aby je potwierdzić."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Utwórz hasło"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nie używaj hasła"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Utwórz hasło, aby zabezpieczyć dane trybu chronionego. W przypadku używania trybu chronionego bez utworzenia hasła nie będzie można zapobiec wyświetlaniu przez inne osoby historii przeglądarki i wyszukiwania, zakładek ani zapisanych stron."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Zakładki zostaną tu wyświetlone po ich dodaniu."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ustaw urządzenie tak, aby pokazywało wyskakujące okno z opcją zapisywania nazwy użytkownika i hasła po wprowadzeniu poświadczeń użytkownika dla witryn internetowych."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Zarządzaj profilem automatycznego wypełniania."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj do zakładek"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potwierdzanie hasła"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nie masz jeszcze żadnych otwartych kart"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Dotknij opcji Nowa karta, aby otworzyć nową kartę i zacząć przeglądać Internet."
+
index 9819532..b481792 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Qualquer página da web visualizada enquanto o Modo secreto estiver ativ
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Concluído"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Insira sua senha novamente para confirmá-la."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Criar senha"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Não usar senha"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para proteger seus dados do Modo secreto, crie uma senha. Se usar o Modo secreto sem criar uma senha, você não poderá impedir que outras pessoas vejam seu navegador e pesquisem o histórico, os favoritos e as páginas salvas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Após adicionar os marcadores, eles serão exibidos aqui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Define seu aparelho para mostrar uma janela pop-up com a opção de salvar seu nome de usuário e a senha quando você inserir as credenciais de usuário para os sites."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gerencia seu perfil de Entradas de autopreenchimento."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adicionar aos Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar senha"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Você não tem nenhuma guia aberta"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toque em Nova guia para abrir uma nova guia e começar a explorar a Internet."
+
index 17da5d1..f544765 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "As páginas Web visualizadas quando o Modo secreto está activado não s
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Concluir"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduza novamente a sua palavra-passe para a confirmar."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Criar palavra-passe"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Não usar pal.-passe"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Para proteger os seus dados do Modo secreto, crie uma palavra-passe. Se utilizar o Modo secreto sem criar uma palavra-passe, não poderá impedir as outras pessoas de verem o seu histórico dos browsers e de procuras, os seus favoritos e as suas páginas guardadas."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Depois de adicionar favoritos, estes serão mostrados aqui."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Defina o seu dispositivo para mostrar um pop-up com a opção de guardar o seu nome de utilizador e palavra-passe quando introduzir as credenciais de utilizador de sites Web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gerir o seu perfil de preenchimento automático."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adicionar aos Favoritos"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmar palavra-passe"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Não tem nenhum separador aberto"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Toque em Novo separador para abrir um separador novo e começar a explorar a Internet."
+
index 66c2767..3dce637 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Toate paginile web vizualizate atunci când Modul Secret este activat nu
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Efectuat"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Introduceți-vă din nou parola pentru a o confirma."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Creare parolă"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nu se util. parola"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Pentru a vă proteja datele din Modul Secret, creați o parolă. Dacă utilizați Modul Secret fără a crea o parolă, nu veți putea împiedica vizualizarea browserului și a istoricului de căutare, a marcajelor și a paginilor salvate de către alte persoane."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "După ce adăugați marcaje, acestea vor fi afișate aici."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Setați dispozitivul să afișeze o fereastră pop-up cu opțiunea de salvare a numelui de utilizator și a parolei atunci când introduceți acreditările de utilizator pentru site-urile web."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Gestionați profilul de Completare automată."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Adăugare la Marcaje"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Confirmare parolă"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nu aveți nicio filă deschisă"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Atingeți Filă nouă pentru a deschide o filă nouă și a începe să explorați internetul."
+
index be9f0c1..629c5c5 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Веб-страницы, просмотренные в секретно
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Готово"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Для подтверждения введите пароль еще раз."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Создать пароль"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не использ. пароль"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Создайте пароль для защиты данных в секретном режиме. Если вы будете использовать секретный режим без пароля, то не сможете никому помешать просмотреть историю браузера и поиска, закладки и сохраненные страницы."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Здесь будут показаны добавленные закладки."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Отображение всплывающего окна с предложением сохранить учетные данные, которые вы вводите на веб-сайтах."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Управление  профилем автозаполнения."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Добавить в Закладки"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Подтверждение пароля"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Открытые вкладки отсутствуют"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Коснитесь пункта “Новая вкладка”, чтобы открыть новую вкладку и начать работу в Интернете."
+
index 7859cfa..de00f6e 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Webové stránky zobrazené pri zapnutej funkcii Tajný režim sa po jej
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Hotovo"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Znova zadajte heslo na jeho potvrdenie."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Vytvorenie hesla"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Nepoužívať heslo"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Vytvorte si heslo na ochranu svojich údajov v aplikácii Tajný režim. Ak budete používať aplikáciu Tajný režim bez vytvorenie hesla, nebudete môcť zabrániť ostatným používateľom, aby si prezerali vašu históriu prehliadača a vyhľadávania, vaše záložky a uložené stránky."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Tu sa zobrazia záložky po ich pridaní."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Zariadenie sa nastaví na zobrazenie kontextového okna s možnosťou uložiť meno používateľa a heslo, keď zadáte používateľské poverenia pre webové lokality."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Môžete spravovať profil automatického vypĺňania."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Pridať do priečinka Záložky"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrďte heslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nemáte otvorené žiadne karty"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Ťuknutím na tlačidlo Nová karta môžete otvoriť novú kartu a začať si prehliadať internetové stránky."
+
index 73f1d3e..78cf18a 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Nobena spletna stran, ki jo odprete, ko je omogočen skrivnostni način,
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Končano"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Znova vnesite geslo, da ga potrdite."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Ustvarjanje gesla"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne uporabi gesla"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Za zaščito podatkov v skrivnostnem načinu ustvarite geslo. Če boste skrivnostni način uporabljali brez gesla, drugim ne boste mogli preprečiti ogledovanja zgodovine brskanja in iskanja, zaznamkov ter shranjenih strani."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Ko dodate zaznamke, bodo prikazani tukaj."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Nastavite, da naprava prikaže pojavno okno z možnostjo shranjevanja uporabniškega imena in gesla, ko vnašate uporabniške poverilnice za spletna mesta."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljanje profila za samodejno izpolnjevanje."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj med zaznamke"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potrdite geslo"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Nimate odprtih zavihkov"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Pritisnite Nov zavihek, da odprete nov zavihek in začnete raziskovati internet."
+
index 7f4b80c..dd833f3 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Sve veb stranice koje ste prikazivali dok je Tajni režim bio omogućen
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Kraj"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ponovo unesite svoju lozinku za njenu potvrdu."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Kreiraj lozinku"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Ne koristi lozinku"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Da biste zaštitili podatke Tajnog režima, kreirajte lozinku. Ako koristite Tajni režim bez kreiranja lozinke, nećete moći da sprečite druge korisnike da prikazuju istoriju vašeg pretraživača i istoriju pretrage, obeleživače i sačuvane stranice."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Nakon što dodate obeleživače, oni će se prikazati ovde."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Podesite da uređaj prikazuje iskačući prozor sa opcijom za čuvanje korisničkog imena i lozinke kada unesete akreditive korisnika za sajtove."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Upravljaj funkcijom Automatsko popunjavanje profila."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Dodaj u obeleživače"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Potvrdite lozinku"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Niste otvorili nijednu karticu"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Kucnite na opciju Nova kartica da biste otvorili novu karticu i započeli istraživanje interneta."
+
index 6fc26d5..566bfaf 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Webbsidor som du tittar på i Hemligt läge visas inte i webb- eller sö
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Klar"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Ange lösenordet igen för att bekräfta det."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Skapa lösenord"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Anv. inte lösenord"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Skydda uppgifterna i Hemligt läge genom att skapa ett lösenord. Om du använder Hemligt läge utan lösenord kan du inte hindra andra från att titta på din webbläsar- och sökhistorik, dina bokmärken och dina sparade sidor."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "När du har lagt till bokmärken visas de här."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Ställ in enheten så att ett popup-fönster visas med möjlighet att spara ditt användarnamn och lösenord när du anger inloggningsuppgifter på webbplatser."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Hantera din Autofyll-profil."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Lägg till i Bokmärken"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Bekräfta lösenordet"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Du har inga öppna flikar"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Öppna en ny flik genom att trycka på Ny flik och börja utforska internet."
+
index d5c4e34..6fba16e 100755 (executable)
@@ -35,7 +35,7 @@ msgid "IDS_BR_BODY_REMEMBER_PREFERENCE"
 msgstr "Tercihi hatırla."
 
 msgid "IDS_BR_BODY_CERTIFICATE_SERIAL_NUMBER"
-msgstr " Seri numarası"
+msgstr "Seri numarası"
 
 msgid "IDS_BR_HEADER_ISSUED_BY_C"
 msgstr "Düzenleyen:"
@@ -2176,3 +2176,36 @@ msgstr "Gizli mod etkinken görüntülenen web sayfaları, Gizli mod devre dış
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Tamam"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Onaylamak için şifrenizi tekrar girin."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Şifre oluştur"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Şifre kullanma"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Gizli mod verilerinizi korumak için bir şifre oluşturun. Gizli modu şifre oluşturmaksızın kullanıyorsanız başkalarının tarayıcı ve arama geçmişinizi, yer imlerinizi ve kayıtlı sayfalarınızı görüntülemesini engelleyemezsiniz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Eklediğiniz yer imleri burada gösterilir."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Cihazınızı, web siteleri için kullanıcı kimlik bilgilerini girdiğinizde kullanıcı adınızı ve şifrenizi kaydetme seçeneğinin bulunduğu bir açılır pencereyi gösterecek şekilde ayarlayın."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Otomatik doldurma profilinizi yönetin."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Yer imlerine ekle"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Şifreyi onayla"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Açık sekmeniz yok"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yeni bir sekme açıp İnterneti keşfetmeye başlamak için Yeni sekme öğesine dokunun."
+
index 37b098b..0ccfe93 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Будь-які веб-сторінки, переглянуті в се
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Готово"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Уведіть пароль ще раз для підтвердження."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Створити пароль"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Не викор. пароль"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Щоб захистити дані секретного режиму, створіть пароль. Якщо секретний режим не захищено паролем, ви не зможете завадити іншим особам переглядати ваш браузер, історію пошуку, закладки та збережені сторінки."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Тут буде відображено закладки, після того як ви їх додасте."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Відображення спливаючого вікна з пропозицією зберегти облікові дані, які ви вводите на веб-сайтах."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Керування профілем автозаповнення."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Додати до закладок"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Підтвердження пароля"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ви ще не відкрили жодної вкладки"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Торкніться «Нова вкладка», щоб відкрити нову вкладку та почати роботу в Інтернеті."
+
index 9cb1f20..71c430b 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "Sir rejimi yoniqligida ko‘rib chiqilgan veb-sahifalarning hech biri Si
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "Bajarildi"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "Parolni tasdiqlash uchun uni qayta kiriting."
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "Parol yaratish"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "Parol ishlatilmasin"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "Sir rejimi ma’lumotlarini himoya qilish uchun parol yarating. Agar Sir rejimidan parol yaratmasdan foydalansangiz, boshqalarning brauzer, qidirish jurnali, xatcho‘plar va saqlangan sahifalaringizni ko‘rishini ta’qiqlay olmaysiz."
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "Xatcho‘plar qo‘shilgandan so‘ng, ular bu yerda ko‘rsatiladi."
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "Veb-saytlar uchun hisob ma’lumotlarini kiritganingizda, qurilmangizni foydalanuvchi nomi va parolni saqlash opsiyasi mavjud qalqib chiquvchi oynani ko‘rsatadigan qilib sozlash."
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "Avtomatik to‘ldirish profilingizni boshqarish."
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "Saqlangan veb-hujjatlarga qo‘shish"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "Parolni tasdiqlash"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "Ochiq panellar mavjud emas"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "Yangi ilovani ochish va Internetni kezish uchun Yangi ilovaga teging."
+
index f4495d9..051bc72 100755 (executable)
@@ -623,7 +623,7 @@ msgid "IDS_BR_OPT_DISABLE_LOW_DATA_USAGE_ABB"
 msgstr "禁用低数据使用量"
 
 msgid "IDS_BR_OPT_DISABLED"
-msgstr "不使用简繁转换"
+msgstr ""
 
 msgid "IDS_BR_OPT_DELETE_SAVED_PAGE_ABB"
 msgstr "删除已保存的页面"
@@ -1178,7 +1178,7 @@ msgid "IDS_BR_BODY_INTERNET_HISTORY_IS_NOT_STORED_ABB"
 msgstr "互联网记录未储存。"
 
 msgid "IDS_BR_BODY_INTERNET"
-msgstr "互联网"
+msgstr "浏览器"
 
 msgid "IDS_BR_BODY_IMPROVE_PERFORMANCE_WHEN_LOADING_PAGES"
 msgstr "改进载入页面时的性能"
@@ -2176,3 +2176,36 @@ msgstr "保密模式启用期间查看的网页在保密模式禁用时不会出
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "完成"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "请再次输入混合密码进行确认。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "创建密码"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不使用密码"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保护您的保密模式数据,请创建混合密码。如果您在不创建混合密码的情况下使用保密模式,您将无法阻止他人查看您的浏览器和搜索历史记录、书签以及已保存的页面。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "添加书签后,其将显示在此处。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "设置您的设备在输入网站用户证书时弹出保存用户名及密码选项的弹窗"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自动填写资料"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "添加到书签"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "确认混合密码"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您没有任何打开的页面"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "点击【新页面】可打开新页面并开始浏览互联网。"
+
index 4b02e23..a9dff05 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "保密模式已啟用時檢視的所有網頁在保密模式已停用時
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "完成"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "再次輸入您的密碼以確認。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "建立密碼"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不要使用密碼"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保護您的保密模式數據,請建立密碼。如果您使用保密模式且未建立密碼,您將無法防止其他人查看您的瀏覽器與搜尋歷程記錄、書籤及已儲存的頁面。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "加入書籤後,其將顯示於此。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "設定裝置以顯示包含在輸入網站用戶憑證時用於儲存用戶名稱與密碼選項的彈出式視窗。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自動填寫個人資料。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "加到書籤"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "確認密碼"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您未開啟任何標籤"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "輕觸 [新標籤] 以開啟新標籤並開始探索互聯網。"
+
index 0f8fb12..5f6934f 100755 (executable)
@@ -2176,3 +2176,36 @@ msgstr "無痕模式停用時,在無痕模式啟用時檢視的任何網頁將
 msgid "IDS_BR_BUTTON2_DONE"
 msgstr "完成"
 
+msgid "IDS_BR_BODY_ENTER_YOUR_PASSWORD_AGAIN_TO_CONFIRM_IT"
+msgstr "請再次輸入密碼以確認。"
+
+msgid "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB"
+msgstr "建立密碼"
+
+msgid "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB"
+msgstr "不要使用密碼"
+
+msgid "IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"
+msgstr "若要保護無痕模式資料,請建立一組密碼。若未建立密碼即使用無痕模式,則無法防止其他使用者檢視您的瀏覽器與搜尋歷程記錄、書籤以及儲存的網頁。"
+
+msgid "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE"
+msgstr "新增書籤後,將顯示於此。"
+
+msgid "IDS_BR_SBODY_SET_YOUR_DEVICE_TO_SHOW_A_POP_UP_WITH_THE_OPTION_MSG"
+msgstr "將您的裝置設為顯示包含選項的彈出視窗,以於輸入網站使用者憑證時儲存您的使用者名稱與密碼。"
+
+msgid "IDS_BR_SBODY_MANAGE_YOUR_AUTO_FILL_PROFILE"
+msgstr "管理您的自動填入設定檔。"
+
+msgid "IDS_BR_BODY_ADD_TO_BOOKMARKS"
+msgstr "加至書籤"
+
+msgid "IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2"
+msgstr "確認密碼"
+
+msgid "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS"
+msgstr "您沒有任何使用中的分頁"
+
+msgid "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET"
+msgstr "輕觸 [新標籤] 即可開啟新標籤並開始探索網際網路。"
+
index a437e6a..7a33bf1 100755 (executable)
@@ -50,14 +50,14 @@ BookmarkFlowUI::BookmarkFlowUI()
     , m_group_item_class(nullptr)
     , m_folder_item_class(nullptr)
     , m_add_to_qa_item_class(nullptr)
-    , m_edjFilePath("")
+    , m_edjFilePath(std::string(EDJE_DIR) + std::string("BookmarkFlowUI/BookmarkFlowUI.edj"))
     , m_title("")
     , m_url("")
+    , m_updateUrl("")
     , m_add_to_qa(false)
+    , m_qa_lock(false)
     , m_state(false)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("BookmarkFlowUI/BookmarkFlowUI.edj");
     createGenlistItemClasses();
 }
 
@@ -66,6 +66,7 @@ BookmarkFlowUI::~BookmarkFlowUI()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     evas_object_smart_callback_del(m_done_button, "clicked", _done_clicked);
     evas_object_smart_callback_del(m_cancel_button, "clicked", _cancel_clicked);
+    evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
 
     if (m_entry_item_class)
         elm_genlist_item_class_free(m_entry_item_class);
@@ -139,6 +140,7 @@ void BookmarkFlowUI::setURL(const std::string& url)
 {
     BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
     m_url = url;
+    m_updateUrl = m_url;
 }
 
 void BookmarkFlowUI::setFolder(services::SharedBookmarkItem bookmarkItem)
@@ -201,7 +203,7 @@ void BookmarkFlowUI::createTopContent()
     m_cancel_button = elm_button_add(m_layout);
     elm_object_part_content_set(m_layout, "title_left_btn", m_cancel_button);
     elm_object_style_set(m_cancel_button, "naviframe/title_left");
-    elm_object_text_set(m_cancel_button, _("IDS_BR_SK_CANCEL"));
+    elm_object_translatable_text_set(m_cancel_button, "IDS_BR_SK_CANCEL");
     evas_object_smart_callback_add(m_cancel_button, "clicked", _cancel_clicked, this);
     evas_object_size_hint_weight_set(m_cancel_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_cancel_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -211,7 +213,7 @@ void BookmarkFlowUI::createTopContent()
     m_done_button = elm_button_add(m_layout);
     elm_object_part_content_set(m_layout, "title_right_btn", m_done_button);
     elm_object_style_set(m_done_button, "naviframe/title_right");
-    elm_object_text_set(m_done_button, _("IDS_BR_BUTTON2_DONE"));
+    elm_object_translatable_text_set(m_done_button, "IDS_BR_BUTTON2_DONE");
     evas_object_smart_callback_add(m_done_button, "clicked", _done_clicked, this);
     evas_object_size_hint_weight_set(m_done_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_done_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -231,19 +233,32 @@ void BookmarkFlowUI::createGenlist()
     elm_genlist_mode_set(m_genlist, ELM_LIST_COMPRESS);
     evas_object_size_hint_weight_set(m_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
 
     elm_object_part_content_set(m_layout, "elm.swallow.content", m_genlist);
     evas_object_show(m_genlist);
 }
 
+void BookmarkFlowUI::_language_changed(void *data, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    if (!data) {
+        BROWSER_LOGE("data is null");
+        return;
+    }
+    auto self = static_cast<BookmarkFlowUI*>(data);
+    self->fillGenlist();
+    elm_genlist_realized_items_update(obj);
+}
+
 void BookmarkFlowUI::fillGenlist()
 {
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     elm_genlist_clear(m_genlist);
 
     //Add title entry
     EntryData *titleEntryData = new EntryData();
-    titleEntryData->category = _("IDS_BR_BODY_TITLE");
-    titleEntryData->entry = m_title;
+    titleEntryData->category = "IDS_BR_BODY_TITLE";
     titleEntryData->bookmarkFlowUI = this;
 
     m_title_entry = elm_genlist_item_append(m_genlist, m_entry_item_class, titleEntryData, nullptr,
@@ -252,8 +267,7 @@ void BookmarkFlowUI::fillGenlist()
     //Add URL entry
     if (m_state) {
         EntryData *urlEntryData = new EntryData();
-        urlEntryData->category = _("IDS_BR_BODY_ADDBOOKMARKURL");
-        urlEntryData->entry = m_url;
+        urlEntryData->category = "IDS_BR_BODY_ADDBOOKMARKURL";
         urlEntryData->bookmarkFlowUI = this;
         m_url_entry = elm_genlist_item_append(m_genlist, m_entry_item_class, urlEntryData, nullptr,
             ELM_GENLIST_ITEM_NONE, nullptr, urlEntryData);
@@ -275,15 +289,17 @@ void BookmarkFlowUI::fillGenlist()
     //Add QuickAccess checkbox
     if (!m_state)
         elm_genlist_item_append(m_genlist, m_add_to_qa_item_class, this, nullptr, ELM_GENLIST_ITEM_NONE,
-            _qa_clicked, this);
+           ((m_add_to_qa && m_qa_lock) ? nullptr :_qa_clicked),
+           ((m_add_to_qa && m_qa_lock) ? nullptr : this));
+
 }
 
 void BookmarkFlowUI::updateTopContent()
 {
     if (m_state)
-        elm_object_translatable_part_text_set(m_layout, "elm.text.title", _("IDS_BR_HEADER_EDIT_BOOKMARK"));
+        elm_object_translatable_part_text_set(m_layout, "elm.text.title", "IDS_BR_HEADER_EDIT_BOOKMARK");
     else
-        elm_object_translatable_part_text_set(m_layout, "elm.text.title", _("IDS_BR_OPT_ADD_BOOKMARK"));
+        elm_object_translatable_part_text_set(m_layout, "elm.text.title", "IDS_BR_OPT_ADD_BOOKMARK");
 }
 
 void BookmarkFlowUI::updateDoneButton()
@@ -315,16 +331,25 @@ Evas_Object *BookmarkFlowUI::_genlist_entry_content_get(void *data, Evas_Object
             evas_object_size_hint_align_set(entry_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
             Evas_Object* entry = elm_entry_add(entry_layout);
+            entryData->limit = tools::EflTools::setEntryLimit(entry,
+                entryData->category != "IDS_BR_BODY_ADDBOOKMARKURL");
             elm_entry_single_line_set(entry, EINA_TRUE);
             elm_entry_scrollable_set(entry, EINA_TRUE);
             evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
             evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
-            elm_entry_entry_set(entry, elm_entry_utf8_to_markup(entryData->entry.c_str()));
-            if (entryData->category == _("IDS_BR_BODY_ADDBOOKMARKURL"))
+            if (entryData->category == "IDS_BR_BODY_TITLE")
+                elm_entry_entry_set(entry, elm_entry_utf8_to_markup(
+                    entryData->bookmarkFlowUI->m_title.c_str()));
+            else if (entryData->category == "IDS_BR_BODY_ADDBOOKMARKURL")
+                elm_entry_entry_set(entry, elm_entry_utf8_to_markup(
+                    entryData->bookmarkFlowUI->m_updateUrl.c_str()));
+
+            if (entryData->category == "IDS_BR_BODY_ADDBOOKMARKURL")
                 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_URL);
 
             ObjectData* objectData = new ObjectData();
             objectData->object = entry_layout;
+            objectData->fieldType = entryData->category;
             objectData->bookmarkFlowUI = entryData->bookmarkFlowUI;
 
             evas_object_smart_callback_add(entry, "changed", _entry_changed, objectData);
@@ -372,7 +397,10 @@ Evas_Object *BookmarkFlowUI::_genlist_add_to_qa_content_get(void *data, Evas_Obj
             bookmarkFlowUI->m_qa_checkbox = elm_check_add(obj);
             evas_object_propagate_events_set(bookmarkFlowUI->m_qa_checkbox, EINA_FALSE);
             elm_check_state_set(bookmarkFlowUI->m_qa_checkbox, bookmarkFlowUI->m_add_to_qa ? EINA_TRUE : EINA_FALSE);
-            evas_object_smart_callback_add(bookmarkFlowUI->m_qa_checkbox, "changed", _add_to_qa_state_changed, bookmarkFlowUI);
+            if (bookmarkFlowUI->m_add_to_qa && bookmarkFlowUI->m_qa_lock)
+                elm_object_disabled_set(bookmarkFlowUI->m_qa_checkbox, true);
+            else
+                evas_object_smart_callback_add(bookmarkFlowUI->m_qa_checkbox, "changed", _add_to_qa_state_changed, bookmarkFlowUI);
             evas_object_show(bookmarkFlowUI->m_qa_checkbox);
             return bookmarkFlowUI->m_qa_checkbox;
         }
@@ -387,7 +415,7 @@ char* BookmarkFlowUI::_genlist_entry_text_get(void *data, Evas_Object *, const c
     if (data && part) {
         if (!strcmp(part, "elm.text")) {
             EntryData *entryData = static_cast<EntryData*>(data);
-            return strdup(entryData->category.c_str());
+            return strdup(_(entryData->category.c_str()));
         }
     } else
         BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
@@ -411,7 +439,7 @@ char* BookmarkFlowUI::_genlist_folder_text_get(void *data, Evas_Object *, const
     if (data && part) {
         FolderData *folderData = static_cast<FolderData*>(data);
         if (!strcmp(part, "elm.text"))
-            return strdup(elm_entry_utf8_to_markup(folderData->name.c_str()));
+            return strdup(elm_entry_utf8_to_markup(_(folderData->name.c_str())));
     } else
         BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
     return nullptr;
@@ -453,7 +481,7 @@ void BookmarkFlowUI::_done_clicked(void * data, Evas_Object *, void *)
         }
 
         if (bookmarkFlowUI->m_add_to_qa)
-            bookmarkFlowUI->addToQuickAccess(bookmarkFlowUI->m_url, bookmarkFlowUI->m_title);
+            bookmarkFlowUI->addToQuickAccess(bookmarkFlowUI->m_updateUrl, bookmarkFlowUI->m_title);
 
         bookmarkFlowUI->closeBookmarkFlowClicked();
         bookmarkFlowUI->m_add_to_qa = false;
@@ -500,6 +528,11 @@ void BookmarkFlowUI::_entry_changed(void * data, Evas_Object * obj, void *)
         else
             elm_object_signal_emit(objectData->object, "elm,action,show,button", "");
         objectData->bookmarkFlowUI->updateDoneButton();
+
+        if (objectData->fieldType == "IDS_BR_BODY_TITLE")
+            objectData->bookmarkFlowUI->m_title = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+        else if (objectData->fieldType == "IDS_BR_BODY_ADDBOOKMARKURL")
+            objectData->bookmarkFlowUI->m_updateUrl = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
     } else
         BROWSER_LOGW("[%s] data or obj = nullptr", __PRETTY_FUNCTION__);
 }
index bc51a6b..b5c3189 100755 (executable)
@@ -59,6 +59,9 @@ class BROWSER_EXPORT BookmarkFlowUI
 public:
     BookmarkFlowUI();
     ~BookmarkFlowUI();
+    BookmarkFlowUI(const BookmarkFlowUI&) = delete;
+    BookmarkFlowUI& operator=(const BookmarkFlowUI&) = delete;
+
     //AbstractUIComponent interface methods
     void init(Evas_Object *parent);
     Evas_Object *getContent();
@@ -69,6 +72,7 @@ public:
     virtual std::string getName();
 
     void setState(bool state);
+    void setQaState(const bool &state) { m_add_to_qa = state; m_qa_lock = state;}
     void setTitle(const std::string& title);
     void setURL(const std::string& title);
     void setFolder(services::SharedBookmarkItem bookmarkItem);
@@ -88,12 +92,18 @@ private:
 
     struct EntryData {
         std::string category;
-        std::string entry;
+        Elm_Entry_Filter_Limit_Size *limit;
         BookmarkFlowUI* bookmarkFlowUI;
+
+        ~EntryData() {
+            if (limit)
+                free(limit);
+        }
     };
 
     struct ObjectData {
         Evas_Object* object;
+        std::string fieldType;
         BookmarkFlowUI* bookmarkFlowUI;
     };
 
@@ -118,6 +128,7 @@ private:
     static char* _genlist_text_get(void* data, Evas_Object*, const char* part);
     static char* _genlist_folder_text_get(void* data, Evas_Object*, const char* part);
     static char* _genlist_add_to_qa_text_get(void* data, Evas_Object*, const char* part);
+    static void _language_changed(void *data, Evas_Object* obj, void*);
 
     static void _done_clicked(void* data, Evas_Object*, void*);
     static void _cancel_clicked(void* data, Evas_Object*, void*);
@@ -148,7 +159,9 @@ private:
     std::string m_edjFilePath;
     std::string m_title;
     std::string m_url;
+    std::string m_updateUrl;
     bool m_add_to_qa;
+    bool m_qa_lock;
     bool m_state;
 };
 
index 0bbcf08..777bdbc 100755 (executable)
@@ -36,26 +36,37 @@ namespace base_ui{
 EXPORT_SERVICE(BookmarkManagerUI, "org.tizen.browser.bookmarkmanagerui")
 
 BookmarkManagerUI::BookmarkManagerUI()
-    : m_parent(nullptr)
+    : m_edjFilePath(std::string(EDJE_DIR) + std::string("BookmarkManagerUI/BookmarkManagerUI.edj"))
+    , m_parent(nullptr)
     , m_content(nullptr)
     , m_modulesToolbar(nullptr)
     , m_navigatorToolbar(nullptr)
+    , m_box(nullptr)
     , m_genlist(nullptr)
     , m_empty_layout(nullptr)
     , m_select_all(nullptr)
+    , m_historyGenlist(nullptr)
     , m_bookmark_item_class(nullptr)
     , m_state(BookmarkManagerState::Default)
     , m_reordered(false)
     , m_selected_count(0)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("BookmarkManagerUI/BookmarkManagerUI.edj");
     createGenlistItemClasses();
 }
 
 BookmarkManagerUI::~BookmarkManagerUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_modulesToolbar) {
+        evas_object_smart_callback_del(m_modulesToolbar, "language,changed", _modules_toolbar_language_changed);
+        evas_object_del(m_modulesToolbar);
+    }
+    if (m_navigatorToolbar) {
+        evas_object_smart_callback_del(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed);
+        evas_object_del(m_modulesToolbar);
+    }
+    if (m_genlist)
+        evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
 
     if (m_bookmark_item_class)
         elm_genlist_item_class_free(m_bookmark_item_class);
@@ -164,10 +175,6 @@ Evas_Object *BookmarkManagerUI::_genlist_bookmark_content_get(void *data, Evas_O
             default:
                 break;
             }
-        } else if (!strcmp(part, "elm.swallow.icon.2") && bookmarkData->bookmarkItem->getPrivate()) {
-            Evas_Object* layout = elm_layout_add(obj);
-            elm_layout_file_set(layout, bookmarkData->bookmarkManagerUI->m_edjFilePath.c_str(), "private_image");
-            return layout;
         }
     } else
         BROWSER_LOGE("[%s:%d] Data or part is null", __PRETTY_FUNCTION__, __LINE__);
@@ -200,6 +207,10 @@ void BookmarkManagerUI::createBookmarksLayout()
 void BookmarkManagerUI::createModulesToolbar()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_modulesToolbar) {
+        evas_object_smart_callback_del(m_modulesToolbar, "language,changed", _modules_toolbar_language_changed);
+        evas_object_del(m_modulesToolbar);
+    }
     m_modulesToolbar = elm_toolbar_add(m_content);
 
     elm_object_style_set(m_modulesToolbar, "tabbar/notitle");
@@ -208,15 +219,35 @@ void BookmarkManagerUI::createModulesToolbar()
     elm_toolbar_transverse_expanded_set(m_modulesToolbar, EINA_TRUE);
     elm_object_part_content_set(m_content, "modules_toolbar", m_modulesToolbar);
     evas_object_show(m_modulesToolbar);
+    evas_object_smart_callback_add(
+        m_modulesToolbar,
+        "language,changed",
+        _modules_toolbar_language_changed,
+        this);
 
     elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_BODY_BOOKMARKS"), _modules_bookmarks_clicked, this);
     elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_MBODY_HISTORY"), _modules_history_clicked, this);
 }
 
+void BookmarkManagerUI::_modules_toolbar_language_changed(void* data, Evas_Object*, void*)
+{
+    if (!data) {
+        BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+    auto self = static_cast<BookmarkManagerUI*>(data);
+    self->createModulesToolbar();
+}
+
 void BookmarkManagerUI::createNavigatorToolbar()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_navigatorToolbar) {
+        evas_object_smart_callback_del(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed);
+        evas_object_del(m_navigatorToolbar);
+    }
     m_navigatorToolbar = elm_toolbar_add(m_content);
+    evas_object_smart_callback_add(m_navigatorToolbar, "language,changed", _navigation_toolbar_language_changed, this);
 
     elm_object_style_set(m_navigatorToolbar, "navigationbar");
     elm_toolbar_shrink_mode_set(m_navigatorToolbar, ELM_TOOLBAR_SHRINK_SCROLL);
@@ -228,6 +259,23 @@ void BookmarkManagerUI::createNavigatorToolbar()
     evas_object_show(m_navigatorToolbar);
 }
 
+void BookmarkManagerUI::_navigation_toolbar_language_changed(void* data , Evas_Object*, void*)
+{
+    if (!data) {
+        BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+    auto self = static_cast<BookmarkManagerUI*>(data);
+    self->createNavigatorToolbar();
+    for (const auto& it : self->m_folder_path)
+        elm_toolbar_item_append(
+            self->m_navigatorToolbar,
+            nullptr,
+            _(it->getTitle().c_str()),
+            _navigatorFolderClicked,
+            self);
+}
+
 void BookmarkManagerUI::createGenlist()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -250,6 +298,7 @@ void BookmarkManagerUI::createGenlist()
     evas_object_size_hint_align_set(m_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
     evas_object_smart_callback_add(m_genlist, "moved", _genlist_bookmark_moved, this);
     evas_object_smart_callback_add(m_genlist, "realized", _genlist_bookmark_realized, this);
+    evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
 
     elm_box_pack_end(m_box, m_genlist);
     evas_object_show(m_genlist);
@@ -268,7 +317,7 @@ void BookmarkManagerUI::createGenlist()
     elm_bg_color_set(bg, 255, 255, 255);
     elm_object_part_content_set(m_select_all, "elm.swallow.bg", bg);
 
-    elm_object_part_text_set(m_select_all, "elm.text", _("IDS_BR_OPT_SELECT_ALL"));
+    elm_object_translatable_part_text_set(m_select_all, "elm.text", "IDS_BR_OPT_SELECT_ALL");
 
     evas_object_event_callback_add(m_select_all, EVAS_CALLBACK_MOUSE_DOWN, _select_all_down, this);
     evas_object_smart_callback_add(checkbox, "changed", _select_all_state_changed, this);
@@ -276,6 +325,12 @@ void BookmarkManagerUI::createGenlist()
     evas_object_show(m_select_all);
 }
 
+void BookmarkManagerUI::_language_changed(void *, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    elm_genlist_realized_items_update(obj);
+}
+
 void BookmarkManagerUI::createEmptyLayout()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -285,8 +340,8 @@ void BookmarkManagerUI::createEmptyLayout()
     evas_object_size_hint_weight_set(m_empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
-    elm_object_translatable_part_text_set(m_empty_layout, "elm.text", _("IDS_BR_BODY_NO_BOOKMARKS"));
-    elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "After you add bookmarks, they will be shown here.");
+    elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_BODY_NO_BOOKMARKS");
+    elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",  "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE");
 
     elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
     elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
@@ -301,7 +356,7 @@ void BookmarkManagerUI::createTopContent()
 
     m_naviframe->addLeftButton(_cancel_clicked, this);
     //TODO: Missing translation. In guidelines this should be uppercase
-    m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL"));
+    m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL");
     m_naviframe->addRightButton(_accept_clicked, this);
     m_naviframe->addPrevButton(_prev_clicked, this);
 }
@@ -409,8 +464,6 @@ void BookmarkManagerUI::_genlist_bookmark_realized(void *, Evas_Object *, void *
 
         if (!bookmarkData->bookmarkItem->is_folder())
             elm_object_item_signal_emit(bookmarkItem, "elm,state,elm.text.sub,visible", "elm");
-        if (bookmarkData->bookmarkItem->getPrivate())
-            elm_object_item_signal_emit(bookmarkItem, "elm,state,elm.swallow.end,visible", "elm");
     } else {
         BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
     }
@@ -424,6 +477,7 @@ void BookmarkManagerUI::_select_all_down(void *data, Evas *, Evas_Object *, void
         Evas_Object *checkbox = elm_object_part_content_get(bookmarkManagerUI->m_select_all, "elm.swallow.end");
         elm_check_state_set(checkbox, !elm_check_state_get(checkbox));
         _select_all_state_changed(bookmarkManagerUI, checkbox, nullptr);
+        elm_object_signal_emit(bookmarkManagerUI->m_select_all, "elm,state,clicked", "elm");
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
@@ -465,7 +519,12 @@ void BookmarkManagerUI::addBookmarkItems(std::shared_ptr<services::BookmarkItem>
             m_folder_path.clear();
         }
         m_folder_path.push_back(parent);
-        elm_toolbar_item_append(m_navigatorToolbar, NULL, parent->getTitle().c_str(), _navigatorFolderClicked, this);
+        elm_toolbar_item_append(
+            m_navigatorToolbar,
+            nullptr,
+            _(parent->getTitle().c_str()),
+            _navigatorFolderClicked,
+            this);
     }
     addFilteredBookmarkItems(BookmarkManagerGenlistFilter::All);
 }
@@ -533,12 +592,8 @@ void BookmarkManagerUI::onBackPressed()
         prepareHistoryContent();
         break;
     case BookmarkManagerState::HistoryView:
-        elm_toolbar_item_selected_set(
-            elm_toolbar_first_item_get(m_modulesToolbar),
-            EINA_TRUE);
-        prepareBookmarksContent();
-        closeBookmarkManagerClicked();
         changeState(BookmarkManagerState::Default);
+        closeBookmarkManagerClicked();
         break;
     default:
         changeState(BookmarkManagerState::Default);
@@ -649,6 +704,7 @@ void BookmarkManagerUI::_navigatorFolderClicked(void* data, Evas_Object*, void*
     if (data) {
         BookmarkManagerUI *bookmarkManagerUI = static_cast<BookmarkManagerUI*>(data);
         Elm_Object_Item *clicked = static_cast<Elm_Object_Item*>(event_info);
+        elm_toolbar_item_selected_set(elm_toolbar_last_item_get(bookmarkManagerUI->m_navigatorToolbar), EINA_TRUE);
         Elm_Object_Item *it = elm_toolbar_last_item_get(bookmarkManagerUI->m_navigatorToolbar);
         if (clicked == it)
             return;
@@ -686,6 +742,7 @@ void BookmarkManagerUI::prepareHistoryContent()
         elm_box_pack_end(m_box, m_historyGenlist);
         evas_object_hide(m_genlist);
         evas_object_show(m_historyGenlist);
+        updateNoHistoryText();
     }
 }
 
@@ -694,7 +751,10 @@ void BookmarkManagerUI::_modules_bookmarks_clicked(void* data, Evas_Object*, voi
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         auto self = static_cast<BookmarkManagerUI*>(data);
-        self->changeState(BookmarkManagerState::Default);
+        if (self->m_state == BookmarkManagerState::HistoryView ||
+            self->m_state == BookmarkManagerState::HistoryDeleteView)
+            self->changeState(BookmarkManagerState::Default);
+        self->m_naviframe->setTitle("IDS_BR_BODY_BOOKMARKS");
         self->prepareBookmarksContent();
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -752,14 +812,14 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state)
         elm_genlist_realized_items_update(m_genlist);
         showNaviframePrevButton(false);
         //TODO: Missing translation. In guidelines this should be uppercase
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+        m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
         showToolbars(true);
         elm_object_signal_emit(m_content, "hide_modules_toolbar", "ui");
         evas_object_hide(m_modulesToolbar);
         break;
     case BookmarkManagerState::Edit:
         m_reordered = false;
-        m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_BOOKMARK"));
+        m_naviframe->setTitle("IDS_BR_HEADER_SELECT_BOOKMARK");
         showToolbars(false);
         evas_object_hide(m_navigatorToolbar);
         break;
@@ -768,7 +828,7 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state)
         elm_genlist_realized_items_update(m_genlist);
         showNaviframePrevButton(false);
         //TODO: Missing translation. In guidelines this should be uppercase
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE"));
+        m_naviframe->setRightButtonText("IDS_BR_SK_DELETE");
         updateDeleteTopContent();
         showToolbars(false);
         evas_object_hide(m_navigatorToolbar);
@@ -780,7 +840,7 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state)
         elm_genlist_realized_items_update(m_genlist);
         showNaviframePrevButton(false);
         //TODO: Missing translation. In guidelines this should be uppercase
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+        m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
         updateDeleteTopContent();
         showToolbars(false);
         evas_object_hide(m_navigatorToolbar);
@@ -788,15 +848,14 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state)
         break;
     case BookmarkManagerState::Reorder:
         showNaviframePrevButton(true);
-        m_naviframe->setTitle(_("IDS_BR_OPT_REORDER_ABB"));
+        m_naviframe->setTitle("IDS_BR_OPT_REORDER_ABB");
         showToolbars(false);
         evas_object_hide(m_navigatorToolbar);
         elm_genlist_reorder_mode_set(m_genlist, EINA_TRUE);
         break;
     case BookmarkManagerState::HistoryView:
-        updateNoBookmarkText();
         showNaviframePrevButton(true);
-        m_naviframe->setTitle(_("IDS_BR_MBODY_HISTORY"));
+        m_naviframe->setTitle("IDS_BR_MBODY_HISTORY");
         showToolbars(true);
         evas_object_hide(m_navigatorToolbar);
         elm_object_part_content_unset(m_content, "navigator_toolbar");
@@ -805,20 +864,21 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state)
         evas_object_hide(m_select_all);
         break;
     case BookmarkManagerState::HistoryDeleteView:
-        updateNoBookmarkText();
-        m_naviframe->setTitle(_("IDS_BR_MBODY_HISTORY"));
+        clearSelection();
+        m_naviframe->setTitle("IDS_BR_MBODY_HISTORY");
         showNaviframePrevButton(false);
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+        m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
         updateDeleteTopContent();
         showToolbars(false);
         evas_object_hide(m_navigatorToolbar);
         break;
     case BookmarkManagerState::Default:
     default:
+        elm_toolbar_item_selected_set(elm_toolbar_first_item_get(m_modulesToolbar), EINA_TRUE);
         updateNoBookmarkText();
         reoderBookmarkItems();
         showNaviframePrevButton(true);
-        m_naviframe->setTitle(_("IDS_BR_BODY_BOOKMARKS"));
+        m_naviframe->setTitle("IDS_BR_BODY_BOOKMARKS");
         showToolbars(true);
         evas_object_show(m_navigatorToolbar);
         elm_object_part_content_set(m_content, "navigator_toolbar", m_navigatorToolbar);
@@ -878,10 +938,9 @@ void BookmarkManagerUI::reoderBookmarkItems()
     if (m_reordered) {
         m_reordered = false;
         Elm_Object_Item *it = elm_genlist_first_item_get(m_genlist);
-        BookmarkData *bookmarkData;
         int order = 1;
         while (it) {
-            bookmarkData = static_cast<BookmarkData*>(elm_object_item_data_get(it));
+            auto bookmarkData = static_cast<BookmarkData*>(elm_object_item_data_get(it));
             if (order !=  bookmarkData->bookmarkItem->getOrder()) {
                 bookmarkData->bookmarkItem->setOrder(order);
                 bookmarkItemOrderEdited(bookmarkData->bookmarkItem);
@@ -894,14 +953,32 @@ void BookmarkManagerUI::reoderBookmarkItems()
 
 void BookmarkManagerUI::updateNoBookmarkText()
 {
-    if (m_map_bookmark.size() ||
-        (m_state == BookmarkManagerState::HistoryView || m_state == BookmarkManagerState::HistoryDeleteView)) {
+    if (m_map_bookmark.size()) {
         evas_object_hide(m_empty_layout);
         elm_object_signal_emit(m_content, "hide_overlay", "ui");
     } else {
+        elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_BODY_NO_BOOKMARKS");
+        elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
+            "IDS_BR_BODY_AFTER_YOU_ADD_BOOKMARKS_THEY_WILL_BE_SHOWN_HERE");
+        evas_object_show(m_empty_layout);
+        elm_object_signal_emit(m_content, "show_overlay", "ui");
+    }
+}
+
+void BookmarkManagerUI::updateNoHistoryText()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (elm_genlist_items_count(m_historyGenlist)==0) {
+        elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_HISTORY");
+        elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
+            "IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE");
         evas_object_show(m_empty_layout);
         elm_object_signal_emit(m_content, "show_overlay", "ui");
     }
+    else {
+        evas_object_hide(m_empty_layout);
+        elm_object_signal_emit(m_content, "hide_overlay", "ui");
+    }
 }
 
 void BookmarkManagerUI::updateDeleteClick(int id)
@@ -919,7 +996,7 @@ void BookmarkManagerUI::updateDeleteTopContent()
     if (m_selected_count)
         m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % m_selected_count).str());
     else
-        m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
+        m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
     m_naviframe->setRightButtonEnabled(m_selected_count);
 }
 
index 639de8c..155edc8 100755 (executable)
@@ -66,6 +66,9 @@ class BROWSER_EXPORT BookmarkManagerUI
 public:
     BookmarkManagerUI();
     ~BookmarkManagerUI();
+    BookmarkManagerUI(const BookmarkManagerUI&) = delete;
+    BookmarkManagerUI& operator=(const BookmarkManagerUI&) = delete;
+
     //AbstractUIComponent interface methods
     void init(Evas_Object *parent);
     void showUI();
@@ -120,6 +123,7 @@ private:
     void insertSelectAll();
     void reoderBookmarkItems();
     void updateNoBookmarkText();
+    void updateNoHistoryText();
     void updateDeleteClick(int id);
     void updateDeleteTopContent();
     void removeHistoryItems();
@@ -147,6 +151,9 @@ private:
     static void _cm_create_folder_clicked(void*, Evas_Object*, void*);
     static char* _genlist_bookmark_text_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object *_genlist_bookmark_content_get(void *data, Evas_Object *obj, const char *part);
+    static void _language_changed(void *, Evas_Object* obj, void*);
+    static void _modules_toolbar_language_changed(void *, Evas_Object* obj, void*);
+    static void _navigation_toolbar_language_changed(void *, Evas_Object* obj, void*);
 
     std::string m_edjFilePath;
 
index aabe58b..90f588e 100755 (executable)
@@ -50,28 +50,6 @@ collections {
         }
     }
 
-    group { name: "private_image";
-        images.image: "internet_ic_private_mode.png" COMP;
-        parts {
-            part {
-                name: "image";
-                type: IMAGE;
-                mouse_events: 1;
-                repeat_events: 0;
-                description {
-                    state: "default" 0.0;
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-                    min: INCOGNITO_IMAGE_SIZE INCOGNITO_IMAGE_SIZE;
-                    max: INCOGNITO_IMAGE_SIZE INCOGNITO_IMAGE_SIZE;
-                    visible: 1;
-                    image.normal: "internet_ic_private_mode.png";
-                    color_class: "AO030";
-                }
-            }
-        }
-    }
-
     group {
         name: "naviframe_content";
         parts {
diff --git a/services/BookmarkManagerUI/images_mob/internet_ic_private_mode.png b/services/BookmarkManagerUI/images_mob/internet_ic_private_mode.png
deleted file mode 100755 (executable)
index 0cb360a..0000000
Binary files a/services/BookmarkManagerUI/images_mob/internet_ic_private_mode.png and /dev/null differ
index 755df7d..df56de7 100755 (executable)
@@ -51,7 +51,7 @@ BookmarkService::BookmarkService()
         return;
     }
 
-    m_root = std::make_shared<BookmarkItem>(ROOT_FOLDER_ID, "", _("IDS_BR_BODY_BOOKMARKS"), "", -1, 1);
+    m_root = std::make_shared<BookmarkItem>(ROOT_FOLDER_ID, "", "IDS_BR_BODY_BOOKMARKS", "", -1, 1);
     m_root->set_folder_flag(true);
 }
 
@@ -132,7 +132,8 @@ std::shared_ptr<BookmarkItem> BookmarkService::addBookmark(
     if (thumbnail && thumbnail->getSize() > 0){
         std::unique_ptr<tizen_browser::tools::Blob> thumb_blob = tizen_browser::tools::EflTools::getBlobPNG(thumbnail);
         if (thumb_blob){
-            unsigned char * thumb = std::move((unsigned char*)thumb_blob->getData());
+            auto thumb =
+                const_cast<unsigned char*>(static_cast<const unsigned char*>(thumb_blob->getData()));
             bp_bookmark_adaptor_set_snapshot(id, thumbnail->getWidth(), thumbnail->getHeight(), thumb, thumb_blob->getLength());
             bookmark->setThumbnail(thumbnail);
         } else
@@ -143,7 +144,8 @@ std::shared_ptr<BookmarkItem> BookmarkService::addBookmark(
     if (favicon && favicon->getSize() > 0){
         std::unique_ptr<tizen_browser::tools::Blob> favicon_blob = tizen_browser::tools::EflTools::getBlobPNG(favicon);
         if (favicon_blob){
-            unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
+            auto fav =
+                const_cast<unsigned char*>(static_cast<const unsigned char*>(favicon_blob->getData()));
             bp_bookmark_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength());
             bookmark->setFavicon(favicon);
         } else
@@ -158,13 +160,14 @@ std::shared_ptr<BookmarkItem> BookmarkService::addBookmark(
     return bookmark;
 }
 
-void BookmarkService::updateBookmarkItemSnapshot(const std::string & url, tools::BrowserImagePtr snapshot)
+void BookmarkService::updateBookmarkItemSnapshot(const std::string& url, tools::BrowserImagePtr snapshot)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     int id = getBookmarkId(url);
     if (id != 0 && snapshot) {
         std::unique_ptr<tools::Blob> snapshot_blob = tools::EflTools::getBlobPNG(snapshot);
-        unsigned char * snap = std::move((unsigned char*)snapshot_blob->getData());
+        auto snap =
+            const_cast<unsigned char*>(static_cast<const unsigned char*>(snapshot_blob->getData()));
         if (bp_bookmark_adaptor_set_snapshot(id, snapshot->getWidth(), snapshot->getHeight(), snap,
                 snapshot_blob->getLength()) < 0)
             errorPrint("bp_history_adaptor_set_snapshot");
@@ -172,7 +175,7 @@ void BookmarkService::updateBookmarkItemSnapshot(const std::string & url, tools:
         BROWSER_LOGW("Snapshot update not handled properly");
 }
 
-bool BookmarkService::editBookmark(const std::string & url, const std::string & title, unsigned int folder_id)
+bool BookmarkService::editBookmark(const std::string& url, const std::string& title, unsigned int folder_id)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     return (update_bookmark_notify(getBookmarkId(url), title.c_str(), url.c_str(), folder_id, -1) == 1);
@@ -505,47 +508,6 @@ bool BookmarkService::deleteBookmark(int id)
     }
 }
 
-bool BookmarkService::delete_by_id_notify(int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    BROWSER_LOGD("id[%d]", id);
-
-    BookmarkItem item;
-    get_item_by_id(id, &item);
-    return deleteBookmark(id);
-}
-
-bool BookmarkService::delete_by_uri(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    BROWSER_LOGD("uri[%s]", uri);
-    bp_bookmark_property_cond_fmt properties;
-    properties.parent = -1;
-    properties.type = 0;
-    properties.is_operator = -1;
-    properties.is_editable = -1;
-    //conditions for querying
-    bp_bookmark_rows_cond_fmt conds;
-    conds.limit = 1;
-    conds.offset = 0;
-    conds.order_offset = BP_BOOKMARK_O_SEQUENCE;
-    conds.ordering = 0;
-    conds.period_offset = BP_BOOKMARK_O_DATE_CREATED;
-    conds.period_type = BP_BOOKMARK_DATE_ALL;
-
-    int *ids = nullptr;
-    int ids_count = -1;
-    int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
-    bool result = false;
-    if (ret >= 0 && ids_count > 0)
-    {
-        result = delete_by_id_notify(ids[0]);
-        free(ids);
-    }
-
-    return result;
-}
-
 int BookmarkService::update_bookmark(int id, const char *title, const char *uri, int parent_id, int order,
                                      bool is_duplicate_check_needed, bool is_URI_check_needed)
 {
@@ -553,7 +515,6 @@ int BookmarkService::update_bookmark(int id, const char *title, const char *uri,
 
     bool is_URI_exist = (uri != nullptr && strlen(uri) > 0);
     bool is_title_exist = (title != nullptr && strlen(title) > 0);
-    int ret = -1;
     if (is_duplicate_check_needed) {
         bp_bookmark_property_cond_fmt properties;
         properties.parent = -1;
@@ -572,7 +533,7 @@ int BookmarkService::update_bookmark(int id, const char *title, const char *uri,
         int ids_count = -1;
         //This is a bookmark item so check for any such URL already exists
         if (is_URI_exist && is_URI_check_needed) {
-            ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
+            auto ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
             free(ids);
             if (ret < 0) {
                 errorPrint("bp_bookmark_adaptor_get_cond_ids_p");
@@ -606,43 +567,6 @@ int BookmarkService::update_bookmark_notify(int id, const char *title, const cha
     return ret;
 }
 
-bool BookmarkService::is_in_bookmark(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    BROWSER_LOGD("uri[%s]", uri);
-
-    int id = 0;
-    return get_id(uri, &id);
-}
-
-bool BookmarkService::get_id(const char *uri, int *bookmark_id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    bp_bookmark_property_cond_fmt properties;
-    properties.parent = -1;
-    properties.type = 0;
-    properties.is_operator = -1;
-    properties.is_editable = -1;
-    //conditions for querying
-    bp_bookmark_rows_cond_fmt conds;
-    conds.limit = 1;
-    conds.offset = 0;
-    conds.order_offset = BP_BOOKMARK_O_SEQUENCE;
-    conds.ordering = 0;
-    conds.period_offset = BP_BOOKMARK_O_DATE_CREATED;
-    conds.period_type = BP_BOOKMARK_DATE_ALL;
-
-    int *ids = nullptr;
-    int ids_count = -1;
-    int ret = bp_bookmark_adaptor_get_cond_ids_p(&ids, &ids_count, &properties, &conds, BP_BOOKMARK_O_URL, uri, 0);
-    bool result = ((ret >= 0) && (ids_count > 0));
-    if (result) {
-        *bookmark_id = ids[0];
-    }
-    free(ids);
-    return result;
-}
-
 bool BookmarkService::get_item_by_id(int id, BookmarkItem *item)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -653,7 +577,7 @@ bool BookmarkService::get_item_by_id(int id, BookmarkItem *item)
     }
 
     if (id == 0) {
-        item->setTitle(_("IDS_BR_BODY_BOOKMARKS"));
+        item->setTitle("IDS_BR_BODY_BOOKMARKS");
         item->setAddress("");
         item->setId(id);
         item->setParent(-1);
index 219362b..12c6383 100755 (executable)
 #include "service_macros.h"
 #include "BookmarkItem.h"
 #include "BrowserImage.h"
-#include "AbstractFavoriteService.h"
+#include "StorageService.h"
 
 namespace tizen_browser{
 namespace services{
 
 class BROWSER_EXPORT BookmarkService
-        : public tizen_browser::interfaces::AbstractFavoriteService
+    : public core::AbstractService
 {
 public:
     BookmarkService();
@@ -131,8 +131,6 @@ public:
      */
     bool getItem(const std::string & url, BookmarkItem *item);
 
-    bool delete_by_id_notify(int id);
-    bool delete_by_uri(const char *uri);
     int update_bookmark(int id, const char *title, const char *uri, int parent_id, int order,
                         bool is_duplicate_check_needed = false, bool is_URI_check_needed = false);
     int update_bookmark_notify(int id, const char *title, const char *uri, int parent_id, int order,
@@ -140,10 +138,12 @@ public:
     bool delete_all(void);
     bool get_item_by_id(int id, BookmarkItem *item);
     int get_count(void);
-    bool get_id(const char *uri, int *bookmark_id);
-    bool is_in_bookmark(const char *uri);
     int getFolderId(const std::string & title, int parent);
 
+    boost::signals2::signal<void (std::shared_ptr<services::BookmarkItem>)> bookmarkAdded;
+    boost::signals2::signal<void (const std::string& uri)> bookmarkDeleted;
+    boost::signals2::signal<void ()> bookmarksDeleted;
+
 private:
     /**
      * Help method printing last bp_bookmark_error_defs error.
index 03b6cd6..76f789d 100755 (executable)
@@ -1,12 +1,14 @@
 project(services)
 
 add_subdirectory(WebEngineService)
+add_subdirectory(WebEngineMin)
 add_subdirectory(QuickAccess)
 add_subdirectory(HistoryUI)
 add_subdirectory(TabUI)
 add_subdirectory(SimpleUI)
 add_subdirectory(SettingsUI)
 add_subdirectory(WebPageUI)
+add_subdirectory(WebPageMin)
 add_subdirectory(BookmarkFlowUI)
 add_subdirectory(BookmarkManagerUI)
 add_subdirectory(StorageService)
index 8a75288..bb1c3e7 100755 (executable)
@@ -57,12 +57,13 @@ EXPORT_SERVICE(CertificateContents, "org.tizen.browser.certificateservice")
 
 CertificateContents::CertificateContents()
     : m_mainLayout(nullptr)
+    , m_genlist(nullptr)
     , m_parent(nullptr)
+    , m_edjFilePath(std::string(EDJE_DIR) + std::string("CertificateService/CertificatePopup.edj"))
     , m_certificate(nullptr)
+    , m_hostType(HOST_TYPE::HOST_ABSENT)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("CertificateService/CertificatePopup.edj");
     elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
 }
 
@@ -89,7 +90,7 @@ void CertificateContents::init()
     }
 }
 
-void CertificateContents::setCurrentTabCertData(std::string host, std::string pem, HOST_TYPE type)
+void CertificateContents::setCurrentTabCertData(const std::string& host, const std::string& pem, const HOST_TYPE& type)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
@@ -258,6 +259,7 @@ Evas_Object* CertificateContents::createGenlist(Evas_Object* parent)
     Elm_Genlist_Item_Class *item_class = elm_genlist_item_class_new();
     if (!item_class) {
         BROWSER_LOGE("elm_genlist_item_class_new for item_class failed");
+        elm_genlist_item_class_free(field_item_class);
         return m_genlist;
     }
     item_class->item_style = "cert_title_value_text";
@@ -279,6 +281,9 @@ Evas_Object* CertificateContents::createGenlist(Evas_Object* parent)
         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
     }
 
+    elm_genlist_item_class_free(field_item_class);
+    elm_genlist_item_class_free(item_class);
+
     return m_genlist;
 }
 
index b044c87..f7bb375 100755 (executable)
@@ -64,7 +64,7 @@ public:
     Evas_Object* getContent();
     void unsecureHostAllowed();
 
-    void setCurrentTabCertData(std::string host, std::string pem, HOST_TYPE type);
+    void setCurrentTabCertData(const std::string& host, const std::string& pem, const HOST_TYPE& type);
     Eina_Bool isValidCertificate() const { return m_hostType == SECURE_HOST; }
     bool isValidCertificate(const std::string& uri);
 
index 458c310..a369aa9 100755 (executable)
@@ -33,6 +33,24 @@ collections { base_scale: 2.6;
                     min: 0 110;
                 }
             }
+            rect { "padding_left"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 0 0;
+                    fixed: 1 1;
+                    rel1.to: "bg";
+                }
+            }
+            rect { "padding_right"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 1 1;
+                    fixed: 1 1;
+                    rel2.to: "bg";
+                }
+            }
             part {
                 name: "auth_text";
                 type: TEXTBLOCK;
@@ -44,12 +62,12 @@ collections { base_scale: 2.6;
                     fixed: 1 0;
                     align: 0 0;
                     rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
+                        to: "padding_left";
+                        relative: 1.0 1.0;
                     }
                     rel2 {
-                        to: "bg";
-                        relative: 1.0 1.0;
+                        to: "padding_right";
+                        relative: 0.0 0.0;
                     }
                     text {
                         style: "auth_text_style";
@@ -71,6 +89,24 @@ collections { base_scale: 2.6;
                     min: 0 70;
                 }
             }
+            rect { "padding_left"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 0 0;
+                    fixed: 1 1;
+                    rel1.to: "bg";
+                }
+            }
+            rect { "padding_right"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 1 1;
+                    fixed: 1 1;
+                    rel2.to: "bg";
+                }
+            }
             part {
                 name: "field_text";
                 type: TEXTBLOCK;
@@ -81,12 +117,12 @@ collections { base_scale: 2.6;
                     max: -1 -1;
                     align: 0 0;
                     rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
+                        to: "padding_left";
+                        relative: 1.0 1.0;
                     }
                     rel2 {
-                        to: "bg";
-                        relative: 1.0 1.0;
+                        to: "padding_right";
+                        relative: 0.0 0.0;
                     }
                     text {
                         style: "field_text_style";
@@ -107,6 +143,24 @@ collections { base_scale: 2.6;
                     min: 0 110;
                 }
             }
+            rect { "padding_left"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 0 0;
+                    fixed: 1 1;
+                    rel1.to: "bg";
+                }
+            }
+            rect { "padding_right"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 1 1;
+                    fixed: 1 1;
+                    rel2.to: "bg";
+                }
+            }
             part {
                 name: "title_text";
                 type: TEXTBLOCK;
@@ -119,12 +173,12 @@ collections { base_scale: 2.6;
                     align: 0 0;
                     color: 80 80 80 255;
                     rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
+                        to: "padding_left";
+                        relative: 1.0 1.0;
                     }
                     rel2 {
-                        to: "bg";
-                        relative: 1.0 1.0;
+                        to: "padding_right";
+                        relative: 0.0 0.0;
                     }
                     text {
                         style: "title_text_style";
@@ -166,6 +220,24 @@ collections { base_scale: 2.6;
                     min: 0 110;
                 }
             }
+            rect { "padding_left"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 0 0;
+                    fixed: 1 1;
+                    rel1.to: "bg";
+                }
+            }
+            rect { "padding_right"; scale;
+                description { "default";
+                    min: 32 0;
+                    max: 32 0;
+                    align: 1 1;
+                    fixed: 1 1;
+                    rel2.to: "bg";
+                }
+            }
             part {
                 name: "auth_text";
                 type: TEXTBLOCK;
@@ -175,12 +247,12 @@ collections { base_scale: 2.6;
                     min: 632 100;
                     max: -1 -1;
                     rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
+                        to: "padding_left";
+                        relative: 1.0 1.0;
                     }
                     rel2 {
-                        to: "bg";
-                        relative: 1.0 1.0;
+                        to: "padding_right";
+                        relative: 0.0 0.0;
                     }
                     text {
                         style: "text_style";
index f82591c..8244144 100755 (executable)
@@ -19,7 +19,6 @@
 #define FIND_WORD_MAX_COUNT 10000
 #define FIND_ON_PAGE_MAX_TEXT 1000
 
-#include <Elementary.h>
 #include <vector>
 #include <string>
 #include <string.h>
@@ -36,15 +35,16 @@ namespace base_ui{
 EXPORT_SERVICE(FindOnPageUI, "org.tizen.browser.findonpageui")
 
 FindOnPageUI::FindOnPageUI()
-    : m_fop_layout(NULL)
-    , m_entry(NULL)
-    , m_down_button(NULL)
-    , m_up_button(NULL)
-    , m_clear_button(NULL)
-    , m_parent(NULL)
+    : m_parent(nullptr)
+    , m_fop_layout(nullptr)
+    , m_entry(nullptr)
+    , m_down_button(nullptr)
+    , m_up_button(nullptr)
+    , m_clear_button(nullptr)
+    , m_limit(nullptr)
     , m_total_count(0)
     , m_current_index(0)
-    , m_input_word(NULL)
+    , m_input_word(nullptr)
     , m_isVisible(false)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -61,10 +61,12 @@ FindOnPageUI::~FindOnPageUI(void)
 
     evas_object_smart_callback_del(m_entry, "activated", __enter_key_cb);
     evas_object_smart_callback_del(m_entry, "changed", __entry_changed_cb);
-    evas_object_smart_callback_del(m_entry, "clicked", __entry_clicked_cb);
 
     evas_object_del(m_fop_layout);
     eina_stringshare_del(m_input_word);
+
+    if (m_limit)
+        free(m_limit);
 }
 
 void FindOnPageUI::show()
@@ -73,7 +75,6 @@ void FindOnPageUI::show()
     if (!m_fop_layout)
         m_fop_layout = createFindOnPageUILayout();
     showUI();
-    show_ime();
 }
 
 void FindOnPageUI::init(Evas_Object* parent)
@@ -108,6 +109,8 @@ void FindOnPageUI::set_text(const char *text)
     elm_entry_entry_append(m_entry, markup_text);
     if (markup_text)
         free(markup_text);
+    if (elm_entry_is_empty(m_entry))
+        show_ime();
 }
 
 void FindOnPageUI::clear_text(void)
@@ -140,21 +143,23 @@ Evas_Object* FindOnPageUI::createFindOnPageUILayout()
 
     // Entry.
     m_entry = elm_entry_add(m_fop_layout);
-    elm_object_style_set(m_entry, "fop_entry");
+    m_limit = tools::EflTools::setEntryLimit(m_entry);
+    tools::EflTools::setExpandHints(m_entry);
     elm_entry_single_line_set(m_entry, EINA_TRUE);
     elm_entry_scrollable_set(m_entry, EINA_TRUE);
     elm_entry_autocapital_type_set(m_entry, ELM_AUTOCAPITAL_TYPE_NONE);
     elm_entry_cnp_mode_set(m_entry, ELM_CNP_MODE_PLAINTEXT);
     elm_entry_input_panel_enabled_set(m_entry, EINA_TRUE);
     elm_entry_input_panel_return_key_type_set(m_entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH);
-
-    evas_object_size_hint_weight_set(m_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    elm_entry_text_style_user_push(m_entry, "DEFAULT='font=Tizen:style=Light font_size=36'");
 
     evas_object_smart_callback_add(m_entry, "activated", __enter_key_cb, this);
     evas_object_smart_callback_add(m_entry, "changed", __entry_changed_cb, this);
-    evas_object_smart_callback_add(m_entry, "clicked", __entry_clicked_cb, this);
 
-    elm_object_translatable_part_text_set(m_entry, "elm.guide", "IDS_BR_OPT_FIND_ON_PAGE");
+    elm_object_translatable_part_text_set(m_entry, "elm.guide",
+                    (std::string("<font=Tizen:style=Light font_size=36>") +
+                    std::string(_("IDS_BR_OPT_FIND_ON_PAGE")) +
+                    std::string("</font>")).c_str());
 
     static Elm_Entry_Filter_Limit_Size limit_filter_data;
     limit_filter_data.max_byte_count = 0;
@@ -164,30 +169,38 @@ Evas_Object* FindOnPageUI::createFindOnPageUILayout()
     elm_object_part_content_set(m_fop_layout, "elm.swallow.entry", m_entry);
 
     // Clear button
-    m_clear_button = elm_button_add(m_fop_layout);
-    elm_object_style_set(m_clear_button, "basic_button");
+    m_clear_button = elm_button_add(m_fop_layout);;
+    elm_object_style_set(m_clear_button, "custom");
     elm_atspi_accessible_name_set(m_clear_button, _("IDS_BR_OPT_CLEAR_ALL"));
     evas_object_smart_callback_add(m_clear_button, "clicked", __clear_clicked_cb, this);
-    elm_object_part_content_set(m_fop_layout, "clear_button_click", m_clear_button);
+
+    elm_object_part_content_set(m_fop_layout, "elm.swallow.button", m_clear_button);
+
+    Evas_Object *icon = elm_icon_add(m_clear_button);
+    elm_image_file_set(icon, m_edjFilePath.c_str(), "toolbar_input_ic_cancel.png");
+    elm_object_part_content_set(m_clear_button, "elm.swallow.content", icon);
 
     // Down button.
     m_down_button = elm_button_add(m_fop_layout);
-    elm_object_style_set(m_down_button, "basic_button");
+    elm_object_style_set(m_down_button, "custom");
     elm_atspi_accessible_name_set(m_down_button, _("IDS_BR_SK_NEXT"));
     evas_object_smart_callback_add(m_down_button, "clicked", __down_clicked_cb, this);
     elm_object_part_content_set(m_fop_layout, "down_button_click", m_down_button);
 
+    icon = elm_icon_add(m_down_button);
+    elm_image_file_set(icon, m_edjFilePath.c_str(), "find_on_page_prev.png");
+    elm_object_part_content_set(m_down_button, "elm.swallow.content", icon);
+
     // Up button.
     m_up_button = elm_button_add(m_fop_layout);
-    elm_object_style_set(m_up_button, "basic_button");
+    elm_object_style_set(m_up_button, "custom");
     elm_atspi_accessible_name_set(m_up_button, _("IDS_BR_SK_PREVIOUS"));
     evas_object_smart_callback_add(m_up_button, "clicked", __up_clicked_cb, this);
     elm_object_part_content_set(m_fop_layout, "up_button_click", m_up_button);
 
-    Evas_Object *close_click = elm_button_add(m_fop_layout);
-    elm_object_style_set(close_click, "basic_button");
-    evas_object_smart_callback_add(close_click, "clicked", __close_clicked_cb, this);
-    elm_object_part_content_set(m_fop_layout, "close_click", close_click);
+    icon = elm_icon_add(m_up_button);
+    elm_image_file_set(icon, m_edjFilePath.c_str(), "find_on_page_next.png");
+    elm_object_part_content_set(m_up_button, "elm.swallow.content", icon);
 
     elm_object_part_content_set(m_parent, "findonpage", m_fop_layout);
     _set_count(0, 0);
@@ -212,13 +225,6 @@ void FindOnPageUI::hideUI()
     m_isVisible = false;
 }
 
-void FindOnPageUI::__close_clicked_cb(void* data, Evas_Object*, void*)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
-    fop->closeFindOnPageUIClicked();
-}
-
 void FindOnPageUI::_set_count(int index, int total)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -236,19 +242,19 @@ void FindOnPageUI::_set_count(int index, int total)
         digit_count = 1;
 
     const char *elm_text = elm_entry_entry_get(m_entry);
-    if (elm_text == NULL || strlen(elm_text) == 0) {
+    if (elm_text == nullptr || strlen(elm_text) == 0) {
         // Show 0/0
         elm_object_signal_emit(m_fop_layout, "digit_1,signal", "");
     } else {
         // Change count layout size.
-        snprintf(text_buffer,sizeof(text_buffer), "digit_%d,signal", digit_count);
+        snprintf(text_buffer, sizeof(text_buffer), "digit_%d,signal", digit_count);
         elm_object_signal_emit(m_fop_layout, text_buffer, "");
     }
 
     snprintf(text_buffer, sizeof(text_buffer),"%d/%d", index, total);
-    elm_object_part_text_set(m_fop_layout, "elm.text.count", text_buffer);
+    elm_object_translatable_part_text_set(m_fop_layout, "elm.text.count", text_buffer);
 
-    if (total <= 1) {
+    if (total < 1) {
         BROWSER_LOGD("total %d", total);
         _disable_up_button(EINA_TRUE);
         _disable_down_button(EINA_TRUE);
@@ -297,13 +303,6 @@ void FindOnPageUI::__text_found_cb(void *data, Evas_Object* /*obj*/, void *event
         fop->m_current_index = fop->m_total_count;
     fop->_set_count(fop->m_current_index, fop->m_total_count);
 }
-void FindOnPageUI::__entry_clicked_cb(void *data, Evas_Object*/*obj*/, void* /*event_info*/)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto fop = static_cast<FindOnPageUI*>(data);
-    if (fop)
-        fop->show_ime();
-}
 
 void FindOnPageUI::__entry_changed_cb(void *data, Evas_Object *obj, void* /*event_info*/)
 {
@@ -314,7 +313,7 @@ void FindOnPageUI::__entry_changed_cb(void *data, Evas_Object *obj, void* /*even
     const char *elm_text = elm_entry_entry_get(obj);
     if (!elm_text || strlen(elm_text) == 0) {
         fop->_set_count(0, 0);
-        elm_object_signal_emit(fop->m_fop_layout, "hide,clear,button,signal", "");
+        elm_object_signal_emit(fop->m_fop_layout, "elm,action,hide,button", "");
         eina_stringshare_replace(&fop->m_input_word, "");
         // On deleting last character, send empty string to clear the highlight.
         struct FindData fd = {"", EINA_FALSE, NULL, NULL};
@@ -325,7 +324,7 @@ void FindOnPageUI::__entry_changed_cb(void *data, Evas_Object *obj, void* /*even
     char *text = elm_entry_markup_to_utf8(elm_text);
     BROWSER_LOGD("Previous text=[%s], Current text[%s]", fop->m_input_word ? fop->m_input_word : "", text);
 
-    elm_object_signal_emit(fop->m_fop_layout, "show,clear,button,signal", "");
+    elm_object_signal_emit(fop->m_fop_layout, "elm,action,show,button", "");
 
     if (strlen(text) >= FIND_ON_PAGE_MAX_TEXT) {
 
@@ -382,10 +381,10 @@ void FindOnPageUI::__clear_clicked_cb(void *data, Evas_Object* /*obj*/, void* /*
     elm_entry_entry_set(fop->m_entry, "");
     fop->_set_count(0, 0);
     elm_object_focus_set(fop->m_entry, EINA_TRUE);
-    elm_object_signal_emit(fop->m_fop_layout, "hide,clear,button,signal", "");
+    elm_object_signal_emit(fop->m_fop_layout, "elm,action,hide,button", "");
 }
 
-void FindOnPageUI::__down_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
+void FindOnPageUI::__up_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
@@ -408,7 +407,7 @@ void FindOnPageUI::__down_clicked_cb(void *data, Evas_Object *obj, void* /*event
     elm_object_focus_set(obj, EINA_TRUE);
 }
 
-void FindOnPageUI::__up_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
+void FindOnPageUI::__down_clicked_cb(void *data, Evas_Object *obj, void* /*event_info*/)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     FindOnPageUI *fop = static_cast<FindOnPageUI*>(data);
index 87d94cd..f3c73c1 100755 (executable)
@@ -19,6 +19,7 @@
 
 #include <Evas.h>
 #include <boost/signals2/signal.hpp>
+#include <Elementary.h>
 
 #include "AbstractUIComponent.h"
 #include "AbstractService.h"
@@ -72,17 +73,17 @@ private:
     static void __down_clicked_cb(void *data, Evas_Object *obj, void *event_info);
     static void __up_clicked_cb(void *data, Evas_Object *obj, void *event_info);
     static void __enter_key_cb(void *data, Evas_Object *obj, void *event_info);
-    static void __entry_clicked_cb(void *data, Evas_Object *obj, void *event_info);
     static void __entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
     static void __text_found_cb(void *data, Evas_Object *obj, void *event_info);
-    static void __close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 
+    Evas_Object *m_parent;
     Evas_Object *m_fop_layout;
     Evas_Object *m_entry;
     Evas_Object *m_down_button;
     Evas_Object *m_up_button;
     Evas_Object *m_clear_button;
-    Evas_Object *m_parent;
+
+    Elm_Entry_Filter_Limit_Size *m_limit;
 
     int m_total_count;
     int m_current_index;
index d23b79e..4170be5 100755 (executable)
+#include "../../../core/Tools/edc/CustomButton.edc"
 
 collections {
-   #if PROFILE_MOBILE
-        base_scale: 2.6;
-   #else
-        base_scale: 2.0;
-   #endif
-   group{
-      name: "elm/button/base/basic_button";
-      parts {
-         part{
-            name: "button";
-            type: RECT;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               color: 0 0 0 0;
-            }
-         }
-         part{
-            name: "over";
-            type: RECT;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "button";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "button";
-               }
-               color: 0 0 0 0;
-            }
-         }
-      }
-      programs{
-         program {
-            name: "mouse_click";
-            signal: "mouse,clicked,1";
-            source: "over";
-            script {
-               emit("elm,action,click", "");
-            }
-         }
-      }
-   }
-   group {
-      name: "elm/entry/selection/fop_entry";
-      parts {
-         part {
-            name: "bg";
-            scale:1;
-            type: RECT;
-            mouse_events: 0;
-            description {
-               state: "default" 0.0;
-               color: 224 237 251 255;
-            }
-         }
-      }
-   }
-   group {
-      name: "elm/entry/cursor/fop_entry";
-      parts {
-         part {
-            name: "bg";
-            scale:1;
-            type: RECT;
-            mouse_events: 0;
-            description {
-               state: "default" 0.0;
-               color: 22 120 237 255;
-               min: 2 42;
-               max: 2 42;
-               visible: 0;
-            }
-            description {
-               state: "focused" 0.0;
-               inherit: "default" 0.0;
-               visible: 1;
-            }
-         }
-      }
-      programs {
-         program {
-            name: "focused";
-            signal: "elm,action,focus";
-            source: "elm";
-            action: STATE_SET "focused" 0.0;
-            target: "bg";
-         }
-         program {
-            name: "unfocused";
-            signal: "elm,action,unfocus";
-            source: "elm";
-            action: STATE_SET "default" 0.0;
-            target: "bg";
-         }
-      }
-   }
-   group {
-      name: "elm/entry/base-single/fop_entry";
-      styles {
-         style {
-            name: "fop-entry-style-unselected";
-            base: "font=Sans font_size="28" wrap=none color=#969696";
-            tag:  "br" "";
-         }
-         style {
-            name: "fop-entry-style-selected";
-            base: "font=Sans font_size="28" wrap=none color=#4088d3";
-            tag:  "br" "";
-         }
-      }
-      parts {
-         part {
-            name: "bg";
-            scale:1;
-            type: RECT;
-            mouse_events: 0;
-            description {
-               state: "default" 0.0;
-               color: 255 255 255 255;
-            }
-         }
-         part {
-            name: "elm.guide";
-            scale:1;
-            type: TEXTBLOCK;
-            mouse_events: 0;
-            description {
-               state: "default" 0.0;
-               rel1.relative: 0.0 0.0;
-               rel2.relative: 1.0 1.0;
-               align: 0.0 0.0;
-               text {
-                  style: "fop-entry-style-unselected";
-                  min: 0 1;
-               }
-            }
-            description {
-               state: "hidden" 0.0;
-               inherit: "default" 0.0;
-               visible: 0;
-            }
-         }
-         part {
-            name: "label.text.clip";
-            scale:1;
-            type: RECT;
-            description {
-               state: "default" 0.0;
-            }
-         }
-         part {
-            name: "elm.text";
-            scale:1;
-            multiline: 0;
-            entry_mode: EDITABLE;
-            select_mode: DEFAULT;
-            cursor_mode: BEFORE;
-            type: TEXTBLOCK;
-            clip_to: "label.text.clip";
-            source: "elm/entry/selection/fop_entry";
-            source4: "elm/entry/cursor/fop_entry";
-            description {
-               state: "default" 0.0;
-               max: -1 82;
-               rel1.relative: 0.0 0.0;
-               rel2.relative: 1.0 1.0;
-               align: 0.0 0.0;
-               text {
-                  style: "fop-entry-style-selected";
-                  min: 0 1;
-               }
-            }
-         }
-      }
-      programs {
-         program {
-            name: "focus";
-            signal: "load";
-            source: "";
-            action: FOCUS_SET;
-            target: "elm.text";
-         }
-         program {
-            name: "gdisabled";
-            signal: "elm,guide,disabled";
-            source: "elm";
-            action: STATE_SET "hidden" 0.0;
-            target: "elm.guide";
-         }
-         program {
-            name: "genabled";
-            signal: "elm,guide,enabled";
-            source: "elm";
-            action: STATE_SET "default" 0.0;
-            target: "elm.guide";
-         }
-      }
-   }
+   base_scale: 2.6;
+
+   IMAGE_BUTTON("find_on_page_next.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "find_on_page_next.png")
+   IMAGE_BUTTON("find_on_page_prev.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "find_on_page_prev.png")
+
    group {
       name: "find-on-page-layout";
       images {
-         image: "btn_bar_stop_nor.png" COMP;
-         image: "find_on_page_prev.png" COMP;
-         image: "find_on_page_next.png" COMP;
          image: "web_shadow.png" COMP;
       }
       color_classes{
@@ -219,10 +16,6 @@ collections {
             name: "focusBgColor";
             color: 69 143 255 255;
          }
-         color_class{
-            name: "transparent";
-            color: 0 0 0 0;
-         }
       }
       styles {
          style {
@@ -239,7 +32,7 @@ collections {
                state: "default" 0.0;
                color: 247 247 247 255;
                align: 0 0;
-               min: 720 104;
+               min: 0 104;
                max: -1 104;
                rel1 {
                   relative: 0.0 0.0;
@@ -269,16 +62,16 @@ collections {
                }
             }
          }
-         part {
+         rect {
             name: "entry_bg";
-            type: SPACER;
             scale: 1;
             description {
                state: "default" 0.0;
-               min: 350 92;
-               max: -1 92;
+               min: 0 80;
+               max: -1 80;
                align: 0.0 0.5;
                fixed: 0 1;
+               color: 255 255 255 255;
                rel1 {
                   relative: 1.0 0.0;
                   to: "entry_spacer";
@@ -295,8 +88,8 @@ collections {
             scale: 1;
             description {
                state: "default" 0.0;
-               min: 350 92;
-               max: -1 92;
+               min: 0 80;
+               max: -1 80;
                align: 0.0 0.5;
                fixed: 0 1;
                rel1 {
@@ -304,108 +97,58 @@ collections {
                   to: "entry_bg";
                }
                rel2 {
-                  relative: 0.0 1.0;
-                  to_x: "clear_button_bg";
-                  to_y: "entry_bg";
-               }
-            }
-         }
-         part {
-            name: "clear_button_spacer";
-            scale:1;
-            mouse_events: 1;
-            type: SPACER;
-            description {
-               state: "default" 0.0;
-               fixed: 1 1;
-               align: 1 0.5;
-               min: 10 92;
-               max: 10 92;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "entry_bg";
-               }
-               rel2 {
                   relative: 1.0 1.0;
                   to: "entry_bg";
                }
             }
-         }
-         part {
-            name: "clear_button_bg";
-            scale:1;
-            mouse_events: 1;
-            type: RECT;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               align: 1 0.5;
-               min: 42 92;
-               max: 42 92;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "entry_bg";
-               }
-               rel2 {
-                  relative: 0.0 1.0;
-                  to: "clear_button_spacer";
-               }
-               color_class: transparent;
-            }
-         }
-         part {
-            name: "clear_button_icon";
-            type: IMAGE;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 0;
-               fixed: 1 1;
-               align: 0 .5;
-               min: 42 46;
-               max: 42 46;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "clear_button_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "clear_button_bg";
-               }
-               image.normal: "btn_bar_stop_nor.png";
-            }
-            description {
-               state: "show" 0.0;
-               inherit: "default" 0.0;
-               visible: 1;
-            }
-         }
-         part {
-            name: "clear_button_click";
-            scale:1;
-            type: SWALLOW;
-            description {
-               state: "default" 0.0;
-               visible: 0;
-               align: 0 .5;
-               fixed: 1 1;
-               min: 42 46;
-               max: 42 46;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "clear_button_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "clear_button_bg";
-               }
-               color_class: transparent;
-            }
-            description {
-               state: "show" 0.0;
-               inherit: "default" 0.0;
-               visible: 1;
+            description { "show_button";
+                inherit: "default" 0.0;
+                rel2 {
+                    relative: 0.0 1.0;
+                    to: "elm.swallow.button_left_padding";
+                }
+            }
+         }
+         spacer { "elm.swallow.button_left_padding"; scale;
+            description { "default";
+                min: 10 0;
+                max: 10 -1;
+                fixed: 1 0;
+                align: 1.0 0.5;
+                rel1.to: "entry_bg";
+                rel2 {
+                    to_x: "elm.swallow.button";
+                    to_y: "entry_bg";
+                    relative: 0.0 1.0;
+                }
+            }
+         }
+         swallow { "elm.swallow.button"; scale;
+            description { "default";
+                min: 80 80;
+                max: 80 80;
+                align: 1.0 0.5;
+                fixed: 1 1;
+                visible: 0;
+                rel1.to: "entry_bg";
+                rel2 {
+                    relative: 0.0 1.0;
+                    to: "elm.swallow.button_right_padding";
+                }
+            }
+            description { "show_button";
+                inherit: "default";
+                visible: 1;
+            }
+         }
+         spacer { "elm.swallow.button_right_padding"; scale;
+            description { "default";
+                min: 10 0;
+                max: 10 -1;
+                fixed: 1 0;
+                align: 1.0 0.5;
+                rel1.to: "entry_bg";
+                rel2.to: "entry_bg";
             }
          }
          part {
@@ -414,17 +157,17 @@ collections {
             scale: 1;
             description {
                state: "default" 0.0;
-               min: 10 104;
-               max: 10 104;
+               min: 40 104;
+               max: 40 104;
                fixed: 1 1;
-               align: 1 0;
+               align: 1 .5;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg_clipper";
                }
                rel2 {
                   relative: 0.0 1.0;
-                  to: "down_button_bg";
+                  to: "down_button_click";
                }
             }
          }
@@ -434,9 +177,9 @@ collections {
             scale: 1;
             description {
                state: "default" 0.0;
-               min: 110 104;
-               max: 110 104;
-               fixed: 1 1;
+               min: 0 104;
+               max: 72 104;
+               fixed: 0 1;
                align: 1 .5;
                rel1 {
                   relative: 0.0 0.0;
@@ -459,68 +202,17 @@ collections {
             description {
                state: "default" 0.0;
                fixed: 1 1;
-               align: 1 0;
-               min: 10 104;
-               max: 10 104;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "bg_clipper";
-               }
-               rel2 {
-                  relative: 0.0 1.0;
-                  to: "close_bg";
-               }
-            }
-         }
-         part {
-            name: "up_button_bg";
-            scale:1;
-            mouse_events: 1;
-            type: RECT;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
                align: 1 0.5;
-               min: 56 56;
-               max: 56 56;
+               min: 24 104;
+               max: 24 104;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg_clipper";
                }
                rel2 {
-                  relative: 0.0 1.0;
-                  to: "up_button_spacer";
-               }
-               color_class: transparent;
-            }
-            description {
-               state: "highlight" 0.0;
-               inherit: "default" 0.0;
-               color_class: focusBgColor;
-               visible: 1;
-            }
-         }
-         part {
-            name: "up_button_icon";
-            type: IMAGE;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               align: 0 0;
-               min: 56 56;
-               max: 56 56;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "up_button_bg";
-               }
-               rel2 {
                   relative: 1.0 1.0;
-                  to: "up_button_bg";
+                  to: "bg_clipper";
                }
-               image.normal: "find_on_page_prev.png";
             }
          }
          part {
@@ -530,19 +222,18 @@ collections {
             description {
                state: "default" 0.0;
                visible: 1;
-               align: 0 0;
+               align: 1 .5;
                fixed: 1 1;
-               min: 56 56;
-               max: 56 56;
+               min: 80 80;
+               max: 80 80;
                rel1 {
                   relative: 0.0 0.0;
-                  to: "up_button_bg";
+                  to: "bg_clipper";
                }
                rel2 {
-                  relative: 1.0 1.0;
-                  to: "up_button_bg";
+                  relative: 0.0 1.0;
+                  to: "up_button_spacer";
                }
-               color_class: transparent;
             }
          }
          part {
@@ -552,31 +243,30 @@ collections {
             description {
                state: "default" 0.0;
                fixed: 1 1;
-               align: 1  0;
-               min: 10 104;
-               max: 10 104;
+               align: 1 .5;
+               min: 48 104;
+               max: 48 104;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg_clipper";
                }
                rel2 {
                   relative: 0.0 1.0;
-                  to: "up_button_bg";
+                  to: "up_button_click";
                }
             }
          }
          part {
-            name: "down_button_bg";
+            name: "down_button_click";
             scale:1;
-            mouse_events: 1;
-            type: RECT;
+            type: SWALLOW;
             description {
                state: "default" 0.0;
                visible: 1;
                fixed: 1 1;
                align: 1 .5;
-               min: 56 56;
-               max: 56 56;
+               min: 80 80;
+               max: 80 80;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg_clipper";
@@ -585,57 +275,6 @@ collections {
                   relative: 0.0 1.0;
                   to: "down_button_spacer";
                }
-               color_class: transparent;
-            }
-            description {
-               state: "highlight" 0.0;
-               inherit: "default" 0.0;
-               color_class: focusBgColor;
-               visible: 1;
-            }
-         }
-         part {
-            name: "down_button_icon";
-            type: IMAGE;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               align: 0 0;
-               min: 56 56;
-               max: 56 56;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "down_button_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "down_button_bg";
-               }
-               image.normal: "find_on_page_next.png";
-            }
-         }
-         part {
-            name: "down_button_click";
-            scale:1;
-            type: SWALLOW;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               align: 0 0;
-               fixed: 1 1;
-               min: 56 56;
-               max: 56 56;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "down_button_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "down_button_bg";
-               }
-               color_class: transparent;
             }
          }
          part {
@@ -645,9 +284,9 @@ collections {
             description {
                state: "default" 0.0;
                fixed: 1 1;
-               align: 1  0;
-               min: 10 104;
-               max: 10 104;
+               align: 1 0;
+               min: 40 104;
+               max: 40 104;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg_clipper";
@@ -659,105 +298,6 @@ collections {
             }
          }
          part {
-            name: "close_spacer";
-            scale:1;
-            mouse_events: 1;
-            type: SPACER;
-            description {
-               state: "default" 0.0;
-               fixed: 1 1;
-               align: 1 .5;
-               min: 10 104;
-               max: 10 104;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "bg_clipper";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "bg_clipper";
-               }
-            }
-         }
-         part {
-            name: "close_bg";
-            scale:1;
-            mouse_events: 1;
-            type: RECT;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               align: 1 .5;
-               min: 46 54;
-               max: 46 54;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "bg_clipper";
-               }
-               rel2 {
-                  relative: 0.0 1.0;
-                  to: "close_spacer";
-               }
-               color_class: transparent;
-            }
-            description {
-               state: "highlight" 0.0;
-               inherit: "default" 0.0;
-               color_class: focusBgColor;
-               visible: 1;
-            }
-         }
-         part {
-            name: "close_icon";
-            type: IMAGE;
-            scale: 1;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               fixed: 1 1;
-               align: 0 0;
-               min: 46 54;
-               max: 46 54;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "close_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "close_bg";
-               }
-               image.normal: "btn_bar_stop_nor.png";
-            }
-            description {
-               state: "highlight" 0.0;
-               inherit: "default" 0.0;
-               visible: 1;
-            }
-         }
-         part {
-            name: "close_click";
-            scale:1;
-            type: SWALLOW;
-            description {
-               state: "default" 0.0;
-               visible: 1;
-               align: 0 0;
-               fixed: 1 1;
-               min: 46 54;
-               max: 46 54;
-               rel1 {
-                  relative: 0.0 0.0;
-                  to: "close_bg";
-               }
-               rel2 {
-                  relative: 1.0 1.0;
-                  to: "close_bg";
-               }
-               color_class: transparent;
-            }
-         }
-         part {
             name: "fop_bar_shadow";
             type: IMAGE;
             scale: 1;
@@ -782,71 +322,19 @@ collections {
          }
       }
       programs{
-         program {
-            name: "mouse_down_close_click";
-            signal: "mouse,down,1";
-            source: "close_click";
-            action: STATE_SET "highlight" 0.0;
-            target: "close_bg";
-            target: "close_icon";
-         }
-         program {
-            name: "mouse_up_close_click";
-            signal: "mouse,up,1";
-            source: "close_click";
-            action: STATE_SET "default" 0.0;
-            target: "close_bg";
-            target: "close_icon";
-         }
-         program {
-            name: "show_clear_button";
-            signal: "show,clear,button,signal";
+         program { "show_button";
+            signal: "elm,action,show,button";
             source: "";
-            action: STATE_SET "show" 0.0;
-            target: "clear_button_bg";
-            target: "clear_button_icon";
-            target: "clear_button_click";
+            action: STATE_SET "show_button";
+            target: "elm.swallow.entry";
+            target: "elm.swallow.button";
          }
-         program {
-            name: "hide_clear_button";
-            signal: "hide,clear,button,signal";
+         program { "hide_button";
+            signal: "elm,action,hide,button";
             source: "";
-            action: STATE_SET "default" 0.0;
-            target: "clear_button_bg";
-            target: "clear_button_icon";
-            target: "clear_button_click";
-         }
-         program {
-            name: "mouse_down_upbutton_click";
-            signal: "mouse,down,1";
-            source: "up_button_click";
-            action: STATE_SET "highlight" 0.0;
-            target: "up_button_bg";
-            target: "up_button_icon";
-         }
-         program {
-            name: "mouse_up_upbutton_click";
-            signal: "mouse,up,1";
-            source: "up_button_click";
-            action: STATE_SET "default" 0.0;
-            target: "up_button_bg";
-            target: "up_button_icon";
-         }
-         program {
-            name: "mouse_down_downbutton_click";
-            signal: "mouse,down,1";
-            source: "down_button_click";
-            action: STATE_SET "highlight" 0.0;
-            target: "down_button_bg";
-            target: "down_button_icon";
-         }
-         program {
-            name: "mouse_up_downbutton_click";
-            signal: "mouse,up,1";
-            source: "down_button_click";
-            action: STATE_SET "default" 0.0;
-            target: "down_button_bg";
-            target: "down_button_icon";
+            action: STATE_SET "default";
+            target: "elm.swallow.entry";
+            target: "elm.swallow.button";
          }
       }
    }
diff --git a/services/FindOnPageUI/images_mob/btn_bar_stop_nor.png b/services/FindOnPageUI/images_mob/btn_bar_stop_nor.png
deleted file mode 100755 (executable)
index c5cdc11..0000000
Binary files a/services/FindOnPageUI/images_mob/btn_bar_stop_nor.png and /dev/null differ
diff --git a/services/FindOnPageUI/images_mob/toolbar_input_ic_cancel.png b/services/FindOnPageUI/images_mob/toolbar_input_ic_cancel.png
new file mode 100755 (executable)
index 0000000..f374ad8
Binary files /dev/null and b/services/FindOnPageUI/images_mob/toolbar_input_ic_cancel.png differ
index ec5cbad..59e7850 100755 (executable)
@@ -23,6 +23,7 @@ namespace services
 {
 
 HistoryItem::HistoryItem(HistoryItem && other) noexcept
+    : m_visitCounter(0)
 {
     try {
         if (this != &other) {
@@ -41,8 +42,10 @@ HistoryItem::HistoryItem(int id,
     : m_primaryKey(id)
     , m_url(url)
     , m_title(title)
+    , m_visitDate()
     , m_lastVisit()
     , m_favIcon(favicon)
+    , m_visitCounter(0)
 {
     if (thumbnail)
         m_thumbnail = thumbnail;
@@ -54,18 +57,22 @@ HistoryItem::HistoryItem(int id, const std::string & url)
     : m_primaryKey(id)
     , m_url(url)
     , m_title()
+    , m_visitDate()
     , m_lastVisit()
     , m_favIcon(std::make_shared<tizen_browser::tools::BrowserImage>())
+    , m_visitCounter(0)
 {
-
 }
 
 HistoryItem::HistoryItem(const HistoryItem& source)
     : m_primaryKey(source.m_primaryKey)
     , m_url(source.m_url)
     , m_title(source.m_title)
+    , m_visitDate(source.m_visitDate)
     , m_lastVisit(source.m_lastVisit)
+    , m_thumbnail(source.m_thumbnail)
     , m_favIcon(source.m_favIcon)
+    , m_urifavicon(source.m_urifavicon)
     , m_visitCounter(source.m_visitCounter)
 {
 
@@ -73,7 +80,6 @@ HistoryItem::HistoryItem(const HistoryItem& source)
 
 HistoryItem::~HistoryItem()
 {
-
 }
 
 HistoryItem & HistoryItem::operator=(HistoryItem && other) noexcept
@@ -88,12 +94,12 @@ HistoryItem & HistoryItem::operator=(HistoryItem && other) noexcept
     return *this;
 }
 
-bool HistoryItem::operator==(const HistoryItem& other)
+bool HistoryItem::operator==(const HistoryItem& other) const
 {
     return (m_url == other.m_url);
 }
 
-bool HistoryItem::operator!=(const HistoryItem& other)
+bool HistoryItem::operator!=(const HistoryItem& other) const
 {
     return (m_url != other.m_url);
 }
@@ -123,11 +129,6 @@ void HistoryItem::setLastVisit(boost::posix_time::ptime visitDate)
     m_lastVisit = visitDate;
 }
 
-boost::posix_time::ptime HistoryItem::getLastVisit() const
-{
-    return m_lastVisit;
-}
-
 // TODO Replace with std::time_t to_time_t(ptime pt) from boost/date_time/posix_time/conversion.hpp after migration
 // to boost ver. 1.58
 time_t HistoryItem::getLastVisitAsTimeT() const
@@ -144,17 +145,12 @@ void HistoryItem::setVisitCounter(int visitCounter)
     m_visitCounter = visitCounter;
 }
 
-int HistoryItem::getVisitCounter()
-{
-    return m_visitCounter;
-}
-
 void HistoryItem::setFavIcon(tools::BrowserImagePtr favIcon)
 {
     m_favIcon = favIcon;
 }
 
-tools::BrowserImagePtr HistoryItem::getFavIcon()
+tools::BrowserImagePtr HistoryItem::getFavIcon() const
 {
     return m_favIcon;
 }
@@ -174,10 +170,5 @@ void HistoryItem::setUriFavicon(const std::string & uri) {
     m_urifavicon = uri;
 }
 
-std::string HistoryItem::getUriFavicon() {
-    return m_urifavicon;
-}
-
-
 }
 }
index a3e1695..f5549be 100755 (executable)
@@ -46,8 +46,8 @@ public:
     *
     * @return bool
     */
-    bool operator==(const HistoryItem& other);
-    bool operator!=(const HistoryItem& other);
+    bool operator==(const HistoryItem& other) const;
+    bool operator!=(const HistoryItem& other) const;
 
     void setUrl(const std::string & url);
     std::string getUrl() const;
@@ -56,20 +56,17 @@ public:
     std::string getTitle() const;
 
     void setLastVisit(boost::posix_time::ptime visitDate);
-    boost::posix_time::ptime getLastVisit() const;
     time_t getLastVisitAsTimeT() const;
 
     void setVisitCounter(int visitCounter);
-    int getVisitCounter();
 
     void setThumbnail(tools::BrowserImagePtr thumbnail);
     tools::BrowserImagePtr getThumbnail() const;
 
     void setFavIcon(tools::BrowserImagePtr favIcon);
-    tools::BrowserImagePtr getFavIcon();
+    tools::BrowserImagePtr getFavIcon() const;
 
     void setUriFavicon(const std::string & uri);
-    std::string getUriFavicon();
 
     int getId() const { return m_primaryKey; };
 private:
index 19a3483..8bca3c4 100755 (executable)
@@ -41,29 +41,31 @@ namespace services
 EXPORT_SERVICE(HistoryService, DOMAIN_HISTORY_SERVICE)
 
 const int SEARCH_LIKE = 1;
+const int SEARCH_EQUALS = 0;
 
 HistoryService::HistoryService() : m_testDbMod(false)
 {
     BROWSER_LOGD("HistoryService");
+    bp_history_adaptor_initialize();
 }
 
 HistoryService::~HistoryService()
 {
+    BROWSER_LOGD("HistoryService");
+    bp_history_adaptor_deinitialize();
 }
 
-void HistoryService::setStorageServiceTestMode(bool testmode) {
-       m_testDbMod = testmode;
-}
-
-void HistoryService::errorPrint(std::string method) const
+void HistoryService::errorPrint(const std::string& method) const
 {
     int error_code = bp_history_adaptor_get_errorcode();
     BROWSER_LOGE("[%s:%d] %s error: %d (%s)", __PRETTY_FUNCTION__, __LINE__,
-            method.c_str(), error_code,
-            tools::capiWebError::historyErrorToString(error_code).c_str());
+        method.c_str(), error_code,
+        tools::capiWebError::historyErrorToString(error_code).c_str());
 }
 
-int HistoryService::getHistoryItemsCount(){
+int HistoryService::getHistoryItemsCount()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     int *ids = nullptr;
     int count=0;
     bp_history_rows_cond_fmt conds;
@@ -73,7 +75,7 @@ int HistoryService::getHistoryItemsCount(){
     conds.ordering = 1; //way of ordering 0 asc 1 desc
     conds.period_offset = BP_HISTORY_O_DATE_CREATED;
     conds.period_type = BP_HISTORY_DATE_TODAY;
-    if (bp_history_adaptor_get_cond_ids_p(&ids, &count, &conds, 0, nullptr, 0)
+    if (bp_history_adaptor_get_cond_ids_p(&ids, &count, &conds, 0, nullptr, SEARCH_EQUALS)
             < 0) {
         errorPrint("bp_history_adaptor_get_cond_ids_p");
     }
@@ -82,51 +84,19 @@ int HistoryService::getHistoryItemsCount(){
     return count;
 }
 
-bool HistoryService::isDuplicate(const char* url) const
+bool HistoryService::isDuplicate(const std::string& url)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(url);
-    int *ids=nullptr;
-    int count=0;
-    bp_history_rows_cond_fmt conds;
-    conds.limit = -1;  //no of rows to get negative means no limitation
-    conds.offset = -1;   //the first row's index
-    conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort
-    conds.ordering = 1; //way of ordering 0 asc 1 desc
-    conds.period_offset = BP_HISTORY_O_DATE_CREATED;
-    conds.period_type = BP_HISTORY_DATE_TODAY;
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
-        errorPrint("bp_history_adaptor_get_cond_ids_p");
-    }
-
-    bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_DATE_CREATED);
-
-    for (int i = 0; i < count; i++) {
-        bp_history_info_fmt history_info;
-        if (bp_history_adaptor_get_info(ids[i], offset, &history_info) < 0) {
-            BROWSER_LOGE("[%s:%d] bp_history_adaptor_get_info error ",
-                    __PRETTY_FUNCTION__, __LINE__);
-            return false;
-        }
-        if (!history_info.url) {
-            BROWSER_LOGD("Warning: history entry without url!");
-        } else if (!strcmp(history_info.url, url)) {
-            int freq;
-            bp_history_adaptor_get_frequency(ids[i], &freq);
-            bp_history_adaptor_set_frequency(ids[i], freq + 1);
-            bp_history_adaptor_set_date_visited(ids[i],-1);
-            bp_history_adaptor_easy_free(&history_info);
-            return true;
-        }
-        bp_history_adaptor_easy_free(&history_info);
+    auto urlId = getHistoryId(url);
+    if (urlId) {
+        BROWSER_LOGW("[%s:%d] Duplicated. %d", __PRETTY_FUNCTION__, __LINE__, urlId);
+        bp_history_adaptor_visit(urlId);
+        return true;
     }
     return false;
 }
 
-std::shared_ptr<HistoryItemVector> HistoryService::getHistoryAll()
-{
-    return getHistoryItems(BP_HISTORY_DATE_ALL);
-}
-
 std::shared_ptr<HistoryItemVector> HistoryService::getHistoryToday()
 {
     return getHistoryItems(BP_HISTORY_DATE_TODAY);
@@ -151,7 +121,6 @@ std::shared_ptr<HistoryItemVector> HistoryService::getHistoryOlder()
     return getHistoryItems(BP_HISTORY_DATE_OLDER);
 }
 
-#if PWA
 int HistoryService::getHistoryCnt(const int& id)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -161,11 +130,12 @@ int HistoryService::getHistoryCnt(const int& id)
         retVal = freq;
     return retVal;
 }
-#endif
 
 std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
 {
-    std::shared_ptr<HistoryItemVector> ret_history_list(new HistoryItemVector);
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::shared_ptr<HistoryItemVector> ret_history_list =
+        std::make_shared<HistoryItemVector>();
 
     int *ids=nullptr;
     int count=-1;
@@ -178,36 +148,31 @@ std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
     //TODO: consider to change below line to BP_HISTORY_DATE_LAST_MONTH
     conds.period_type = BP_HISTORY_DATE_ALL; // set from which period most visited sites are generated
 
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
+    if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, SEARCH_EQUALS) < 0 )
         errorPrint("bp_history_adaptor_get_cond_ids_p");
-    }
 
     bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FREQUENCY | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED | BP_HISTORY_O_THUMBNAIL);
 
     int freq_arr[1000] = {0, };
-    for(int i = 0; i< count; i++){
+    for (int i = 0; i< count; ++i) {
         int freq;
         if (0 == bp_history_adaptor_get_frequency(ids[i], &freq))
-        {
             freq_arr[i] = freq;
-        }
     }
 
     int index_array[13] = {0, };
-    int j=0;
+    int j = 0;
     int maximum = freq_arr[0];
-    int position = 0;
 
-    for(int k=1; k<=12;k++){
-        if(k > count || count == 0)
+    for (int k=1; k<=12; k++) {
+        if (k > count || count == 0)
             break;
 
         maximum = freq_arr[0];
-        position = 0;
+        int position = 0;
 
-        for(int i =1;i<count;i++){
-            if (freq_arr[i] > maximum)
-            {
+        for (int i = 1; i < count; ++i) {
+            if (freq_arr[i] > maximum) {
                 maximum  = freq_arr[i];
                 position = i;
             }
@@ -216,7 +181,7 @@ std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
         freq_arr[position] = -1;
     }
 
-    for(int i = 0; i < j; i++){
+    for (int i = 0; i < j; ++i) {
         bp_history_info_fmt history_info;
         if (bp_history_adaptor_get_info(ids[index_array[i]], offset,
                 &history_info) < 0) {
@@ -244,7 +209,7 @@ std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
         } else {
             BROWSER_LOGD("history thumbnail lenght is -1");
         }
-        if(history_info.frequency > 0)
+        if (history_info.frequency > 0)
             ret_history_list->push_back(history);
         bp_history_adaptor_easy_free(&history_info);
     }
@@ -253,34 +218,10 @@ std::shared_ptr<HistoryItemVector> HistoryService::getMostVisitedHistoryItems()
     return ret_history_list;
 }
 
-void HistoryService::cleanMostVisitedHistoryItems()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    int *ids=nullptr;
-    int count=-1;
-    bp_history_rows_cond_fmt conds;
-    conds.limit = -1;  // no of rows to get negative means no limitation
-    conds.offset = -1;   // the first row's index
-    conds.order_offset = BP_HISTORY_O_ALL; // property to sort
-    conds.ordering = 1; // way of ordering 0 asc 1 desc
-    conds.period_offset = BP_HISTORY_O_DATE_CREATED;
-    conds.period_type = BP_HISTORY_DATE_ALL; // set from which period most visited sites are generated
-
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0 ) {
-        errorPrint("bp_history_adaptor_get_cond_ids_p");
-        return;
-    }
-
-    for(int i = 0; i < count; i++){
-            bp_history_adaptor_set_frequency(ids[i], 0);
-    }
-    BROWSER_LOGD("Deleted Most Visited Sites!");
-}
-
 std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeyword(
         const std::string & keyword, int maxItems)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     std::string search("%" + keyword + "%");    // add SQL 'any character' signs
 
     std::shared_ptr<HistoryItemVector> items(new HistoryItemVector);
@@ -294,13 +235,13 @@ std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeyword(
     conds.period_offset = BP_HISTORY_O_DATE_VISITED;
     conds.period_type = BP_HISTORY_DATE_ALL;
 
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, BP_HISTORY_O_URL, search.c_str(), SEARCH_LIKE) < 0) {
+    if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, BP_HISTORY_O_URL, search.c_str(), SEARCH_LIKE) < 0) {
         errorPrint("bp_history_adaptor_get_cond_ids_p");
         return items;
     }
 
     bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_DATE_VISITED);
-    for(int i = 0; i < count; i++) {
+    for (int i = 0; i < count; ++i) {
         bp_history_info_fmt history_info;
         if (bp_history_adaptor_get_info(ids[i], offset, &history_info) < 0) {
             BROWSER_LOGE("[%s:%d] bp_history_adaptor_get_info error ",
@@ -323,9 +264,10 @@ std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeyword(
     return items;
 }
 
-void HistoryService::addHistoryItem(const std::string & url,
-                                    const std::string & title,
-                                    tools::BrowserImagePtr favicon)
+void HistoryService::addHistoryItem(
+    const std::string & url,
+    const std::string & title,
+    tools::BrowserImagePtr favicon)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
@@ -334,54 +276,78 @@ void HistoryService::addHistoryItem(const std::string & url,
         return;
     }
 
-    if (isDuplicate(url.c_str()))
+    if (isDuplicate(url)) {
+        BROWSER_LOGW("[%s:%d] Duplicated url.", __PRETTY_FUNCTION__, __LINE__);
         return;
+    }
 
     int id = -1;
-    if(bp_history_adaptor_create(&id) < 0) {
+    if (bp_history_adaptor_create(&id) < 0) {
         errorPrint("bp_history_adaptor_create");
+        return;
     }
     if (bp_history_adaptor_set_url(id, url.c_str()) < 0) {
         errorPrint("bp_history_adaptor_set_url");
+        bp_history_adaptor_delete(id);
+        return;
     }
     if (bp_history_adaptor_set_title(id, title.c_str()) < 0) {
         errorPrint("bp_history_adaptor_set_title");
+        bp_history_adaptor_delete(id);
+        return;
     }
-    if (bp_history_adaptor_set_date_visited(id,-1) < 0) {
-        errorPrint("bp_history_adaptor_set_date_visited");
-    }
-    if (bp_history_adaptor_set_frequency(id, 1) < 0) {
-        errorPrint("bp_history_adaptor_set_frequency");
+    if (bp_history_adaptor_visit(id) < 0) {
+        errorPrint("bp_history_adaptor_visit");
+        bp_history_adaptor_delete(id);
+        return;
     }
+    updateBlob(id, favicon, BlobType::FAVICON);
+}
 
-    if (favicon) {
-       std::unique_ptr<tools::Blob> favicon_blob = tools::EflTools::getBlobPNG(favicon);
-       if (!favicon_blob){
-           BROWSER_LOGW("getBlobPNG failed");
-           return;
-       }
-       unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
-       if (bp_history_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength()) < 0) {
-           errorPrint("bp_history_adaptor_set_icon");
+bool HistoryService::updateBlob(
+    const int& id, tools::BrowserImagePtr image, const BlobType& type)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (image) {
+        auto blob = tools::EflTools::getBlobPNG(image);
+        if (!blob) {
+            BROWSER_LOGW("getBlobPNG failed");
+            return false;
+        }
+        unsigned char* data = (unsigned char*)blob->getData();
+
+        int ret = 0;
+        switch (type) {
+        case BlobType::FAVICON:
+            ret = bp_history_adaptor_set_icon(
+                id, image->getWidth(),
+                image->getHeight(), data,
+                blob->getLength());
+            break;
+        case BlobType::SNAPSHOT:
+            ret = bp_history_adaptor_set_snapshot(
+                id, image->getWidth(),
+                image->getHeight(), data,
+                blob->getLength());
+            break;
+        }
+        if (!data || ret < 0) {
+            errorPrint("bp_history_adaptor_set_icon");
+            return false;
         }
+        return true;
     }
+    return false;
 }
 
 void HistoryService::updateHistoryItemFavicon(const std::string & url, tools::BrowserImagePtr favicon)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     int id = getHistoryId(url);
-    if (id!=0) {
-        if (favicon) {
-           std::unique_ptr<tools::Blob> favicon_blob = tools::EflTools::getBlobPNG(favicon);
-           if (!favicon_blob){
-               BROWSER_LOGW("getBlobPNG failed");
-               return;
-           }
-           unsigned char * fav = std::move((unsigned char*)favicon_blob->getData());
-           if (bp_history_adaptor_set_icon(id, favicon->getWidth(), favicon->getHeight(), fav, favicon_blob->getLength()) < 0) {
-               errorPrint("bp_history_adaptor_set_icon");
-            }
+    if (id) {
+        if (!updateBlob(id, favicon, BlobType::FAVICON)) {
+            BROWSER_LOGW("getBlobPNG failed");
+            return;
         }
     } else {
         BROWSER_LOGW("Cannot update favicon, there is no such history item!");
@@ -392,28 +358,23 @@ void HistoryService::updateHistoryItemSnapshot(const std::string & url, tools::B
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     int id = getHistoryId(url);
-    if (id != 0 && snapshot) {
-        std::unique_ptr<tools::Blob> snapshot_blob = tools::EflTools::getBlobPNG(snapshot);
-        if (!snapshot_blob){
+    if (id) {
+        if (!updateBlob(id, snapshot, BlobType::SNAPSHOT)) {
             BROWSER_LOGW("getBlobPNG failed");
             return;
         }
-        unsigned char * snap = std::move((unsigned char*)snapshot_blob->getData());
-        if (bp_history_adaptor_set_snapshot(id, snapshot->getWidth(), snapshot->getHeight(), snap,
-                snapshot_blob->getLength()) < 0)
-            errorPrint("bp_history_adaptor_set_snapshot");
     }
 }
 
 void HistoryService::clearAllHistory()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     bp_history_adaptor_reset();
-    history_list.clear();
-    historyAllDeleted();
 }
 
-int HistoryService::getHistoryId(const std::string & url)
+int HistoryService::getHistoryId(const std::string& url)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     bp_history_rows_cond_fmt conds;
     conds.limit = -1;
     conds.offset = 0;
@@ -421,11 +382,12 @@ int HistoryService::getHistoryId(const std::string & url)
     conds.ordering = 0;
     conds.period_offset = BP_HISTORY_O_DATE_CREATED;
     conds.period_type = BP_HISTORY_DATE_ALL;
-    int *ids = nullptr;
+    intids = nullptr;
     int ids_count = 0;
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), 0) < 0) {
+    if (bp_history_adaptor_get_cond_ids_p(&ids ,&ids_count, &conds, BP_HISTORY_O_URL, url.c_str(), SEARCH_EQUALS) < 0) {
         errorPrint("bp_history_adaptor_get_cond_ids_p");
     } else if (ids_count != 0) {
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
         int i = *ids;
         free(ids);
         return i;
@@ -435,15 +397,15 @@ int HistoryService::getHistoryId(const std::string & url)
 
 void HistoryService::clearURLHistory(const std::string & url)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     int id = getHistoryId(url);
     if (id!=0)
         bp_history_adaptor_delete(id);
-    if(0 == getHistoryItemsCount())
-        historyEmpty(true);
-    historyDeleted(url);
 }
 
-void HistoryService::deleteHistoryItem(int id) {
+void HistoryService::deleteHistoryItem(int id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (bp_history_adaptor_delete(id) < 0) {
         errorPrint("bp_history_adaptor_delete");
     }
@@ -451,12 +413,14 @@ void HistoryService::deleteHistoryItem(int id) {
 
 void HistoryService::setMostVisitedFrequency(int id, int frequency)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (bp_history_adaptor_set_frequency(id, frequency) < 0 )
         errorPrint("bp_history_adaptor_set_frequency");
 }
 
 std::shared_ptr<HistoryItem> HistoryService::getHistoryItem(int * ids, int idNumber)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_VISITED);
     bp_history_info_fmt history_info;
     if (bp_history_adaptor_get_info(ids[idNumber], offset, &history_info) < 0) {
@@ -516,7 +480,9 @@ std::shared_ptr<HistoryItem> HistoryService::getHistoryItem(int * ids, int idNum
 
 std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItems(bp_history_date_defs period)
 {
-    std::shared_ptr<HistoryItemVector> ret_history_list(new HistoryItemVector);
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::shared_ptr<HistoryItemVector> ret_history_list =
+        std::make_shared<HistoryItemVector>();
 
     int *ids=nullptr;
     int count=-1;
@@ -528,11 +494,10 @@ std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItems(bp_history_da
     conds.period_offset = BP_HISTORY_O_DATE_VISITED;
     conds.period_type = period;
 
-    if(bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0) < 0) {
+    if (bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, SEARCH_EQUALS) < 0)
         errorPrint("bp_history_adaptor_get_cond_ids_p");
-    }
 
-    for(int i = 0; i< count; i++) {
+    for (int i = 0; i< count; ++i) {
         std::shared_ptr<HistoryItem> item = getHistoryItem(ids, i);
         if (!item)
             BROWSER_LOGW("[%s:%d] empty history item! ", __PRETTY_FUNCTION__, __LINE__);
@@ -543,16 +508,11 @@ std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItems(bp_history_da
     return ret_history_list;
 }
 
-std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByURL(
-        const std::string& url, int maxItems)
-{
-    return getHistoryItemsByKeyword(tools::extractDomain(url), maxItems);
-}
-
 std::shared_ptr<HistoryItemVector> HistoryService::getHistoryItemsByKeywordsString(
         const std::string& keywordsString, const int maxItems,
         const unsigned int minKeywordLength, bool uniqueUrls)
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (keywordsString.empty())
         return std::make_shared<HistoryItemVector>();
 
index 59c711c..5251970 100755 (executable)
@@ -35,6 +35,12 @@ namespace tizen_browser
 namespace services
 {
 
+enum class BlobType
+{
+    FAVICON,
+    SNAPSHOT
+};
+
 class BROWSER_EXPORT HistoryService: public tizen_browser::core::AbstractService
 {
 public:
@@ -46,6 +52,8 @@ public:
                         const std::string & title,
                         tools::BrowserImagePtr favicon);
 
+    bool updateBlob(
+        const int& id, tools::BrowserImagePtr favicon, const BlobType& type = BlobType::FAVICON);
     void updateHistoryItemFavicon(const std::string & url,
                                   tools::BrowserImagePtr favicon);
     void updateHistoryItemSnapshot(const std::string & url,
@@ -55,19 +63,14 @@ public:
     void deleteHistoryItem(int id);
     void setMostVisitedFrequency(int id, int frequency);
     std::shared_ptr<HistoryItem> getHistoryItem(const std::string & url);
-    std::shared_ptr<HistoryItemVector> getHistoryAll();
     std::shared_ptr<HistoryItemVector> getHistoryToday();
     std::shared_ptr<HistoryItemVector> getHistoryYesterday();
     std::shared_ptr<HistoryItemVector> getHistoryLastWeek();
     std::shared_ptr<HistoryItemVector> getHistoryLastMonth();
     std::shared_ptr<HistoryItemVector> getHistoryOlder();
     std::shared_ptr<HistoryItemVector> getMostVisitedHistoryItems();
-    void cleanMostVisitedHistoryItems();
     std::shared_ptr<HistoryItemVector> getHistoryItemsByKeyword(const std::string & keyword, int maxItems);
-    std::shared_ptr<HistoryItemVector> getHistoryItemsByURL(const std::string & url, int maxItems);
-#if PWA
     int getHistoryCnt(const int& id);
-#endif
 
     /**
      * @brief Searches for history items matching given pattern.
@@ -90,30 +93,24 @@ public:
             const unsigned int minKeywordLength, bool uniqueUrls = false);
 
     int getHistoryItemsCount();
-    void setStorageServiceTestMode(bool testmode = true);
-
-    boost::signals2::signal<void (bool)>historyEmpty;
-    boost::signals2::signal<void (const std::string& uri)> historyDeleted;
-    boost::signals2::signal<void ()> historyAllDeleted;
 
 private:
     bool m_testDbMod;;
-    std::vector<std::shared_ptr<HistoryItem>> history_list;
     std::shared_ptr<tizen_browser::services::StorageService> m_storageManager;
 
     /**
      * Help method printing last bp_history_error_defs error.
      */
-    void errorPrint(std::string method) const;
+    void errorPrint(const std::string& method) const;
 
     /**
      * @throws StorageExceptionInitialization on error
      */
-    void initDatabaseBookmark(const std::string & db_str);
+    void initDatabaseBookmark(const std::string& db_str);
 
     std::shared_ptr<HistoryItem> getHistoryItem(int* ids, int idNumber = 0);
     std::shared_ptr<HistoryItemVector> getHistoryItems(bp_history_date_defs period = BP_HISTORY_DATE_TODAY);
-    bool isDuplicate(const char* url) const;
+    bool isDuplicate(const std::string& url);
 };
 
 }
index 020742c..e071c2f 100755 (executable)
@@ -34,8 +34,8 @@ void removeMismatches(shared_ptr<HistoryItemVector> historyItems,
             ++itItem;
 }
 
-bool containsDuplicates(std::shared_ptr<HistoryItemVector> vec,
-        std::shared_ptr<HistoryItem> checked)
+bool containsDuplicates(const std::shared_ptr<HistoryItemVector>& vec,
+        const std::shared_ptr<HistoryItem>& checked)
 {
     bool found = false;
     for (auto& s : *vec)
index d2370b1..b6d7027 100755 (executable)
@@ -39,8 +39,8 @@ void removeMismatches(std::shared_ptr<HistoryItemVector> historyItems,
 /**
  * @brief Returns true, if vector contains at least two items with the same url.
  */
-bool containsDuplicates(std::shared_ptr<HistoryItemVector> vec,
-        std::shared_ptr<HistoryItem> checked);
+bool containsDuplicates(const std::shared_ptr<HistoryItemVector>& vec,
+        const std::shared_ptr<HistoryItem>& checked);
 
 /**
  * @brief Removes history items with urls duplicating other items.
index b9961c9..f29c6e1 100755 (executable)
@@ -2,7 +2,6 @@ project(HistoryUI)
 
 set(HistoryUI_SRCS
     HistoryUI.cpp
-    HistoryUIFocusManager.cpp
     HistoryPeriod.cpp
     HistoryDaysListManager/HistoryDaysListManagerMob.cpp
     HistoryDaysListManager/mob/HistoryDayItemMob.cpp
@@ -28,7 +27,6 @@ install(TARGETS ${PROJECT_NAME}
 
 include(EDCCompile)
 set(edcFiles
-    History_mob.edc
     HistoryDaysList_mob.edc
 )
 
index fa9927a..1dec22b 100755 (executable)
@@ -27,7 +27,7 @@ namespace base_ui {
 
 using WebsiteVisitItemData = struct WebsiteVisitItemData_
 {
-    WebsiteVisitItemData_(std::shared_ptr<services::HistoryItem> historyItem)
+    explicit WebsiteVisitItemData_(const std::shared_ptr<services::HistoryItem>& historyItem)
     : historyItem(historyItem)
     {
     }
@@ -38,7 +38,7 @@ using WebsiteHistoryItemData = struct WebsiteHistoryItemData_
 {
     WebsiteHistoryItemData_(const std::string& websiteTitle,
             const std::string& websiteDomain,
-            std::shared_ptr<tools::BrowserImage> favIcon,
+            const std::shared_ptr<tools::BrowserImage>& favIcon,
             const WebsiteVisitItemDataPtr& item) :
             websiteTitle(websiteTitle), websiteDomain(websiteDomain),
             favIcon(favIcon), websiteVisitItem(item)
index 7276660..f6fc50f 100755 (executable)
@@ -40,8 +40,9 @@ HistoryDaysListManagerMob::HistoryDaysListManagerMob()
     , m_history_day_item_class(elm_genlist_item_class_new())
     , m_history_item_item_class(elm_genlist_item_class_new())
     , m_history_download_item_class(elm_genlist_item_class_new())
+    , m_genlist(nullptr)
     , m_isRemoveMode(false)
-    , m_delete_count(0)
+    , m_selected_count(0)
     , m_history_count(0)
     , m_isSelectAllChecked(EINA_FALSE)
     , m_downloadManagerItem(nullptr)
@@ -106,60 +107,38 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_download_content_get(vo
         if (id->self->m_isRemoveMode) {
             auto check(elm_check_add(obj));
             evas_object_smart_callback_add(check, "changed", _check_state_changed, id);
+            elm_check_state_set(check, id->self->m_isSelectAllChecked);
+            evas_object_propagate_events_set(check, EINA_FALSE);
             return check;
         }
     }
     return nullptr;
 }
 
-void HistoryDaysListManagerMob::countItemsToDelete()
+void HistoryDaysListManagerMob::updateDeleteClick(const int &id)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_delete_count = 0;
-    auto it(elm_genlist_first_item_get(m_genlist));
-    while ((it = elm_genlist_item_next_get(it))) {
-        auto check(elm_object_item_part_content_get(it, "elm.swallow.end"));
-        if (!check)
-            continue;
-        auto state(elm_check_state_get(check));
-        m_itemsToDelete[it] = state;
-        if (state == EINA_TRUE)
-            ++m_delete_count;
-        if (m_delete_count == m_history_count) {
-            auto first(elm_genlist_first_item_get(m_genlist));
-            auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end"));
-            elm_check_state_set(firstCheck, EINA_TRUE);
-        }
-        if (it == elm_genlist_last_item_get(m_genlist) &&
-            m_delete_count == 0) {
-            auto first(elm_genlist_first_item_get(m_genlist));
-            auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end"));
-            elm_check_state_set(firstCheck, EINA_FALSE);
-        }
-    }
-    setSelectedItemsCount(m_delete_count);
-    setRightButtonEnabledForHistory(m_delete_count);
+    m_map_selected[id] = (m_map_selected[id] == EINA_TRUE) ? EINA_FALSE : EINA_TRUE;
+    m_selected_count += (m_map_selected[id] == EINA_TRUE) ? 1 : -1;
+    m_isSelectAllChecked = (m_selected_count == m_history_count) ? EINA_TRUE : EINA_FALSE;
+    elm_genlist_item_update(m_selectAllItem);
+    elm_genlist_realized_items_update(m_genlist);
+    setSelectedItemsCount(m_selected_count);
+    setRightButtonEnabledForHistory(m_selected_count);
 }
 
 void HistoryDaysListManagerMob::selectAllCheckboxes()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto it(elm_genlist_first_item_get(m_genlist));
-    auto firstCheck(elm_object_item_part_content_get(it, "elm.swallow.end"));
-    m_isSelectAllChecked = elm_check_state_get(firstCheck);
-
-    while ((it = elm_genlist_item_next_get(it))) {
-        auto check(elm_object_item_part_content_get(it, "elm.swallow.end"));
-        if (!check)
-            continue;
-        elm_check_state_set(check, m_isSelectAllChecked);
-    }
-    if (m_isSelectAllChecked == EINA_TRUE && elm_genlist_items_count(m_genlist) > 1)
-        m_delete_count = m_history_count;
-    if (m_isSelectAllChecked == EINA_FALSE)
-        m_delete_count = 0;
-    setSelectedItemsCount(m_delete_count);
-    setRightButtonEnabledForHistory(m_delete_count);
+    m_isSelectAllChecked = elm_check_state_get(elm_object_item_part_content_get(
+        m_selectAllItem, "elm.swallow.end"));
+    for (auto& it : m_map_selected)
+        it.second = m_isSelectAllChecked;
+
+    m_selected_count = m_isSelectAllChecked == EINA_TRUE ? m_history_count : 0;
+    setSelectedItemsCount(m_selected_count);
+    setRightButtonEnabledForHistory(m_selected_count);
+    elm_genlist_realized_items_update(m_genlist);
 }
 
 void HistoryDaysListManagerMob::_check_state_changed(void* data, Evas_Object* obj, void*)
@@ -167,13 +146,10 @@ void HistoryDaysListManagerMob::_check_state_changed(void* data, Evas_Object* ob
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         auto id(static_cast<ItemData*>(data));
-        auto first(elm_genlist_first_item_get(id->self->m_genlist));
-        auto check(elm_object_item_part_content_get(first, "elm.swallow.end"));
-
-        if (check == obj)
+        if (elm_object_item_part_content_get(id->self->m_selectAllItem, "elm.swallow.end") == obj)
             id->self->selectAllCheckboxes();
         else
-            id->self->countItemsToDelete();
+            id->self->updateDeleteClick(id->websiteVisitItem->historyItem->getId());
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
@@ -206,13 +182,8 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_day_content_get(void* d
 
         auto arrow_layout(elm_layout_add(obj));
         auto edjeDir(EDJE_DIR + std::string("HistoryUI/HistoryDaysList.edj"));
-        elm_layout_file_set(arrow_layout, edjeDir.c_str(), "arrow-layout");
-
-        auto edje(elm_layout_edje_get(arrow_layout));
-        edje_object_signal_emit(edje, "state,contracted,signal", "");
-        if (dayData->expanded)
-            edje_object_signal_emit(edje, "state,expanded,signal", "");
-
+        elm_layout_file_set(arrow_layout, edjeDir.c_str(),
+            dayData->expanded ? "arrow-layout-expanded" : "arrow-layout-contracted");
         return arrow_layout;
     }
     return nullptr;
@@ -257,19 +228,14 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_item_content_get(void *
     if (data && !strcmp(part, "elm.swallow.end")) {
         auto check(elm_check_add(obj));
         auto item(static_cast<ItemData*>(data));
-        if (item->self->m_isRemoveMode){
-            elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+        evas_object_propagate_events_set(check, EINA_FALSE);
+        if (item->self->m_isRemoveMode) {
             evas_object_smart_callback_add(check, "changed", _check_state_changed, data);
-            if (item->self->m_selectAllItem &&
-                item->self->m_isSelectAllChecked == EINA_TRUE) {
-                auto firstCheck(elm_object_item_part_content_get(item->self->m_selectAllItem, "elm.swallow.end"));
-                elm_check_state_set(firstCheck, item->self->m_isSelectAllChecked);
-            }
-            elm_check_state_set(check, item->self->m_isSelectAllChecked);
+            elm_check_state_set(check,
+                item->self->m_map_selected[item->websiteVisitItem->historyItem->getId()]);
             return check;
         } else {
             evas_object_smart_callback_del(check, "changed", _check_state_changed);
-            elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
         }
     }
     return nullptr;
@@ -281,6 +247,9 @@ Evas_Object* HistoryDaysListManagerMob::createDaysList(
     // TODO Download history is planed for the 2nd phase
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_parent = parent;
+    m_map_selected.clear();
+    m_selected_count = 0;
+    m_isSelectAllChecked = EINA_FALSE;
 
     m_isRemoveMode = isRemoveMode;
     if (m_genlist) {
@@ -303,21 +272,23 @@ Evas_Object* HistoryDaysListManagerMob::createDaysList(
     id->websiteVisitItem = nullptr;
     id->websiteHistoryItemData = nullptr;
     id->str = nullptr;
+    /*TODO: Uncomment this feature when Download History is supported (Phase 2).
     if (!m_isRemoveMode) {
-        id->str = _("IDS_BR_BODY_DOWNLOAD_HISTORY");
-        m_downloadManagerItem = elm_genlist_item_append(
-            m_genlist, m_history_download_item_class,
-            id,
-            nullptr, ELM_GENLIST_ITEM_NONE,
-            nullptr, nullptr);
-        elm_object_item_disabled_set(m_downloadManagerItem, EINA_TRUE);
-    } else {
+            id->str = _("IDS_BR_BODY_DOWNLOAD_HISTORY");
+            m_downloadManagerItem = elm_genlist_item_append(
+                m_genlist, m_history_download_item_class,
+                id,
+                nullptr, ELM_GENLIST_ITEM_NONE,
+                nullptr, nullptr);
+            elm_object_item_disabled_set(m_downloadManagerItem, EINA_TRUE);
+    }*/
+    if (m_isRemoveMode) {
         id->str = _("IDS_BR_OPT_SELECT_ALL");
         m_selectAllItem = elm_genlist_item_append(
             m_genlist, m_history_download_item_class,
             id,
             nullptr, ELM_GENLIST_ITEM_NONE,
-            nullptr, nullptr);
+            _select_all_selected, id);
     }
     return m_genlist;
 }
@@ -327,6 +298,7 @@ void HistoryDaysListManagerMob::addHistoryItems(
     HistoryPeriod period)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     std::vector<WebsiteHistoryItemDataPtr> historyItems;
     for (auto& item : *items) {
         auto pageViewItem(std::make_shared<WebsiteVisitItemData>(item));
@@ -339,6 +311,7 @@ void HistoryDaysListManagerMob::addHistoryItems(
                 item->getUrl(),
                 websiteFavicon,
                 pageViewItem));
+        m_map_selected.insert({item->getId(), m_isSelectAllChecked});
         ++m_history_count;
     }
     auto dayItem(std::make_shared<HistoryDayItemData>(toString(period), historyItems));
@@ -396,7 +369,7 @@ void HistoryDaysListManagerMob::_tree_item_expanded(void* data, Evas_Object* gen
                 ELM_GENLIST_ITEM_NONE,
                 _item_selected,
                 itData));
-        self->m_itemsToDelete[listItem] = EINA_FALSE;
+        self->m_itemsToDelete.insert({itData->websiteVisitItem->historyItem->getId(), listItem});
         self->m_visitItemData[listItem] = el->websiteVisitItem;
     }
     self->m_itemData[it]->expanded = true;
@@ -407,14 +380,35 @@ void HistoryDaysListManagerMob::_tree_item_expanded(void* data, Evas_Object* gen
     elm_genlist_realized_items_update(genlist);
 }
 
-void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object *, void *)
+void HistoryDaysListManagerMob::_select_all_selected(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto iD(static_cast<ItemData*>(data));
-    iD->self->signalHistoryItemClicked(
-        iD->websiteVisitItem->historyItem->getUrl().c_str(),
-        iD->websiteVisitItem->historyItem->getTitle().c_str());
-    delete iD;
+    if (data) {
+        auto iD(static_cast<ItemData*>(data));
+        Evas_Object *check = elm_object_item_part_content_get(iD->self->m_selectAllItem, "elm.swallow.end");
+        elm_check_state_set(check, !elm_check_state_get(check));
+        _check_state_changed(data, check, nullptr);
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+    }
+}
+
+void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (data && event_info) {
+        auto iD(static_cast<ItemData*>(data));
+        if (iD->self->m_isRemoveMode) {
+            elm_genlist_item_update(static_cast<Elm_Object_Item*>(event_info));
+            iD->self->updateDeleteClick(iD->websiteVisitItem->historyItem->getId());
+        } else {
+            iD->self->signalHistoryItemClicked(
+                iD->websiteVisitItem->historyItem->getUrl().c_str(),
+                iD->websiteVisitItem->historyItem->getTitle().c_str());
+        }
+    } else {
+        BROWSER_LOGW("[%s] data or event_info = nullptr", __PRETTY_FUNCTION__);
+    }
 }
 
 void HistoryDaysListManagerMob::_tree_item_pressed(void* data, Evas_Object*, void* event_info)
@@ -494,12 +488,12 @@ void HistoryDaysListManagerMob::removeSelectedItems()
         return;
     }
     for (auto& x : m_itemsToDelete) {
-        if (x.second == EINA_TRUE) {
+        if (m_map_selected[x.first] == EINA_TRUE) {
             onWebsiteHistoryItemVisitItemClicked(
-                m_visitItemData[x.first], true);
-            x.second = EINA_FALSE;
-            m_visitItemData.erase(x.first);
-            m_expandedState.erase(x.first);
+                m_visitItemData[x.second], true);
+            m_map_selected[x.first] = EINA_FALSE;
+            m_visitItemData.erase(x.second);
+            m_expandedState.erase(x.second);
             m_itemsToDelete.erase(x.first);
             --m_history_count;
         }
index 5f0b8ab..e67b2ae 100755 (executable)
@@ -39,6 +39,8 @@ class HistoryDaysListManagerMob : public HistoryDaysListManager
 public:
     HistoryDaysListManagerMob();
     virtual ~HistoryDaysListManagerMob();
+    HistoryDaysListManagerMob(const HistoryDaysListManagerMob&) = delete;
+    HistoryDaysListManagerMob& operator=(const HistoryDaysListManagerMob&) = delete;
 
     void createGenlistItemClasses();
     static char* _genlist_history_day_text_get(void *data, Evas_Object *, const char *part);
@@ -48,6 +50,7 @@ public:
     static void _tree_item_expanded(void*, Evas_Object*, void*);
     static void _tree_item_contracted(void*, Evas_Object*, void*);
     static void _tree_item_pressed(void*, Evas_Object*, void*);
+    static void _select_all_selected(void *data, Evas_Object *obj, void *event_info);
     static void _item_selected(void *data, Evas_Object *obj, void *event_info);
     static Evas_Object* _genlist_history_download_content_get(void*, Evas_Object* obj, const char *part);
     static Evas_Object* _genlist_history_item_content_get(void *data, Evas_Object *, const char *part);
@@ -63,7 +66,7 @@ public:
     void onWebsiteHistoryItemVisitItemClicked(
         const WebsiteVisitItemDataPtrConst websiteVisitItemData,
         bool remove);
-    void countItemsToDelete();
+    void updateDeleteClick(const int& id);
     void selectAllCheckboxes();
     void removeSelectedItems();
     bool isSelectAllChecked() const { return m_isSelectAllChecked == EINA_TRUE; }
@@ -78,7 +81,7 @@ private:
     void connectSignals();
     void appendDayItem(HistoryDayItemDataPtr dayItemData);
     void showNoHistoryMessage(bool show);
-    bool isHistoryDayListEmpty() {return m_dayItems.empty();}
+    bool isHistoryDayListEmpty() const {return m_dayItems.empty();}
 
     /**
      * @brief remove item from view and from vector
@@ -115,11 +118,12 @@ private:
     Evas_Object* m_genlist;
     std::map<Elm_Object_Item*, HistoryDayItemDataPtr> m_itemData;
     std::map<Elm_Object_Item*, Eina_Bool> m_expandedState;
-    std::map<Elm_Object_Item*, Eina_Bool> m_itemsToDelete;
+    std::map<int, Elm_Object_Item*> m_itemsToDelete;
     std::map<Elm_Object_Item*, WebsiteVisitItemDataPtr> m_visitItemData;
+    std::map<int, Eina_Bool> m_map_selected;
     bool m_isRemoveMode;
     std::vector<ItemData*> m_itemDataVector;
-    size_t m_delete_count;
+    size_t m_selected_count;
     size_t m_history_count;
     Eina_Bool m_isSelectAllChecked;
     Elm_Object_Item* m_downloadManagerItem;
index 3a20d1c..bbbd06e 100755 (executable)
@@ -32,6 +32,8 @@ HistoryDayItemMob::HistoryDayItemMob(HistoryDayItemDataPtr dayItemData)
     , m_boxMainVertical(nullptr)
     , m_layoutHeader(nullptr)
     , m_boxHeader(nullptr)
+    , m_layoutBoxWebsites(nullptr)
+    , m_boxWebsites(nullptr)
 {
     for (auto& websiteHistoryItemData : dayItemData->websiteHistoryItems) {
         auto websiteHistoryItem =
@@ -63,7 +65,7 @@ Evas_Object* HistoryDayItemMob::init(Evas_Object* parent,
     m_layoutHeader = elm_layout_add(m_layoutMain);
     evas_object_size_hint_align_set(m_layoutHeader, 0.0, 0.0);
     elm_layout_file_set(m_layoutHeader, edjeFiles->historyDaysList.c_str(), "layoutHeader");
-    elm_object_text_set(m_layoutHeader, m_dayItemData->day.c_str());
+    elm_object_translatable_text_set(m_layoutHeader, m_dayItemData->day.c_str());
 
     m_layoutBoxWebsites = elm_layout_add(m_layoutMain);
     tools::EflTools::setExpandHints(m_layoutBoxWebsites);
index b76a805..03019a9 100755 (executable)
@@ -33,7 +33,7 @@ using WebsiteHistoryItemMobPtr = std::shared_ptr<WebsiteHistoryItemMob>;
 class HistoryDayItemMob
 {
 public:
-    HistoryDayItemMob(HistoryDayItemDataPtr dayItemData);
+    explicit HistoryDayItemMob(HistoryDayItemDataPtr dayItemData);
     virtual ~HistoryDayItemMob();
     Evas_Object* init(Evas_Object* parent,
             HistoryDaysListManagerEdjePtr edjeFiles);
index 24a7cd3..8867a93 100755 (executable)
@@ -24,7 +24,8 @@ namespace tizen_browser {
 namespace base_ui {
 
 WebsiteHistoryItemMob::WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData)
-    : m_websiteHistoryItemData(websiteHistoryItemData)
+    : m_eflObjectsDeleted(false)
+    , m_websiteHistoryItemData(websiteHistoryItemData)
     , m_websiteHistoryItemTitle(
         std::make_shared<WebsiteHistoryItemTitleMob>(websiteHistoryItemData))
     , m_websiteHistoryItemVisitItems(
index f24e7f7..e9168bb 100755 (executable)
@@ -36,7 +36,7 @@ using WebsiteHistoryItemVisitItemsMobPtr = std::shared_ptr<WebsiteHistoryItemVis
 class WebsiteHistoryItemMob
 {
 public:
-    WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData);
+    explicit WebsiteHistoryItemMob(WebsiteHistoryItemDataPtr websiteHistoryItemData);
     virtual ~WebsiteHistoryItemMob();
     Evas_Object* init(Evas_Object* parent,
             HistoryDaysListManagerEdjePtr edjeFiles);
@@ -60,7 +60,7 @@ private:
             HistoryDaysListManagerEdjePtr edjeFiles);
 
     /// used to indicate, if efl object were already deleted
-    bool m_eflObjectsDeleted = false;
+    bool m_eflObjectsDeleted;
 
     WebsiteHistoryItemDataPtr m_websiteHistoryItemData;
     WebsiteHistoryItemTitleMobPtr m_websiteHistoryItemTitle;
index 759e53b..446e172 100755 (executable)
@@ -29,10 +29,13 @@ const int WebsiteHistoryItemTitleMob::GESTURE_MOMENTUM_MIN = 2000;
 WebsiteHistoryItemTitleMob::WebsiteHistoryItemTitleMob(
         WebsiteHistoryItemDataPtr websiteHistoryItemData)
     : m_websiteHistoryItemData(websiteHistoryItemData)
+    , m_clickBlocked(false)
     , m_buttonSelect(nullptr)
+    , m_buttonDelete(nullptr)
     , m_imageFavIcon(nullptr)
     , m_imageFavIconMask(nullptr)
     , m_layoutMain(nullptr)
+    , m_layerGesture(nullptr)
     , m_boxMain(nullptr)
     , m_layoutContent(nullptr)
     , m_layoutButtonDelete(nullptr)
@@ -89,8 +92,8 @@ void WebsiteHistoryItemTitleMob::_buttonSelectClicked(void* data,
         return;
     WebsiteHistoryItemTitleMob* self =
             static_cast<WebsiteHistoryItemTitleMob*>(data);
-    if (self->getClickBlock()) {
-        self->setClickBlock(false);
+    if (self->m_clickBlocked) {
+        self->m_clickBlocked = false;
         return;
     }
     signalButtonClicked(self->getWebsiteHistoryItemDataPtr(), false);
@@ -103,8 +106,8 @@ void WebsiteHistoryItemTitleMob::_buttonDeleteClicked(void* data,
         return;
     WebsiteHistoryItemTitleMob* self =
             static_cast<WebsiteHistoryItemTitleMob*>(data);
-    if (self->getClickBlock()) {
-        self->setClickBlock(false);
+    if (self->m_clickBlocked) {
+        self->m_clickBlocked = false;
         return;
     }
     signalButtonClicked(self->getWebsiteHistoryItemDataPtr(), true);
@@ -121,7 +124,7 @@ Evas_Event_Flags WebsiteHistoryItemTitleMob::_gestureOccured(void *data,
     auto info = static_cast<Elm_Gesture_Line_Info*>(event_info);
     if (info->momentum.mx != 0 || info->momentum.my != 0) {
         // prevents click event, when gesture occurred
-        self->setClickBlock(true);
+        self->m_clickBlocked = true;
         // ignore too small gestures
         if (abs(info->momentum.mx) < GESTURE_MOMENTUM_MIN)
             return flag;
@@ -200,7 +203,7 @@ Evas_Object* WebsiteHistoryItemTitleMob::createLayoutButtonDelete(
     0.5);
     elm_layout_file_set(lay, edjeFilePath.c_str(),
             "layoutButtonDelete");
-    elm_object_text_set(lay, _("IDS_BR_SK_CLEAR"));
+    elm_object_translatable_text_set(lay, "IDS_BR_SK_CLEAR");
 
     m_buttonDelete = elm_button_add(parent);
     elm_object_part_content_set(lay, "buttonSelect", m_buttonDelete);
@@ -236,7 +239,7 @@ Evas_Object* WebsiteHistoryItemTitleMob::createLayoutSummary(Evas_Object* parent
     Evas_Object* layout = elm_layout_add(parent);
     tools::EflTools::setExpandHints(layout);
     elm_layout_file_set(layout, edjeFilePath.c_str(), "layoutTextSummaryTitle");
-    elm_object_text_set(layout, m_websiteHistoryItemData->websiteTitle.c_str());
+    elm_object_translatable_text_set(layout, m_websiteHistoryItemData->websiteTitle.c_str());
 
     return layout;
 }
index c6cf6cf..540cec3 100755 (executable)
@@ -28,24 +28,17 @@ namespace base_ui {
 class WebsiteHistoryItemTitleMob
 {
 public:
-    WebsiteHistoryItemTitleMob(
+    explicit WebsiteHistoryItemTitleMob(
             WebsiteHistoryItemDataPtr websiteHistoryItemData);
     virtual ~WebsiteHistoryItemTitleMob();
     Evas_Object* init(Evas_Object* parent, const std::string& edjeFilePath);
 
-    WebsiteHistoryItemDataPtr getWebsiteHistoryItemDataPtr()
-    {
-        return m_websiteHistoryItemData;
-    }
+    WebsiteHistoryItemDataPtr getWebsiteHistoryItemDataPtr() const {return m_websiteHistoryItemData;}
 
     // static signals to allow easy connection in HistoryDaysListManager
     static boost::signals2::signal<void(const WebsiteHistoryItemDataPtr, bool)> signalButtonClicked;
 
     void showButtonDelete(bool show);
-    void setClickBlock(bool blocked) {clickBlocked = blocked;}
-    bool getClickBlock() {return clickBlocked;}
-    // prevents click event, when gesture occured
-    bool clickBlocked = false;
 
 private:
     Evas_Object* createLayoutContent(Evas_Object* parent,
@@ -67,6 +60,8 @@ private:
     static Evas_Event_Flags _gestureOccured(void *data, void *event_info);
 
     WebsiteHistoryItemDataPtr m_websiteHistoryItemData;
+    // prevents click event, when gesture occured
+    bool m_clickBlocked;
 
     Evas_Object* m_buttonSelect;
     Evas_Object* m_buttonDelete;
index 75d20c5..de6a0cd 100755 (executable)
@@ -28,13 +28,11 @@ boost::signals2::signal<void(const WebsiteVisitItemDataPtr, bool)> WebsiteHistor
 const int WebsiteHistoryItemVisitItemsMob::GESTURE_MOMENTUM_MIN = 2000;
 
 WebsiteHistoryItemVisitItemsMob::WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItem)
-    : m_eflObjectsDeleted(nullptr)
+    : m_eflObjectsDeleted(false)
+    , m_websiteVisitItem { websiteVisitItem, LayoutVisitItemObjects() }
     , m_layoutMain(nullptr)
     , m_boxMainVertical(nullptr)
 {
-    VisitItemObjects obj;
-    obj.websiteVisitItemData = websiteVisitItem;
-    m_websiteVisitItem = obj;
 }
 
 WebsiteHistoryItemVisitItemsMob::~WebsiteHistoryItemVisitItemsMob()
@@ -119,10 +117,10 @@ Evas_Object* WebsiteHistoryItemVisitItemsMob::createLayoutContent(Evas_Object* p
     elm_layout_file_set(layoutContent, edjeFilePath.c_str(),
         "layoutMainContent");
 
-    elm_object_part_text_set(layoutContent, "textTitle",
+    elm_object_translatable_part_text_set(layoutContent, "textTitle",
         websiteVisitItemData->historyItem->getTitle().c_str());
 
-    elm_object_part_text_set(layoutContent, "textUrl",
+    elm_object_translatable_part_text_set(layoutContent, "textUrl",
         websiteVisitItemData->historyItem->getUrl().c_str());
 
     // TODO Replace with std::time_t to_time_t(ptime pt) in the future
@@ -136,7 +134,7 @@ Evas_Object* WebsiteHistoryItemVisitItemsMob::createLayoutContent(Evas_Object* p
     }
     std::strftime(buffer,80,"%R",&ts_ret);
 
-    elm_object_part_text_set(layoutContent, "textTime", buffer);
+    elm_object_translatable_part_text_set(layoutContent, "textTime", buffer);
 
     Evas_Object* buttonSelect = elm_button_add(parent);
     elm_object_part_content_set(layoutContent, "buttonSelect", buttonSelect);
@@ -154,7 +152,7 @@ Evas_Object* WebsiteHistoryItemVisitItemsMob::createLayoutButtonDelete(Evas_Obje
     Evas_Object* lay = elm_layout_add(parent);
     evas_object_size_hint_align_set(lay, EVAS_HINT_FILL, 0.5);
     elm_layout_file_set(lay, edjeFilePath.c_str(), "layoutButtonDelete");
-    elm_object_text_set(lay, _("IDS_BR_SK_CLEAR"));
+    elm_object_translatable_text_set(lay, "IDS_BR_SK_CLEAR");
 
     Evas_Object* buttonDelete = elm_button_add(parent);
     elm_object_part_content_set(lay, "buttonSelect", buttonDelete);
@@ -240,7 +238,7 @@ void WebsiteHistoryItemVisitItemsMob::showButtonDelete(
 }
 
 bool WebsiteHistoryItemVisitItemsMob::contains(
-    WebsiteVisitItemDataPtrConst websiteVisitItemData)
+    WebsiteVisitItemDataPtrConst websiteVisitItemData) const
 {
     if (m_websiteVisitItem.websiteVisitItemData == websiteVisitItemData)
         return true;
index 835535e..01b7fa5 100755 (executable)
@@ -45,7 +45,7 @@ class WebsiteHistoryItemVisitItemsMob
         struct LayoutVisitItemObjects layoutVisitItemObjects;
     };
 public:
-    WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItems);
+    explicit WebsiteHistoryItemVisitItemsMob(WebsiteVisitItemDataPtr websiteVisitItems);
     virtual ~WebsiteHistoryItemVisitItemsMob();
     Evas_Object* init(Evas_Object* parent, const std::string& edjeFilePath);
     /**
@@ -57,7 +57,7 @@ public:
     // static signals to allow easy connection in HistoryDaysListManager
     static boost::signals2::signal<void(const WebsiteVisitItemDataPtr, bool)> signalButtonClicked;
 
-    bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData);
+    bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData) const;
     void removeItem(WebsiteVisitItemDataPtrConst websiteVisitItemData);
     int getVisitItemsId();
     int size() {return eina_list_count(elm_box_children_get(m_boxMainVertical));}
index 9ecda8b..56c8d9b 100755 (executable)
@@ -42,7 +42,6 @@ EXPORT_SERVICE(HistoryUI, "org.tizen.browser.historyui")
 
 HistoryUI::HistoryUI()
     : m_parent(nullptr)
-    , m_main_layout(nullptr)
     , m_buttonClose(nullptr)
     , m_buttonClear(nullptr)
     , m_daysList(nullptr)
@@ -51,9 +50,6 @@ HistoryUI::HistoryUI()
     , m_modulesToolbar(nullptr)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("HistoryUI/History.edj");
-
     if (!m_historyDaysListManager)
         m_historyDaysListManager = std::make_shared<HistoryDaysListManagerMob>();
 
@@ -62,7 +58,9 @@ HistoryUI::HistoryUI()
     m_historyDaysListManager->setRightButtonEnabledForHistory.connect(
         boost::bind(&HistoryUI::setRightButtonEnabled, this, _1));
     m_historyDaysListManager->setSelectedItemsCount.connect([this](auto count){
-        m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str());
+        m_naviframe->setTitle(
+            count ? (boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str()
+                : "IDS_BR_HEADER_SELECT_ITEMS_ABB2");
     });
 }
 
@@ -73,16 +71,12 @@ HistoryUI::~HistoryUI()
 void HistoryUI::showUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_main_layout);
     m_naviframe->show();
-    evas_object_show(m_main_layout);
 }
 
 void HistoryUI::hideUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_main_layout);
-    evas_object_hide(m_main_layout);
     clearItems();
     m_naviframe->hide();
 }
@@ -109,19 +103,11 @@ Evas_Object* HistoryUI::getContent()
 
 void HistoryUI::createHistoryUILayout()
 {
-    elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
     if (!m_naviframe)
         m_naviframe = std::make_shared<NaviframeWrapper>(m_parent);
 
-    m_main_layout = elm_layout_add(m_naviframe->getLayout());
-    m_naviframe->setContent(m_main_layout);
-
-    elm_layout_file_set(m_main_layout, m_edjFilePath.c_str(), "history-layout");
-    evas_object_size_hint_weight_set(m_main_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(m_main_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    m_naviframe->setContent(createDaysList(m_naviframe->getLayout()));
 
-    m_daysList = createDaysList(m_main_layout);
-    clearItems();
     createTopContent();
 
     elm_object_signal_emit(m_naviframe->getLayout(), "show_toolbars", "ui");
@@ -139,14 +125,14 @@ void HistoryUI::createTopContent()
 
 Evas_Object* HistoryUI::createDaysList(Evas_Object* parent, bool isRemoveMode)
 {
-    M_ASSERT(history_layout);
+    M_ASSERT(parent);
 
-    auto list = m_historyDaysListManager->createDaysList(parent, isRemoveMode);
+    m_daysList = m_historyDaysListManager->createDaysList(parent, isRemoveMode);
 
-    evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_size_hint_weight_set(m_daysList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_daysList, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
-    return list;
+    return m_daysList;
 }
 
 void HistoryUI::removeSelectedHistoryItems()
index 4cf33c4..a26d869 100755 (executable)
@@ -52,7 +52,7 @@ public:
     Evas_Object* getContent();
     void showUI();
     void hideUI();
-    Evas_Object* createDaysList(Evas_Object* history_layout, bool isRemoveMode = false);
+    Evas_Object* createDaysList(Evas_Object* parent, bool isRemoveMode = false);
     void removeSelectedHistoryItems();
     virtual std::string getName();
     void addHistoryItems(std::shared_ptr<services::HistoryItemVector>,
@@ -76,9 +76,7 @@ private:
     static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part);
     static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 
-    std::string m_edjFilePath;
     Evas_Object *m_parent;
-    Evas_Object *m_main_layout;
     Evas_Object *m_buttonClose;
     Evas_Object *m_buttonClear;
     Evas_Object *m_daysList;
diff --git a/services/HistoryUI/HistoryUIFocusManager.cpp b/services/HistoryUI/HistoryUIFocusManager.cpp
deleted file mode 100755 (executable)
index ecec857..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "HistoryUIFocusManager.h"
-#include "HistoryDaysListManager/HistoryDaysListManager.h"
-
-namespace tizen_browser{
-namespace base_ui{
-
-HistoryUIFocusManager::HistoryUIFocusManager(
-        HistoryDaysListManagerPtr historyDaysListManager)
-    : m_historyDaysListManager(historyDaysListManager)
-{
-}
-
-HistoryUIFocusManager::~HistoryUIFocusManager()
-{
-}
-
-void HistoryUIFocusManager::setFocusObj(Evas_Object* obj)
-{
-    m_focusObject = obj;
-}
-
-#if !PROFILE_MOBILE
-void HistoryUIFocusManager::refreshFocusChain()
-{
-    elm_object_focus_custom_chain_unset(m_focusObject);
-
-    m_historyDaysListManager->setFocusChain(m_focusObject);
-
-    elm_object_focus_custom_chain_append(m_focusObject, m_buttonClear, NULL);
-    elm_object_focus_custom_chain_append(m_focusObject, m_buttonClose, NULL);
-    elm_object_focus_set(m_buttonClose, EINA_TRUE);
-}
-
-void HistoryUIFocusManager::unsetFocusChain()
-{
-    elm_object_focus_custom_chain_unset(m_focusObject);
-}
-#endif
-
-void HistoryUIFocusManager::setHistoryUIButtons(Evas_Object* buttonClose, Evas_Object* buttonClear)
-{
-    m_buttonClose = buttonClose;
-    m_buttonClear = buttonClear;
-}
-
-}
-}
diff --git a/services/HistoryUI/HistoryUIFocusManager.h b/services/HistoryUI/HistoryUIFocusManager.h
deleted file mode 100755 (executable)
index 3aa3725..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef HISTORYUIFOCUSMANAGER_H_
-#define HISTORYUIFOCUSMANAGER_H_
-
-#include <memory>
-#include <Elementary.h>
-
-namespace tizen_browser{
-namespace base_ui{
-
-class HistoryDaysListManager;
-using HistoryDaysListManagerPtr = std::shared_ptr<HistoryDaysListManager>;
-
-class HistoryUIFocusManager
-{
-public:
-    HistoryUIFocusManager(HistoryDaysListManagerPtr historyDaysListManager);
-    virtual ~HistoryUIFocusManager();
-    void setFocusObj(Evas_Object* obj);
-    void refreshFocusChain();
-    void unsetFocusChain();
-    void setHistoryUIButtons(Evas_Object* buttonClose, Evas_Object* buttonClear);
-
-private:
-    Evas_Object* m_focusObject{nullptr};
-    HistoryDaysListManagerPtr m_historyDaysListManager;
-
-    Evas_Object* m_buttonClose{nullptr};
-    Evas_Object* m_buttonClear{nullptr};
-};
-
-}
-}
-
-#endif /* HISTORYUIFOCUSMANAGER_H_ */
index 5a4a1e8..7303304 100755 (executable)
@@ -4,7 +4,7 @@
 
 collections { base_scale: 2.6;
     group {
-        name: "arrow-layout";
+        name: "arrow-layout-expanded";
         images {
             image: "core_icon_expand_close.png" COMP;
             image: "core_icon_expand_open.png" COMP;
@@ -46,13 +46,18 @@ collections { base_scale: 2.6;
                     inherit: "default" 0.0;
                     image.normal: "core_icon_expand_close.png";
                 }
+                description {
+                    state: "expand" 0.0;
+                    inherit: "default" 0.0;
+                    image.normal: "core_icon_expand_open.png";
+                }
             }
         }
         programs {
             program {
                 name: "expanded";
                 signal: "state,expanded,signal";
-                action: STATE_SET "default" 0.0;
+                action: STATE_SET "expand" 0.0;
                 target: "elm.icon.image";
             }
             program {
@@ -63,6 +68,29 @@ collections { base_scale: 2.6;
             }
         }
     }
+    group { name: "arrow-layout-contracted";
+        inherit: "arrow-layout-expanded";
+        parts {
+            part {
+                name: "elm.icon.image";
+                scale : 1;
+                type : IMAGE;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    min: 64 64 ;
+                    max: 64 64;
+                    fixed: 1 1;
+                    align: 0.5 0.5;
+                    rel1 { relative: 0.0 0.0; to: "bg"; }
+                    rel2 { relative: 1.0 1.0; to: "bg"; }
+                    image.normal: "core_icon_expand_close.png";
+                    color: 61 185 204 255;
+                }
+            }
+        }
+    }
+
     group { name: "layoutScrollerDays";
             parts {
                 BACKGROUND_COVER("", 1, "colorMainBg")
diff --git a/services/HistoryUI/edc/History_mob.edc b/services/HistoryUI/edc/History_mob.edc
deleted file mode 100755 (executable)
index 9ec23d5..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-collections { base_scale: 2.6;
-    group {
-        name: "history-layout";
-        parts {
-            part {
-                name: "history_bg";
-                type: RECT;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 244 244 244 255;
-                }
-            }
-            part {
-                name: "action_bar_history";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    min: 0 108;
-                    max: -1 108;
-                    align: 0.0 0.0;
-                    fixed: 0 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "history_bg";
-                    }
-                }
-             }
-             part {
-                name: "history_list";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    min: 0 0;
-                    max: -1 -1;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 1.0;
-                        to: "action_bar_history";
-                    }
-                }
-            }
-        }
-    }
-    group {
-        name: "action_bar";
-        parts{
-            part {
-                name: "bg_clipper";
-                scale:1;
-                type: RECT;
-                description {
-                    state: "default" 0.0;
-                    color: 255 255 255 255;
-                    align: 0.0 0.0;
-                }
-            }
-            part {
-                name: "history_manager_title";
-                scale:1;
-                type: TEXT;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-                    color: 51 51 51 255;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg_clipper";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg_clipper";
-                    }
-                    text {
-                        text: "History Manager";
-                        font: "Tizen";
-                        size: 45;
-                        align: 0.5 0.5;
-                    }
-                }
-            }
-            part {
-                name: "clear_spacer";
-                scale: 1;
-                type: SPACER;
-                description {
-                    state: "default" 0.0;
-                    align: 1.0 1.0;
-                    min: 16 22;
-                    max: 16 22;
-                    fixed: 1 1;
-                }
-            }
-            part {
-                name: "clearhistory_click";
-                scale:1;
-                type: SWALLOW;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 1.0 1.0;
-                    fixed: 1 1;
-                    min: 64 64;
-                    max: 64 64;
-                    rel2 {
-                        relative: 0.0 0.0;
-                        to: "clear_spacer";
-                    }
-                }
-            }
-            part {
-                name: "close_spacer";
-                scale: 1;
-                type: SPACER;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 16 22;
-                    max: 16 22;
-                    fixed: 1 1;
-                }
-            }
-            part {
-                name: "close_click";
-                scale:1;
-                type: SWALLOW;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 1 1;
-                    min: 64 64;
-                    max: 64 64;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "close_spacer";
-                    }
-                }
-            }
-        }
-    }
-}
index 49126dc..b5c1419 100755 (executable)
@@ -125,21 +125,10 @@ Eina_Bool PlatformInputManager::__filter(void *data, void */*loop_data*/, int ty
             self->rightPressed();
         else if(!keyName.compare("KEY_ENTER"))
             self->enterPressed();
-#if PROFILE_MOBILE
         else if(!keyName.compare("XF86Back"))
             self->XF86BackPressed();
-#else
-        else if(!keyName.compare("F11") || !keyName.compare("XF86Back"))
-            self->backPressed();
-        else if(!keyName.compare("XF86Red"))    // F4 - Red
-            self->redPressed();
-        else if(!keyName.compare("XF86Green"))  // F5 - Green
-            self->greenPressed();
-        else if(!keyName.compare("XF86Yellow")) // F6 - Yellow
-            self->yellowPressed();
-        else if(!keyName.compare("XF86Blue"))   // F7 - Blue
-            self->bluePressed();
-#endif
+        else if(!keyName.compare("XF86Menu"))
+            self->XF86MenuPressed();
         else if(!keyName.compare("Escape"))
             self->escapePressed();
 
index a2a8e10..3a984cf 100755 (executable)
@@ -55,15 +55,9 @@ public:
     boost::signals2::signal<void ()> rightPressed;
     boost::signals2::signal<void ()> backPressed;
     boost::signals2::signal<void ()> escapePressed;
-#if PROFILE_MOBILE
     boost::signals2::signal<void ()> XF86BackPressed;
+    boost::signals2::signal<void ()> XF86MenuPressed;
     boost::signals2::signal<void ()> menuButtonPressed;
-#else
-    boost::signals2::signal<void ()> redPressed;
-    boost::signals2::signal<void ()> greenPressed;
-    boost::signals2::signal<void ()> yellowPressed;
-    boost::signals2::signal<void ()> bluePressed;
-#endif
     boost::signals2::signal<void (int, int)> mouseClicked;
 
     /**
diff --git a/services/QuickAccess/QAGengrid.h b/services/QuickAccess/QAGengrid.h
new file mode 100755 (executable)
index 0000000..fb3c9ec
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef QA_GENGRID_H
+#define QA_GENGRID_H
+
+#include <Elementary.h>
+#include <Evas.h>
+#include <string>
+#include <map>
+
+#include "Tools/GengridWrapper.h"
+#include "BrowserLogger.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+class QAGengrid : public GengridWrapper
+{
+public:
+    QAGengrid() : GengridWrapper::GengridWrapper() {};
+    QAGengrid(Evas_Object* parent) : GengridWrapper::GengridWrapper(parent) {};
+    virtual ~QAGengrid() = default;
+    void create() override {
+        BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+        m_gengrid = elm_gengrid_add(m_parent);
+
+        elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+        elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+        tools::EflTools::setExpandHints(m_gengrid);
+
+        elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
+        elm_scroller_bounce_set(m_gengrid, EINA_FALSE, EINA_FALSE);
+        evas_object_pass_events_set(m_gengrid, EINA_FALSE);
+
+        evas_object_show(m_gengrid);
+    }
+};
+
+}
+}
+
+#endif // QA_GENGRID_H
index 1b2d1d1..7a14c91 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the License);
  * you may not use this file except in compliance with the License.
@@ -39,17 +39,20 @@ QuickAccess::QuickAccess()
     , m_layout(nullptr)
     , m_horizontalScroller(nullptr)
     , m_box(nullptr)
-    , m_quickAccessView(nullptr)
-    , m_mostVisitedView(nullptr)
-    , m_quickAccessGengrid(nullptr)
-    , m_mostVisitedGengrid(nullptr)
+    , m_qaEditLayout(nullptr)
+    , m_mvEditLayout(nullptr)
+    , m_quickAccessGengrid()
+    , m_mostVisitedGengrid()
+    , m_empty_layout(nullptr)
     , m_index(nullptr)
+    , m_addQuickAccessItem(nullptr)
     , m_currPage(QuickAccess::QUICKACCESS_PAGE)
     , m_quickAccess_item_class(nullptr)
     , m_mostVisited_item_class(nullptr)
     , m_quickAccess_tile_class(nullptr)
     , m_state(QuickAccessState::Default)
     , m_verticalScroller(nullptr)
+    , m_reordered(false)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     edjFilePath = EDJE_DIR;
@@ -61,8 +64,8 @@ QuickAccess::QuickAccess()
 QuickAccess::~QuickAccess()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    clearQuickAccessGengrid();
-    clearMostVisitedGengrid();
+    m_quickAccessGengrid.clear();
+    m_mostVisitedGengrid.clear();
     elm_gengrid_item_class_free(m_quickAccess_item_class);
     elm_gengrid_item_class_free(m_mostVisited_item_class);
     elm_gengrid_item_class_free(m_quickAccess_tile_class);
@@ -74,16 +77,44 @@ void QuickAccess::init(Evas_Object* parent)
     m_parent = parent;
 }
 
-
 Evas_Object* QuickAccess::getContent()
 {
     M_ASSERT(m_parent);
-    if (!m_layout) {
+    if (!m_layout)
         createQuickAccessLayout(m_parent);
-    }
     return m_layout;
 }
 
+Evas_Object *QuickAccess::getQuickAccessEditLayout()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_qaEditLayout) {
+        elm_object_part_content_set(m_qaEditLayout, "view", m_quickAccessGengrid());
+        return m_qaEditLayout;
+    }
+
+    m_qaEditLayout = elm_layout_add(m_parent);
+    elm_layout_file_set(m_qaEditLayout, edjFilePath.c_str(), "edit_layout");
+    tools::EflTools::setExpandHints(m_mvEditLayout);
+    elm_object_part_content_set(m_qaEditLayout, "view", m_quickAccessGengrid());
+    return m_qaEditLayout;
+}
+
+Evas_Object *QuickAccess::getMostVisitedEditLayout()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_mvEditLayout) {
+        elm_object_part_content_set(m_mvEditLayout, "view", m_mostVisitedGengrid());
+        return m_mvEditLayout;
+    }
+
+    m_mvEditLayout = elm_layout_add(m_parent);
+    elm_layout_file_set(m_mvEditLayout, edjFilePath.c_str(), "edit_layout");
+    tools::EflTools::setExpandHints(m_mvEditLayout);
+    elm_object_part_content_set(m_mvEditLayout, "view", m_mostVisitedGengrid());
+    return m_mvEditLayout;
+}
+
 void QuickAccess::createItemClasses()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -109,30 +140,26 @@ void QuickAccess::createItemClasses()
         m_quickAccess_tile_class->func.text_get = nullptr;
         m_quickAccess_tile_class->func.content_get = _grid_quickaccessADD_content_get;
         m_quickAccess_tile_class->func.state_get = nullptr;
-        m_quickAccess_tile_class->func.del = nullptr;
+        m_quickAccess_tile_class->func.del = _grid_quickaccessADD_del;
     }
 }
 
-
 void QuickAccess::createQuickAccessLayout(Evas_Object* parent)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_desktopMode = false;  //TODO: delete this
 
     if (m_layout)
         evas_object_del(m_layout);
 
     m_layout = elm_layout_add(parent);
     elm_layout_file_set(m_layout, edjFilePath.c_str(), "main_layout");
-    evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set (m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    tools::EflTools::setExpandHints(m_layout);
     evas_object_show(m_layout);
 
     evas_object_event_callback_add(m_layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
 
     m_index = elm_index_add(m_layout);
-    evas_object_size_hint_weight_set(m_index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(m_index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    tools::EflTools::setExpandHints(m_index);
     elm_object_style_set(m_index, "pagecontrol");
     elm_index_horizontal_set(m_index, EINA_TRUE);
     elm_index_autohide_disabled_set(m_index, EINA_TRUE);
@@ -143,17 +170,14 @@ void QuickAccess::createQuickAccessLayout(Evas_Object* parent)
     elm_index_level_go(m_index, 0);
 
     m_horizontalScroller = elm_scroller_add(m_layout);
-    elm_scroller_page_scroll_limit_set(m_horizontalScroller, 1, 0);
-    elm_scroller_movement_block_set(m_horizontalScroller, ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL);
-    elm_scroller_loop_set(m_horizontalScroller, EINA_FALSE, EINA_FALSE);
-    elm_scroller_page_relative_set(m_horizontalScroller, 1.0, 0.0);
-    elm_scroller_policy_set(m_horizontalScroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
     elm_scroller_bounce_set(m_horizontalScroller, EINA_FALSE, EINA_FALSE);
+    elm_scroller_policy_set(m_horizontalScroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
     elm_object_part_content_set(m_layout, "view", m_horizontalScroller);
     evas_object_smart_callback_add(m_horizontalScroller, "scroll,anim,stop",
         _horizontalScroller_scroll, this);
 
     createBox(m_horizontalScroller);
+    createEmptyLayout();
 }
 
 void QuickAccess::createBox(Evas_Object* parent)
@@ -165,81 +189,64 @@ void QuickAccess::createBox(Evas_Object* parent)
     evas_object_show(m_box);
 
     createQuickAccessView(m_box);
-    elm_box_pack_end(m_box, m_quickAccessView);
     createMostVisitedView(m_box);
-    elm_box_pack_end(m_box, m_mostVisitedView);
 }
 
 void QuickAccess::createMostVisitedView(Evas_Object * parent)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    if (m_mostVisitedView)
-        evas_object_del(m_mostVisitedView);
-
-    m_mostVisitedView = elm_layout_add(parent);
-    elm_layout_theme_set(m_mostVisitedView, "layout", "application", "default");
-    evas_object_size_hint_weight_set(m_mostVisitedView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set (m_mostVisitedView, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    evas_object_show(m_mostVisitedView);
-
-    evas_object_event_callback_add(m_mostVisitedView, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
-
-    m_mostVisitedGengrid = createMostVisitedGengrid(m_mostVisitedView);
-    evas_object_smart_callback_add(m_mostVisitedGengrid, "realized", _quickAccess_tile_realized, this);  //TODO
-
-    evas_object_show(m_mostVisitedGengrid);
+    m_mostVisitedGengrid.init(parent);
+    m_mostVisitedGengrid.registerCallback("realized", _quickAccess_tile_realized, this);
 }
 
 void QuickAccess::createQuickAccessView(Evas_Object * parent)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    m_quickAccessView = elm_layout_add(parent);
-    elm_layout_theme_set(m_quickAccessView, "layout", "application", "default");
-    evas_object_size_hint_weight_set(m_quickAccessView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(m_quickAccessView, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    evas_object_show(m_quickAccessView);
-
-    m_quickAccessGengrid = createQuickAccessGengrid(m_quickAccessView);
-    evas_object_smart_callback_add(m_quickAccessGengrid, "realized", _quickAccess_tile_realized, this);
-
-    evas_object_show(m_quickAccessGengrid);
-}
-
-void QuickAccess::deleteQuickAccessSelectedItem(Elm_Widget_Item *item)
-{
-    elm_object_item_del(item);
-    elm_gengrid_realized_items_update(m_quickAccessGengrid);
+    m_quickAccessGengrid.init(parent);
+    m_quickAccessGengrid.registerCallback("realized", _quickAccess_tile_realized, this);
+    m_quickAccessGengrid.registerCallback("moved", _quickAccess_tile_moved, this);
 }
 
-Evas_Object* QuickAccess::createQuickAccessGengrid(Evas_Object *parent)
+void QuickAccess::createEmptyLayout()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    Evas_Object *quickAccessGengrid = elm_gengrid_add(parent);
+    m_empty_layout = elm_layout_add(m_layout);
+    elm_layout_theme_set(m_empty_layout, "layout", "nocontents", "default");
+
+    tools::EflTools::setExpandHints(m_empty_layout);
 
-    elm_gengrid_select_mode_set(quickAccessGengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
-    elm_gengrid_multi_select_set(quickAccessGengrid, EINA_TRUE);
-    elm_scroller_policy_set(quickAccessGengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
-    evas_object_size_hint_weight_set(quickAccessGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(quickAccessGengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_SHORTCUTS");
+    elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",  "IDS_BR_BODY_AFTER_YOU_VISIT_WEBPAGES_THE_PAGES_YOU_HAVE_VISITED_THE_MOST_WILL_BE_SHOWN_HERE");
 
-    elm_gengrid_align_set(quickAccessGengrid, 0.5, 0.1);
-    elm_scroller_bounce_set(quickAccessGengrid, EINA_FALSE, EINA_FALSE);
+    elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
+    elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
 
-    return quickAccessGengrid;
+    elm_object_part_content_set(m_layout, "elm.swallow.content_overlay", m_empty_layout);
+    evas_object_color_set(m_empty_layout, 249, 249, 249, 255);
 }
 
-Evas_Object *QuickAccess::createMostVisitedGengrid(Evas_Object *parent)
+void QuickAccess::updateNoMostVisitedText()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    Evas_Object *mostVisitedGengrid = elm_gengrid_add(parent);
-    evas_object_size_hint_weight_set(mostVisitedGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(mostVisitedGengrid, EVAS_HINT_FILL, EVAS_HINT_EXPAND);
-    elm_gengrid_align_set(mostVisitedGengrid, 0.5, 0.1);
-    elm_scroller_bounce_set(mostVisitedGengrid, EINA_FALSE, EINA_FALSE);
+    if (m_currPage == MOST_VISITED_PAGE) {
+        if (m_mostVisitedGengrid.count() > 0) {
+            evas_object_hide(m_empty_layout);
+            m_mostVisitedGengrid.show();
+            elm_object_signal_emit(m_layout, "hide_overlay", "ui");
+        } else {
+            elm_object_translatable_part_text_set(m_empty_layout, "elm.text", "IDS_BR_NPBODY_NO_SHORTCUTS");
+            elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", "IDS_BR_BODY_AFTER_YOU_VISIT_WEBPAGES_THE_PAGES_YOU_HAVE_VISITED_THE_MOST_WILL_BE_SHOWN_HERE");
+            m_mostVisitedGengrid.show();
+            evas_object_show(m_empty_layout);
+            elm_object_signal_emit(m_layout, "show_overlay", "ui");
+        }
+    } else {
+        evas_object_hide(m_empty_layout);
+        elm_object_signal_emit(m_layout, "hide_overlay", "ui");
+    }
 
-    return mostVisitedGengrid;
 }
 
 void QuickAccess::_addToQuickAccess_clicked(void * data, Evas_Object *, void *)
@@ -255,12 +262,13 @@ void QuickAccess::setPageTitle()
 {
     BROWSER_LOGD("[%s:%d] currPage: %d", __PRETTY_FUNCTION__, __LINE__, m_currPage);
     if (m_currPage == MOST_VISITED_PAGE) {
-        elm_object_translatable_part_text_set(m_layout, "screen_title", "Most visited websites");  //TODO: translate
+        elm_object_translatable_part_text_set(m_layout, "screen_title", _("IDS_BR_BODY_MOST_VISITED_SITES"));
         setIndexPage(&MOST_VISITED_PAGE);
     } else {
-        elm_object_translatable_part_text_set(m_layout, "screen_title", "Quick access");  //TODO: translate
+        elm_object_translatable_part_text_set(m_layout, "screen_title", _("IDS_BR_HEADER_QUICK_ACCESS_ABB"));
         setIndexPage(&QUICKACCESS_PAGE);
     }
+    updateNoMostVisitedText();
 }
 
 void QuickAccess::_horizontalScroller_scroll(void* data, Evas_Object* /*scroller*/, void* /*event_info*/)
@@ -269,7 +277,7 @@ void QuickAccess::_horizontalScroller_scroll(void* data, Evas_Object* /*scroller
     if (data) {
         auto self = static_cast<QuickAccess*>(data);
         int page_no;
-        elm_scroller_current_page_get(self->m_horizontalScroller, &page_no, NULL);
+        elm_scroller_current_page_get(self->m_horizontalScroller, &page_no, nullptr);
         self->m_currPage = page_no;
         self->setPageTitle();
     } else {
@@ -285,13 +293,14 @@ void QuickAccess::addMostVisitedItem(std::shared_ptr<services::HistoryItem> hi)
     itemData->item = hi;
     itemData->quickAccess = this;
 
-    elm_gengrid_item_append(m_mostVisitedGengrid, m_mostVisited_item_class, itemData, _thumbMostVisitedClicked, itemData);
+    m_mostVisitedGengrid.append(
+        m_mostVisited_item_class, itemData, _thumbMostVisitedClicked, itemData);
 }
 
 void QuickAccess::setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> items)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    clearMostVisitedGengrid();
+    m_mostVisitedGengrid.clear();
 
     for (auto it = items->begin(); it != items->end(); ++it)
          addMostVisitedItem(*it);
@@ -304,19 +313,24 @@ void QuickAccess::addQuickAccessItem(services::SharedQuickAccessItem qa)
     QuickAccessItemData *itemData = new QuickAccessItemData();
     itemData->item = qa;
     itemData->quickAccess = this;
-    elm_gengrid_item_append(m_quickAccessGengrid, m_quickAccess_item_class, itemData, _thumbQuickAccessClicked, itemData);
+    itemData->genlistItem = m_quickAccessGengrid.append(
+        m_quickAccess_item_class, itemData, nullptr, nullptr);
 }
 
-void QuickAccess::clearMostVisitedGengrid()
+void QuickAccess::addQuickAccessItemBeforeADDButton(const services::SharedQuickAccessItem& qa)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_gengrid_clear(m_mostVisitedGengrid);
+    QuickAccessItemData *itemData = new QuickAccessItemData();
+    itemData->item = qa;
+    itemData->quickAccess = this;
+    itemData->genlistItem = m_quickAccessGengrid.insertBefore(
+        m_quickAccess_item_class, itemData, m_addQuickAccessItem, nullptr, nullptr);
 }
 
 void QuickAccess::setQuickAccessItems(services::SharedQuickAccessItemVector items)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    clearQuickAccessGengrid();
+    m_quickAccessGengrid.clear();
     for (auto it = items.begin(); it != items.end(); ++it)
          addQuickAccessItem(*it);
     items.clear();
@@ -326,7 +340,8 @@ void QuickAccess::setQuickAccessItems(services::SharedQuickAccessItemVector item
 void QuickAccess::addToQuickAccessTile()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_gengrid_item_append(m_quickAccessGengrid, m_quickAccess_tile_class, this, _addToQuickAccess_clicked, this);
+    m_addQuickAccessItem = m_quickAccessGengrid.append(
+        m_quickAccess_tile_class, this, nullptr, nullptr);
 }
 
 void QuickAccess::setIndexPage(const void *page) const
@@ -353,25 +368,23 @@ void QuickAccess::orientationChanged()
     auto landscape = isLandscape();
     if (landscape) {
         if (*landscape) {
-            elm_gengrid_item_size_set(
-                m_quickAccessGengrid,
+            elm_layout_signal_emit(m_layout, "set,landscape", "ui");
+            m_quickAccessGengrid.itemSizeSet(
                 Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH_LANDSCAPE),
                 Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT_LANDSCAPE));
-
-            elm_gengrid_item_size_set(
-                m_mostVisitedGengrid,
+            m_mostVisitedGengrid.itemSizeSet(
                 Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH_LANDSCAPE),
                 Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT_LANDSCAPE));
+            elm_scroller_page_size_set(m_horizontalScroller, ELM_SCALE_SIZE(SCROLLER_LANDSCAPE_PAGE), 0);
         } else {
-            elm_gengrid_item_size_set(
-                m_quickAccessGengrid,
+            elm_layout_signal_emit(m_layout, "set,horizontal", "ui");
+            m_quickAccessGengrid.itemSizeSet(
                 Z3_SCALE_SIZE(QUICKACCESS_ITEM_WIDTH),
                 Z3_SCALE_SIZE(QUICKACCESS_ITEM_HEIGHT));
-
-            elm_gengrid_item_size_set(
-                m_mostVisitedGengrid,
+            m_mostVisitedGengrid.itemSizeSet(
                 Z3_SCALE_SIZE(MOSTVISITED_ITEM_WIDTH),
                 Z3_SCALE_SIZE(MOSTVISITED_ITEM_HEIGHT));
+            elm_scroller_page_size_set(m_horizontalScroller, ELM_SCALE_SIZE(SCROLLER_PORTRAIT_PAGE), 0);
         }
     } else {
         BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
@@ -389,20 +402,31 @@ void QuickAccess::_quickAccess_tile_realized(void* data, Evas_Object*, void* eve
     }
 }
 
+void QuickAccess::_quickAccess_tile_moved(void *data, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (data) {
+        auto self = static_cast<QuickAccess*>(data);
+        self->m_reordered = true;
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+    }
+}
+
 void QuickAccess::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj*/, void* /*event_info*/)
 {
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         auto self = static_cast<QuickAccess*>(data);
         int w, h;
-        evas_object_geometry_get(self->m_layout, NULL, NULL, &w, &h);
-        evas_object_size_hint_min_set(self->m_mostVisitedGengrid, w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
-        evas_object_size_hint_min_set(self->m_quickAccessGengrid, w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
+        evas_object_geometry_get(self->m_layout, nullptr, nullptr, &w, &h);
+        evas_object_size_hint_min_set(self->m_mostVisitedGengrid(), w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
+        evas_object_size_hint_min_set(self->m_quickAccessGengrid(), w, h-Z3_SCALE_SIZE(HEADER_HEIGHT));
         self->showScrollerPage(self->m_currPage);
     }
 }
 
-Evas_Object * QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object* obj, const char *part)
+Evas_Object *QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object* obj, const char *part)
 {
     BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
     if (data) {
@@ -411,7 +435,8 @@ Evas_Object * QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object
         if (!strcmp(part, "elm.swallow.icon")) {
             Evas_Object *button = elm_button_add(obj);
             elm_object_style_set(button, "roundedrect");
-            elm_object_part_text_set(button, "button_text", itemData->item->getTitle().c_str());
+            elm_object_translatable_part_text_set(button, "button_text", itemData->item->getTitle().c_str());
+            evas_object_smart_callback_add(button, "clicked", _thumbQuickAccessClicked, data);
 
             if (itemData->item->has_favicon()) {
                 // Favicon
@@ -421,7 +446,7 @@ Evas_Object * QuickAccess::_grid_quickaccess_content_get(void *data, Evas_Object
             } else {
                 if (itemData->item->getTitle().length() > 0) {
                     auto firstLetter = std::string(1, static_cast<char>(std::toupper(itemData->item->getTitle()[0])));
-                    elm_object_part_text_set(button, "center_label", firstLetter.c_str());
+                    elm_object_translatable_part_text_set(button, "center_label", firstLetter.c_str());
                 }
 
                 elm_layout_signal_emit(button, "show,bg,rectangle", "event");
@@ -450,9 +475,10 @@ Evas_Object *QuickAccess::_grid_quickaccessADD_content_get(void *data, Evas_Obje
         if (!strcmp(part, "elm.swallow.icon")) {
             Evas_Object *button = elm_button_add(obj);
             elm_object_style_set(button, "roundedrectADD");
-            elm_object_part_text_set(button, "button_text", "Add");
+            elm_object_translatable_part_text_set(button, "button_text", "Add");
             elm_layout_signal_emit(button, "show,bg,rectangle", "event");
             setButtonColor(button, 150, 180, 255, 255);
+            evas_object_smart_callback_add(button, "clicked", _addToQuickAccess_clicked, data);
             return button;
         }
     } else {
@@ -465,8 +491,27 @@ void QuickAccess::_grid_quickaccess_del(void* data, Evas_Object*)
 {
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     auto itemData = static_cast<QuickAccessItemData*>(data);
-    if (itemData)
+    if (itemData) {
+        auto button = elm_object_item_part_content_get(itemData->genlistItem, "elm.swallow.icon");
+        evas_object_smart_callback_del(button, "clicked", _thumbQuickAccessClicked);
+        if (itemData->quickAccess->m_state == QuickAccessState::Edit) {
+            button = elm_object_item_part_content_get(itemData->genlistItem, "elm.button");
+            evas_object_smart_callback_del(button, "clicked", __quckAccess_del_clicked);
+        }
+
         delete itemData;
+    }
+}
+
+void QuickAccess::_grid_quickaccessADD_del(void *data, Evas_Object*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    auto itemData = static_cast<QuickAccess*>(data);
+    if (itemData) {
+        auto button = elm_object_item_part_content_get(itemData->m_addQuickAccessItem,
+            "elm.swallow.icon");
+        evas_object_smart_callback_del(button, "clicked", _addToQuickAccess_clicked);
+    }
 }
 
 void QuickAccess::__quckAccess_del_clicked(void *data, Evas_Object */*obj*/, void *)
@@ -475,8 +520,7 @@ void QuickAccess::__quckAccess_del_clicked(void *data, Evas_Object */*obj*/, voi
     if (data) {
         auto itemData = static_cast<QuickAccessItemData*>(data);
         itemData->quickAccess->deleteQuickAccessItem(itemData->item);
-        itemData->quickAccess->deleteQuickAccessSelectedItem(
-            elm_gengrid_selected_item_get(itemData->quickAccess->m_quickAccessGengrid));
+        itemData->quickAccess->m_quickAccessGengrid.deleteSelectedItem();
     } else {
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
@@ -536,7 +580,7 @@ void QuickAccess::_thumbQuickAccessClicked(void * data, Evas_Object * , void *)
         BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
         QuickAccessItemData * itemData = reinterpret_cast<QuickAccessItemData *>(data);
         if (itemData->quickAccess->m_state == QuickAccessState::Default)
-            itemData->quickAccess->openURLquickaccess(itemData->item, itemData->quickAccess->isDesktopMode());
+            itemData->quickAccess->openURLquickaccess(itemData->item);
     } else {
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
@@ -550,7 +594,7 @@ void QuickAccess::_thumbMostVisitedClicked(void* data, Evas_Object*, void*)
         BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
         HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
         if (itemData->quickAccess->m_state == QuickAccessState::Default) {
-            itemData->quickAccess->openURLhistory(itemData->item, false);
+            itemData->quickAccess->openURLhistory(itemData->item);
         }
     } else {
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -582,12 +626,7 @@ void QuickAccess::showMostVisited()
     elm_scroller_page_show(m_horizontalScroller, MOST_VISITED_PAGE, 0);
 
     m_mv_delete_list.clear();
-}
-
-void QuickAccess::clearQuickAccessGengrid()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_gengrid_clear(m_quickAccessGengrid);
+    setPageTitle();
 }
 
 void QuickAccess::showQuickAccess()
@@ -595,25 +634,26 @@ void QuickAccess::showQuickAccess()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_currPage = QuickAccess::QUICKACCESS_PAGE;
     elm_scroller_page_show(m_horizontalScroller, QUICKACCESS_PAGE, 0);
+    setPageTitle();
 }
 
 void QuickAccess::editQuickAccess()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_state = QuickAccessState::Edit;
-    elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_TRUE);
-    elm_gengrid_realized_items_update(m_quickAccessGengrid);
-    elm_object_part_content_unset(m_quickAccessView, "elm.swallow.content");
-    evas_object_hide(m_mostVisitedGengrid);
+    m_quickAccessGengrid.reorder(true);
+    m_quickAccessGengrid.updateRealized();
+    elm_box_unpack_all(m_box);
+    m_mostVisitedGengrid.hide();
 }
 
 void QuickAccess::deleteMostVisited()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_state = QuickAccessState::DeleteMostVisited;
-    elm_gengrid_realized_items_update(m_mostVisitedGengrid);
-    elm_object_part_content_unset(m_mostVisitedView, "elm.swallow.content");
-    evas_object_hide(m_quickAccessGengrid);
+    m_mostVisitedGengrid.updateRealized();
+    elm_box_unpack_all(m_box);
+    m_quickAccessGengrid.hide();
 }
 
 void QuickAccess::deleteSelectedMostVisitedItems()
@@ -624,11 +664,37 @@ void QuickAccess::deleteSelectedMostVisitedItems()
     }
 }
 
+void QuickAccess::reorderQuickAccessItems()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_reordered) {
+        m_reordered = false;
+        Elm_Object_Item *it = elm_gengrid_first_item_get(m_quickAccessGengrid());
+        int order = 1;
+        while (it) {
+            if (it != m_addQuickAccessItem) {
+                auto itemData = static_cast<QuickAccessItemData*>(elm_object_item_data_get(it));
+                if (order != itemData->item->getOrder()) {
+                    itemData->item->setOrder(order);
+                    itemData->quickAccess->reorderQuickAccessItem(itemData->item, order);
+                }
+                ++order;
+            }
+            it = elm_gengrid_item_next_get(it);
+        }
+    }
+}
+
 void QuickAccess::editingFinished()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_gengrid_reorder_mode_set(m_quickAccessGengrid, EINA_FALSE);
+    m_quickAccessGengrid.reorder(false);
+    if (m_state == QuickAccessState::Edit)
+        elm_object_part_content_unset(m_qaEditLayout, "view");
+    else if (m_state == QuickAccessState::DeleteMostVisited)
+        elm_object_part_content_unset(m_mvEditLayout, "view");
     m_state = QuickAccessState::Default;
+
 }
 
 void QuickAccess::showScrollerPage(int page)
@@ -651,13 +717,13 @@ void QuickAccess::showUI()
     BROWSER_LOGD("[%s:%d] currPage: %d", __PRETTY_FUNCTION__, __LINE__, m_currPage);
     getQuickAccessItems();
     getMostVisitedItems();
-    elm_object_part_content_set(m_mostVisitedView, "elm.swallow.content", m_mostVisitedGengrid);
-    elm_object_part_content_set(m_quickAccessView, "elm.swallow.content", m_quickAccessGengrid);
-    evas_object_show(m_mostVisitedGengrid);
-    evas_object_show(m_quickAccessGengrid);
+    elm_box_pack_end(m_box, m_quickAccessGengrid());
+    elm_box_pack_end(m_box, m_mostVisitedGengrid());
+    m_mostVisitedGengrid.show();
+    m_quickAccessGengrid.show();
     orientationChanged();
     showScrollerPage(m_currPage);
-    setPageTitle();
+    _layout_resize_cb(this, nullptr, nullptr, nullptr);
 }
 
 void QuickAccess::hideUI()
@@ -665,8 +731,8 @@ void QuickAccess::hideUI()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_state == QuickAccessState::Default) {
         evas_object_hide(m_layout);
-        clearMostVisitedGengrid();
-        clearQuickAccessGengrid();
+        m_mostVisitedGengrid.clear();
+        m_quickAccessGengrid.clear();
     }
 }
 
@@ -683,16 +749,6 @@ void QuickAccess::setButtonColor(Evas_Object* button, int r, int g, int b, int a
     free(msg);
 }
 
-bool QuickAccess::isDesktopMode() const
-{
-    return m_desktopMode;
-}
-
-void QuickAccess::setDesktopMode(bool mode)
-{
-    m_desktopMode = mode;
-}
-
 bool QuickAccess::canBeBacked(int tabCount)
 {
     return (tabCount != 0);
index d011794..477205c 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the License);
  * you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "services/HistoryService/HistoryItemTypedef.h"
 #include "QuickAccessItem.h"
 #include "Tools/EflTools.h"
+#include "QAGengrid.h"
 
 namespace tizen_browser{
 namespace base_ui{
@@ -49,19 +50,21 @@ class BROWSER_EXPORT QuickAccess
 public:
     QuickAccess();
     ~QuickAccess();
+    QuickAccess(const QuickAccess&) = delete;
+    QuickAccess& operator=(const QuickAccess&) = delete;
+
     void init(Evas_Object *main_layout);
     Evas_Object* getContent();
-    Evas_Object* getQuickAccessGengrid() {return m_quickAccessGengrid;}
-    Evas_Object* getMostVisitedGengrid() {return m_mostVisitedGengrid;}
-    void setQuickAccessState(QuickAccessState state) {m_state = state;}
-    QuickAccessState getQuickAccessState() {return m_state;}
+    Evas_Object* getQuickAccessEditLayout();
+    Evas_Object* getMostVisitedEditLayout();
+    unsigned getMostVisitedItemsCount() { return m_mostVisitedGengrid.count(); }
+    void setQuickAccessState(QuickAccessState state) { m_state = state; }
+    QuickAccessState getQuickAccessState() const { return m_state; }
     void setMostVisitedItems(std::shared_ptr<services::HistoryItemVector> vec);
     void setQuickAccessItems(services::SharedQuickAccessItemVector vec);
     void hideUI();
     void showUI();
     virtual std::string getName();
-    bool isDesktopMode() const;
-    void setDesktopMode(bool mode);
     bool canBeBacked(int tabCount);
     void backButtonClicked();
     bool isMostVisitedActive();
@@ -71,15 +74,18 @@ public:
     void editQuickAccess();
     void deleteMostVisited();
     void deleteSelectedMostVisitedItems();
+    void reorderQuickAccessItems();
     void editingFinished();
+    void addQuickAccessItemBeforeADDButton(const services::SharedQuickAccessItem& qa);
 
-    boost::signals2::signal<void (services::SharedQuickAccessItem, bool)> openURLquickaccess;
-    boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, bool)> openURLhistory;
+    boost::signals2::signal<void (services::SharedQuickAccessItem)> openURLquickaccess;
+    boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>)> openURLhistory;
     boost::signals2::signal<void ()> getMostVisitedItems;
     boost::signals2::signal<void ()> getQuickAccessItems;
     boost::signals2::signal<void ()> addQuickAccessClicked;
     boost::signals2::signal<void ()> switchViewToWebPage;
     boost::signals2::signal<void (services::SharedQuickAccessItem)> deleteQuickAccessItem;
+    boost::signals2::signal<void (services::SharedQuickAccessItem, unsigned)> reorderQuickAccessItem;
     boost::signals2::signal<void (std::shared_ptr<services::HistoryItem>, int)> removeMostVisitedItem;
     boost::signals2::signal<void (int)> sendSelectedMVItemsCount;
 
@@ -94,33 +100,33 @@ private:
     {
         services::SharedQuickAccessItem item;
         QuickAccess* quickAccess;
+        Elm_Object_Item* genlistItem;
     };
 
     void createItemClasses();
     void addMostVisitedItem(std::shared_ptr<services::HistoryItem>);
     void addQuickAccessItem(services::SharedQuickAccessItem);
-    void clearMostVisitedGengrid();
-    void clearQuickAccessGengrid();
-    Evas_Object* createQuickAccessGengrid(Evas_Object *parent);
-    Evas_Object* createMostVisitedGengrid(Evas_Object *parent);
+    void createEmptyLayout();
+    void updateNoMostVisitedText();
     void showScrollerPage(int page);
     void setPageTitle();
 
     void addToQuickAccessTile();
     void setIndexPage(const void *page) const;
     bool isOrientationLandscape() const;
-    static void _quickAccess_tile_realized(void * data, Evas_Object * obj, void * event_info);
+    static void _quickAccess_tile_realized(void * data, Evas_Object *obj, void *event_info);
+    static void _quickAccess_tile_moved(void *data, Evas_Object *obj, void *event_info);
     static void _layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
 
     void createBox(Evas_Object* parent);
     void createQuickAccessLayout(Evas_Object *parent);
     void createMostVisitedView(Evas_Object *parent);
     void createQuickAccessView(Evas_Object *parent);
-    void deleteQuickAccessSelectedItem(Elm_Widget_Item *item);
 
     static Evas_Object * _grid_quickaccess_content_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object * _grid_quickaccessADD_content_get(void *data, Evas_Object *obj, const char *part);
     static void _grid_quickaccess_del(void *data, Evas_Object *obj);
+    static void _grid_quickaccessADD_del(void *data, Evas_Object *obj);
     static void __quckAccess_del_clicked(void *data, Evas_Object *, void *);
     static char* _grid_mostVisited_text_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object * _grid_mostVisited_content_get(void *data, Evas_Object *obj, const char *part);
@@ -135,13 +141,15 @@ private:
 
     Evas_Object *m_parent;
     Evas_Object *m_layout;
-    Evas_Objectm_horizontalScroller;
+    Evas_Object *m_horizontalScroller;
     Evas_Object *m_box;
-    Evas_Object *m_quickAccessView;
-    Evas_Object *m_mostVisitedView;
-    Evas_Object *m_quickAccessGengrid;
-    Evas_Object *m_mostVisitedGengrid;
-    Evas_Object* m_index;
+    Evas_Object *m_qaEditLayout;
+    Evas_Object *m_mvEditLayout;
+    QAGengrid m_quickAccessGengrid;
+    QAGengrid m_mostVisitedGengrid;
+    Evas_Object *m_empty_layout;
+    Evas_Object *m_index;
+    Elm_Object_Item *m_addQuickAccessItem;
     std::vector<Evas_Object *> m_tiles;
 
     int m_currPage;
@@ -149,10 +157,10 @@ private:
     Elm_Gengrid_Item_Class * m_mostVisited_item_class;
     Elm_Gengrid_Item_Class * m_quickAccess_tile_class;
     std::string edjFilePath;
-    bool m_desktopMode;
     QuickAccessState m_state;
 
     Evas_Object* m_verticalScroller;
+    bool m_reordered;
     std::list<std::shared_ptr<services::HistoryItem>> m_mv_delete_list;
     static const int MOST_VISITED_PAGE;
     static const int QUICKACCESS_PAGE;
@@ -166,6 +174,10 @@ private:
     static const int MOSTVISITED_ITEM_HEIGHT_LANDSCAPE = 208;
     static const int HEADER_HEIGHT = 116+38;
     static const int DEFAULT_BUTTON_COLOR = 190;
+    // TODO: scroller arbitrary values, probably can be changed to screen
+    // size after solving http://suprem.sec.samsung.net/jira/browse/TWF-2437
+    static const int SCROLLER_PORTRAIT_PAGE = 1040;
+    static const int SCROLLER_LANDSCAPE_PAGE = 2200;
 };
 
 }
index 52cdaac..725ff00 100755 (executable)
@@ -126,6 +126,24 @@ group {
             }
         }
 
+        spacer { "titleSpacer"; scale;
+                description {
+                    state: "default" 0.0;
+                    rel1 { relative: 0.0 0.0; to: screen_title_area; }
+                    rel2 { relative: 1.0 1.0; to: screen_title_area; }
+                    fixed: 1 1;
+                    align: 0.0 0.0;
+                    min: 32 0;
+                    max: 32 0;
+                    }
+                description {
+                    state: "landscape" 0.0;
+                    inherit: "default";
+                    min: 60 0;
+                    max: 60 0;
+                }
+            }
+
         part {
             name: "screen_title";
             type: TEXT;
@@ -135,8 +153,8 @@ group {
                 fixed: 1 1;
                 color: 0 180 220 255;
                 rel1 {
-                    to: "screen_title_area";  //TODO: ditto
-                    relative: 0 0;
+                    to: "titleSpacer";
+                    relative: 1 0;
                 }
                 rel2 {
                     to: "screen_title_area";
@@ -145,7 +163,7 @@ group {
                 text {
                     text: "Most Visited";
                     font: "Tizen";
-                    align: 0.1 0.5;
+                    align: 0.0 0.5;
                     size: 45;
                 }
             }
@@ -171,6 +189,33 @@ group {
         }
 
         part {
+            name: "elm.swallow.content_overlay";
+            scale: 1;
+            type: SWALLOW;
+            mouse_events: 1;
+            repeat_events: 1;
+            description {
+                state: "default" 0.0;
+                visible: 0;
+                align: 0.0 0.0;
+                fixed: 0 0;
+                rel1 {
+                    relative: 0.0 0.0;
+                    to: "view";
+                }
+                rel2 {
+                    relative: 1.0 1.0;
+                    to: "view";
+                }
+            }
+            description {
+                state: "empty" 0.0;
+                inherit: "default";
+                visible: 1;
+            }
+        }
+
+        part {
             name: "index_container";
             type: RECT;
             scale: 1;
@@ -224,118 +269,68 @@ group {
             }
         }
     }
-}
 
-group { name: "page_layout";
-    data {
-        item: "focus_highlight" "off";
+    programs {
+        program { name: "set,landscape";
+            signal: "set,landscape";
+            source: "ui";
+            action:  STATE_SET "landscape" 0.0;
+            target: "titleSpacer";
+        }
+        program { name: "set,horizontal";
+            signal: "set,horizontal";
+            source: "ui";
+            action:  STATE_SET "default" 0.0;
+            target: "titleSpacer";
+        }
+        program {
+            name: "show_overlay";
+            signal: "show_overlay";
+            source: "ui";
+            action: STATE_SET "empty" 0.0;
+            target: "elm.swallow.content_overlay";
+        }
+        program {
+            name: "hide_overlay";
+            signal: "hide_overlay";
+            source: "ui";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content_overlay";
+        }
     }
+}
 
+group {
+    name: "edit_layout";
     parts {
-        part { name: "bg";
-            type: RECT;
-            scale: 1;
-            mouse_events: 0;
-            description { state: "default" 0.0;
-                color: 144 0 0 255;
-                align: 0.0 0.0;
-                visible: DEVELOPMENT;
-                fixed: 0 0;
-                min: LAYOUT_WIDTH 0;
-                max: -1 -1;
-                rel1 {
-                    relative: 0 0;
-                }
-                rel2{
-                    relative: 1 1;
-                }
-            }
-            description { state: "landscape" 0.0;
-                inherit: "default" 0.0;
-                min: LAYOUT_WIDTH_LANDSCAPE 0;
-                max: -1 -1;
-            }
+        spacer { "top_spacer"; scale;
+                description {
+                    state: "default" 0.0;
+                    rel1 { relative: 0.0 0.0; }
+                    rel2 { relative: 1.0 1.0; }
+                    fixed: 1 1;
+                    align: 0.0 0.0;
+                    min: 0 52;
+                    max: 0 52;
+                    }
         }
 
-        part { name: "center_swallow";
+        part {
+            name: "view";
             type: SWALLOW;
             scale: 1;
+            mouse_events: 1;
             description { state: "default" 0.0;
-                align: 0.5 0.0;
-                visible: 1;
-                min: BIG_TILE_WIDTH 0;
-                max: BIG_TILE_WIDTH -1;
-                rel1 {
-                    to: "bg";
-                    relative: 0 0;
-                }
-                rel2 {
-                    to: "bg";
-                    relative: 1 1;
-                }
-            }
-            description { state: "empty" 0.0;
-                inherit: "default" 0.0;
-                visible: 0;
-            }
-            description { state: "landscape" 0.0;
-                inherit: "default" 0.0;
-                min: TOTAL_TILES_WIDTH_LANDSCAPE 0;
-                max: TOTAL_TILES_WIDTH_LANDSCAPE -1;
-            }
-        }
-
-        part { name: "elm.text.empty";
-            type: TEXT;
-            scale: 1;
-            description { state: "default" 0.0;
-                visible: 0;
-                align: 0.5 0.5;
-                color: 0 0 0 179;
-                text {
-                    text: "empty";
-                    font: "Sans";
-                    size: 32;
-                    align: 0.5 0.4;
-                }
+                align: 0.0 0.0;
+                fixed: 0 0;
                 rel1 {
-                    to: "bg";
-                    relative: 0 0;
+                    to: "top_spacer";
+                    relative: 0 1;
                 }
                 rel2 {
-                    to: "bg";
                     relative: 1 1;
                 }
             }
-            description { state: "empty" 0.0;
-                inherit: "default" 0.0;
-                visible: 1;
-            }
-        }
-    }
-
-    programs {
-        program { name: "empty";
-            signal: "empty,view";
-            source: "quickaccess";
-            action:  STATE_SET "empty" 0.0;
-            target: "elm.text.empty";
-            target: "center_swallow";
-        }
-        program { name: "not_empty";
-            signal: "not,empty,view";
-            source: "quickaccess";
-            action:  STATE_SET "default" 0.0;
-            target: "elm.text.empty";
-            target: "center_swallow";
-        }
-        program {
-            name: "set_landscape";
-            signal: "set,landscape";
-            source: "quickaccess";
-            action: STATE_SET "landscape" 0.0;
-            target: "bg";
-            target: "center_swallow";
         }
     }
 }
@@ -724,6 +719,7 @@ group { name: "elm/button/base/roundedrect";
             type: SPACER;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 min: QA_BTN_WIDTH QA_BTN_HEIGHT;
                 max: QA_BTN_WIDTH QA_BTN_HEIGHT;
@@ -734,6 +730,7 @@ group { name: "elm/button/base/roundedrect";
             type: RECT;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description {
                 visible: 0;
                 align: 0.0 0.0;
@@ -747,6 +744,7 @@ group { name: "elm/button/base/roundedrect";
             type: RECT;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 min: ICON_SIZE ICON_SIZE;
                 max: ICON_SIZE ICON_SIZE;
@@ -765,6 +763,7 @@ group { name: "elm/button/base/roundedrect";
             type: SWALLOW;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 visible: 0;
                 rel1 { relative: 0.0 0.0; to: "button_icon"; }
@@ -779,6 +778,7 @@ group { name: "elm/button/base/roundedrect";
             type: IMAGE;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description {
                 image.normal: "mask.png";
                 rel1 { relative: 0.0 0.0; to: "button_icon"; }
@@ -789,6 +789,7 @@ group { name: "elm/button/base/roundedrect";
             type: TEXT;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 align: 0.0 0.0;
                 color_class: "ATO003";
@@ -806,6 +807,7 @@ group { name: "elm/button/base/roundedrect";
             type: RECT;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description {
                 visible: 0;
                 align: 0.0 0.0;
@@ -820,6 +822,7 @@ group { name: "elm/button/base/roundedrect";
             type: TEXTBLOCK;
             scale: 1;
             mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 align: 0.5 0.0;
                 color: 0 0 0 255;
@@ -839,6 +842,8 @@ group { name: "elm/button/base/roundedrect";
         part { name: "effect_spacer";
             type: SPACER;
             scale: 1;
+            mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 fixed: 1 1;
                 rel1.relative: 0.5 0.5;
@@ -851,6 +856,8 @@ group { name: "elm/button/base/roundedrect";
             type: SWALLOW;
             clip_to: "tizen_vg_shape_clipper";
             scale: 1;
+            mouse_events: 0;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 fixed: 1 1;
                 rel1.relative: 0.5 0.5;
@@ -870,6 +877,9 @@ group { name: "elm/button/base/roundedrect";
         }
         part { name: "tizen_vg_shape_clipper";
             type: RECT;
+            mouse_events: 0;
+            repeat_events: 0;
+            scale: 1;
             description { state: "default" 0.0;
                 color_class: "transparent";
                 visible: 0;
@@ -890,6 +900,8 @@ group { name: "elm/button/base/roundedrect";
         }
         part { name: "event";
             type: RECT;
+            scale: 1;
+            repeat_events: 0;
             description { state: "default" 0.0;
                 rel1.to: "button_bg";
                 rel2.to: "button_bg";
index 22c24a9..a3cbc23 100755 (executable)
 namespace tizen_browser{
 namespace base_ui{
 
-typedef enum _profileComposeMode
+enum profileComposeMode
 {
     profile_create = 0,
     profile_edit
-} profileComposeMode;
+};
 
-typedef enum _profileEditErrorcode
+enum profileEditErrorcode
 {
     profile_edit_failed = 0,
     profile_already_exist,
     update_error_none
-} profileEditErrorcode;
+};
 
-typedef enum _profileSaveErrorcode
+enum profileSaveErrorcode
 {
     profile_create_failed = 0,
     duplicate_profile,
     save_error_none
-} profileSaveErrorcode;
+};
 
-typedef struct _AutoFillFormItemData {
+struct AutoFillFormItemData {
     unsigned profile_id;
-    const char *name;
-    const char *company;
-    const char *primary_address;
-    const char *secondary_address;
-    const char *city_town;
-    const char *state_province_region;
-    const char *post_code;
-    const char *country;
-    const char *phone_number;
-    const char *email_address;
+    const charname;
+    const charcompany;
+    const charprimary_address;
+    const charsecondary_address;
+    const charcity_town;
+    const charstate_province_region;
+    const charpost_code;
+    const charcountry;
+    const charphone_number;
+    const charemail_address;
     bool activation;
     profileComposeMode compose_mode;
-} AutoFillFormItemData;
+};
 
 class AutoFillFormItem {
 public:
-    AutoFillFormItem(AutoFillFormItemData *item_data);
+    explicit AutoFillFormItem(AutoFillFormItemData *item_data);
     ~AutoFillFormItem(void);
 
     friend bool operator==(AutoFillFormItem item1, AutoFillFormItem item2) {
     return ((!item1.getName() && !item2.getName()) && !strcmp(item1.getName(), item2.getName()));
     }
 
-    unsigned getProfileId(void) { return m_itemData.profile_id; }
-    const char *getName(void) { return m_itemData.name; }
-    const char *getCompany(void) {return m_itemData.company; }
-    const char *getPrimaryAddress(void) {return m_itemData.primary_address; }
-    const char *getSecondaryAddress2(void) { return m_itemData.secondary_address; }
-    const char *getCityTown(void) { return m_itemData.city_town; }
-    const char *getStateProvince(void) { return m_itemData.state_province_region; }
-    const char *getPostCode(void) { return m_itemData.post_code; }
-    const char *getCountry(void) { return m_itemData.country; }
-    const char *getPhoneNumber(void) { return m_itemData.phone_number; }
-    const char *getEmailAddress(void) { return m_itemData.email_address; }
-    Eina_Bool getActivation(void) { return (m_itemData.activation == true) ? EINA_TRUE : EINA_FALSE; }
-    profileComposeMode getItemComposeMode(void) { return m_itemData.compose_mode; }
+    unsigned getProfileId(void) const { return m_itemData.profile_id; }
+    const char *getName(void) const { return m_itemData.name; }
+    const char *getCompany(void) const {return m_itemData.company; }
+    const char *getPrimaryAddress(void) const {return m_itemData.primary_address; }
+    const char *getSecondaryAddress2(void) const { return m_itemData.secondary_address; }
+    const char *getCityTown(void) const { return m_itemData.city_town; }
+    const char *getStateProvince(void) const { return m_itemData.state_province_region; }
+    const char *getPostCode(void) const { return m_itemData.post_code; }
+    const char *getCountry(void) const { return m_itemData.country; }
+    const char *getPhoneNumber(void) const { return m_itemData.phone_number; }
+    const char *getEmailAddress(void) const { return m_itemData.email_address; }
+    Eina_Bool getActivation(void) const { return (m_itemData.activation == true) ? EINA_TRUE : EINA_FALSE; }
+    profileComposeMode getItemComposeMode(void) const { return m_itemData.compose_mode; }
 
     void setName(const char *name) { m_itemData.name = name; }
     void setCompany(const char *company) {m_itemData.company = company; }
index ccac5f9..b4a67e1 100755 (executable)
@@ -32,19 +32,17 @@ inline std::string _trim(std::string& s, const std::string& drop = TRIM_SPACE)
     return r.erase(0, r.find_first_not_of(drop));
 }
 
-SettingsAFCreator::SettingsAFCreator(Evas_Object* parent, bool profile_exists)
-    : m_scroller(nullptr)
+SettingsAFCreator::SettingsAFCreator(Evas_Object* parent)
+    : SettingsUI(parent)
+    , m_scroller(nullptr)
     , m_box(nullptr)
     , m_editErrorcode(update_error_none)
     , m_saveErrorcode(save_error_none)
     , m_item(nullptr)
     , m_ewkContext(ewk_context_default_get())
-    , m_profile_exists(profile_exists)
     , m_profile(nullptr)
 {
-    init(parent);
     SPSC.autoFillCleared.connect([this](){
-        m_profile_exists = false;
         clearFields();
     });
 };
@@ -52,13 +50,13 @@ SettingsAFCreator::SettingsAFCreator(Evas_Object* parent, bool profile_exists)
 SettingsAFCreator::~SettingsAFCreator()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SPSC.autoFillCleared.disconnect_all_slots();
 
     for (auto& it : genlistCallbackVector) {
         unregisterCallbacksForEditfield(it->editfield);
         evas_object_del(it->editfield);
         unregisterCallbacksForEntry(it->entry);
         evas_object_del(it->entry);
+        free(it->limit);
     }
 
     if (m_box)
@@ -87,17 +85,15 @@ bool SettingsAFCreator::loadProfile(void)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    if (m_profile_exists) {
-        void* item_data(nullptr);
-        Eina_List* list(nullptr);
-        Eina_List* entire_item_list(
-            ewk_context_form_autofill_profile_get_all(ewk_context_default_get()));
-
-        EINA_LIST_FOREACH(entire_item_list, list, item_data) {
-            if (item_data) {
-                m_profile = static_cast<Ewk_Autofill_Profile*>(item_data);
-                break;
-            }
+    void* item_data { nullptr };
+    Eina_List* list { nullptr };
+    Eina_List* entire_item_list {
+        ewk_context_form_autofill_profile_get_all(m_ewkContext) };
+
+    EINA_LIST_FOREACH(entire_item_list, list, item_data) {
+        if (item_data) {
+            m_profile = static_cast<Ewk_Autofill_Profile*>(item_data);
+            break;
         }
     }
 
@@ -117,7 +113,6 @@ void SettingsAFCreator::createNewAutoFillFormItem()
             BROWSER_LOGE("Malloc failed to get item_data");
             return;
         }
-        memset(item_data, 0x00, sizeof(AutoFillFormItemData));
         item_data->profile_id = ewk_autofill_profile_id_get(m_profile);
         item_data->name = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_NAME);
         item_data->company = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_COMPANY);
@@ -152,17 +147,17 @@ bool SettingsAFCreator::populateLayout(Evas_Object* parent)
     evas_object_show(m_scroller);
 
     if (m_item->getItemComposeMode() == profile_edit)
-        m_naviframe->setTitle("Edit info");
+        m_naviframe->setTitle("IDS_BR_HEADER_EDIT_INFO_ABB");
     else
-        m_naviframe->setTitle("Add info");
+        m_naviframe->setTitle("IDS_BR_HEADER_ADD_INFO_ABB");
 
     m_naviframe->addLeftButton(__cancel_button_cb, this);
     m_naviframe->addRightButton(__done_button_cb, this);
     m_naviframe->setPrevButtonVisible(false);
     m_naviframe->setLeftButtonVisible(true);
     m_naviframe->setRightButtonVisible(true);
-    m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
-    m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL"));
+    m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
+    m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL");
 
     m_naviframe->setRightButtonEnabled(false);
 
@@ -177,27 +172,27 @@ void SettingsAFCreator::createInputLayout(
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto layout(elm_layout_add(parent));
-    setExpandHints(layout);
-    if (!elm_layout_file_set(layout, m_edjFilePath.c_str(), "affcv_item"))
+    if (!elm_layout_file_set(layout, m_edjFilePath.c_str(), "elm/genlist/item/entry_custom_layout/default"))
         BROWSER_LOGD("[%s:%d] item layout creation failed", __PRETTY_FUNCTION__, __LINE__);
-    elm_object_part_text_set(layout, "field_name", fieldName);
+    setExpandHints(layout);
+    elm_object_signal_emit(layout, "elm,state,elm.swallow.bg,visible", "elm");
+    elm_object_translatable_part_text_set(layout, "elm.text", fieldName);
 
     auto editfield(elm_layout_add(layout));
-    if (!elm_layout_file_set(editfield, m_edjFilePath.c_str(), "edit-field"))
-        BROWSER_LOGD("[%s:%d] item layout creation failed", __PRETTY_FUNCTION__, __LINE__);
-    evas_object_size_hint_align_set(editfield, EVAS_HINT_FILL, 0.0);
-    evas_object_size_hint_weight_set(editfield, EVAS_HINT_EXPAND, 0.0);
+    elm_layout_theme_set(editfield, "layout", "editfield", "multiline");
+    setExpandHints(editfield);
 
     auto entry(elm_entry_add(editfield));
-    elm_object_style_set(entry, "entry_style");
     elm_entry_single_line_set(entry, EINA_TRUE);
     elm_entry_scrollable_set(entry, EINA_TRUE);
-    elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+    setExpandHints(entry);
+    auto limit(tools::EflTools::setEntryLimit(entry));
 
     cb_data->user_data = this;
     cb_data->editfield = editfield;
     cb_data->entry = entry;
     cb_data->it = layout;
+    cb_data->limit = limit;
 #if defined(HW_MORE_BACK_KEY)
     eext_entry_selection_back_event_allow_set(entry, EINA_TRUE);
 #endif
@@ -209,17 +204,14 @@ void SettingsAFCreator::createInputLayout(
     elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_NEXT);
     elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &(m_entryLimitSize));
 
-    elm_object_part_content_set(editfield, "editfield_entry", entry);
+    elm_object_part_content_set(editfield, "elm.swallow.content", entry);
 
     auto button(elm_button_add(editfield));
-    elm_object_style_set(button, "basic_button");
+    elm_object_style_set(button, "editfield_clear");
     evas_object_smart_callback_add(button, "clicked", __entry_clear_button_clicked_cb, entry);
-    elm_object_part_content_set(editfield, "entry_clear_button", button);
-
-    if (!elm_entry_is_empty(entry))
-        elm_object_signal_emit(editfield, "show,clear,button,signal", "");
+    elm_object_part_content_set(editfield, "elm.swallow.button", button);
 
-    elm_object_part_content_set(layout, "entry_swallow", editfield);
+    elm_object_part_content_set(layout, "elm.swallow.content", editfield);
     evas_object_show(cb_data->editfield);
     evas_object_show(cb_data->entry);
     evas_object_show(cb_data->it);
@@ -229,15 +221,15 @@ void SettingsAFCreator::createInputLayout(
 void SettingsAFCreator::clearFields()
 {
     if (m_item) {
-        elm_object_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_countryItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_phoneItemCallbackData.entry, "elm.text", "");
-        elm_object_part_text_set(m_emailItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_countryItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_phoneItemCallbackData.entry, "elm.text", "");
+        elm_object_translatable_part_text_set(m_emailItemCallbackData.entry, "elm.text", "");
     }
 }
 
@@ -250,42 +242,42 @@ void SettingsAFCreator::addItems()
     createInputLayout(m_box, strdup(_("IDS_BR_BODY_FULL_NAME_ABB")), &m_fullNameItemCallbackData);
     elm_box_pack_end(m_box, m_fullNameItemCallbackData.it);
     if (m_item->getName() && strlen(m_item->getName()))
-        elm_object_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", m_item->getName());
+        elm_object_translatable_part_text_set(m_fullNameItemCallbackData.entry, "elm.text", m_item->getName());
 
     // company_name
     m_companyNameItemCallbackData.type = profile_composer_title_company_name;
     createInputLayout(m_box, strdup(_("IDS_BR_BODY_COMPANY_NAME_ABB")), &m_companyNameItemCallbackData);
     elm_box_pack_end(m_box, m_companyNameItemCallbackData.it);
     if (m_item->getCompany() && strlen(m_item->getCompany()))
-        elm_object_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", m_item->getCompany());
+        elm_object_translatable_part_text_set(m_companyNameItemCallbackData.entry, "elm.text", m_item->getCompany());
 
     // address 1
     m_addressLine1ItemCallbackData.type = profile_composer_title_address_line_1;
     createInputLayout(m_box, strdup(_("IDS_BR_BODY_ADDRESS_LINE_1_ABB")), &m_addressLine1ItemCallbackData);
     elm_box_pack_end(m_box, m_addressLine1ItemCallbackData.it);
     if (m_item->getPrimaryAddress() && strlen(m_item->getPrimaryAddress()))
-        elm_object_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", m_item->getPrimaryAddress());
+        elm_object_translatable_part_text_set(m_addressLine1ItemCallbackData.entry, "elm.text", m_item->getPrimaryAddress());
 
     // address 2
     m_addressLine2ItemCallbackData.type = profile_composer_title_address_line_2;
     createInputLayout(m_box, strdup(_("IDS_BR_BODY_ADDRESS_LINE_2_ABB")), &m_addressLine2ItemCallbackData);
     elm_box_pack_end(m_box, m_addressLine2ItemCallbackData.it);
     if (m_item->getSecondaryAddress2() && strlen(m_item->getSecondaryAddress2()))
-        elm_object_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", m_item->getSecondaryAddress2());
+        elm_object_translatable_part_text_set(m_addressLine2ItemCallbackData.entry, "elm.text", m_item->getSecondaryAddress2());
 
     // city town
     m_cityTownItemCallbackData.type = profile_composer_title_city_town;
     createInputLayout(m_box, strdup(_("Town/City/County")), &m_cityTownItemCallbackData);
     elm_box_pack_end(m_box, m_cityTownItemCallbackData.it);
     if (m_item->getCityTown() && strlen(m_item->getCityTown()))
-        elm_object_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", m_item->getCityTown());
+        elm_object_translatable_part_text_set(m_cityTownItemCallbackData.entry, "elm.text", m_item->getCityTown());
 
     // country
     m_countryItemCallbackData.type = profile_composer_title_country;
     createInputLayout(m_box, strdup(_("IDS_BR_MBODY_COUNTRY_REGION")), &m_countryItemCallbackData);
     elm_box_pack_end(m_box, m_countryItemCallbackData.it);
     if (m_item->getCountry() && strlen(m_item->getCountry()))
-        elm_object_part_text_set(m_countryItemCallbackData.entry, "elm.text", m_item->getCountry());
+        elm_object_translatable_part_text_set(m_countryItemCallbackData.entry, "elm.text", m_item->getCountry());
 
     // post code
     m_postCodeItemCallbackData.type = profile_composer_title_post_code;
@@ -299,7 +291,7 @@ void SettingsAFCreator::addItems()
     elm_entry_markup_filter_append(m_postCodeItemCallbackData.entry, elm_entry_filter_limit_size, &m_entryLimitSize);
     elm_entry_markup_filter_append(m_postCodeItemCallbackData.entry, elm_entry_filter_accept_set, &m_entry_accept_set);
     if (m_item->getPostCode() && strlen(m_item->getPostCode()))
-        elm_object_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", m_item->getPostCode());
+        elm_object_translatable_part_text_set(m_postCodeItemCallbackData.entry, "elm.text", m_item->getPostCode());
     elm_entry_input_panel_layout_set(m_postCodeItemCallbackData.entry, ELM_INPUT_PANEL_LAYOUT_NUMBERONLY);
     elm_entry_prediction_allow_set(m_postCodeItemCallbackData.entry, EINA_FALSE);
 
@@ -309,7 +301,7 @@ void SettingsAFCreator::addItems()
     createInputLayout(m_box, strdup(_("IDS_BR_BODY_PHONE")), &m_phoneItemCallbackData);
     elm_box_pack_end(m_box, m_phoneItemCallbackData.it);
     if (m_item->getPhoneNumber() && strlen(m_item->getPhoneNumber()))
-        elm_object_part_text_set(m_phoneItemCallbackData.entry, "elm.text", m_item->getPhoneNumber());
+        elm_object_translatable_part_text_set(m_phoneItemCallbackData.entry, "elm.text", m_item->getPhoneNumber());
     Elm_Entry_Filter_Accept_Set entry_accept_set;
     entry_accept_set.accepted = PHONE_FIELD_VALID_ENTRIES;
     entry_accept_set.rejected = NULL;
@@ -322,7 +314,7 @@ void SettingsAFCreator::addItems()
     createInputLayout(m_box, strdup(_("IDS_BR_OPT_SENDURLVIA_EMAIL")), &m_emailItemCallbackData);
     elm_box_pack_end(m_box, m_emailItemCallbackData.it);
     if (m_item->getEmailAddress() && strlen(m_item->getEmailAddress()))
-        elm_object_part_text_set(m_emailItemCallbackData.entry, "elm.text", m_item->getEmailAddress());
+        elm_object_translatable_part_text_set(m_emailItemCallbackData.entry, "elm.text", m_item->getEmailAddress());
     elm_entry_input_panel_return_key_type_set(m_emailItemCallbackData.entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
     evas_object_smart_callback_add(m_emailItemCallbackData.entry, "activated", __done_button_cb, this);
     elm_entry_input_panel_layout_set(m_emailItemCallbackData.entry, ELM_INPUT_PANEL_LAYOUT_EMAIL);
@@ -439,9 +431,9 @@ void SettingsAFCreator::__editfield_changed_cb(void* data, Evas_Object* obj, voi
     Evas_Object *editfield = static_cast<Evas_Object*>(data);
 
     if (!elm_entry_is_empty(obj) && elm_object_focus_get(obj))
-        elm_object_signal_emit(editfield, "show,clear,button,signal", "");
+        elm_object_signal_emit(editfield, "elm,action,show,button", "");
     else
-        elm_object_signal_emit(editfield, "hide,clear,button,signal", "");
+        elm_object_signal_emit(editfield, "elm,action,hide,button", "");
 }
 
 void SettingsAFCreator::__done_button_cb(void* data, Evas_Object*, void*)
@@ -454,6 +446,7 @@ void SettingsAFCreator::__done_button_cb(void* data, Evas_Object*, void*)
     SettingsAFCreator *safc = static_cast<SettingsAFCreator*>(data);
     if (safc->applyEntryData() == EINA_FALSE)
         return;
+    safc->m_naviframe->setTitle("IDS_BR_HEADER_EDIT_INFO_ABB");
     SPSC.closeSettingsUIClicked();
 }
 
@@ -461,6 +454,7 @@ void SettingsAFCreator::__cancel_button_cb(void*, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     SPSC.closeSettingsUIClicked();
+    SPSC.settingsAutofillCreateCancelClicked();
 }
 
 void SettingsAFCreator::__entry_changed_cb(void* data, Evas_Object* obj, void*)
@@ -474,9 +468,9 @@ void SettingsAFCreator::__entry_changed_cb(void* data, Evas_Object* obj, void*)
     SettingsAFCreator *view = static_cast<SettingsAFCreator*>(cb_data->user_data);
     const char* text = elm_entry_entry_get(obj);
     if (text && strlen(text) > 0)
-        elm_object_signal_emit(cb_data->editfield, "show,clear,button,signal", "");
+        elm_object_signal_emit(cb_data->editfield, "elm,action,show,button", "");
     else
-        elm_object_signal_emit(cb_data->editfield, "hide,clear,button,signal", "");
+        elm_object_signal_emit(cb_data->editfield, "elm,action,hide,button", "");
 
     auto isEmpty(elm_entry_is_empty(view->m_fullNameItemCallbackData.entry) == EINA_TRUE);
     view->m_naviframe->setRightButtonEnabled(!isEmpty);
index 06283ae..21d9716 100755 (executable)
@@ -36,8 +36,8 @@ class SettingsAFCreator
     : public SettingsUI
 {
 public:
-    SettingsAFCreator(){};
-    SettingsAFCreator(Evas_Object* parent, bool profile_exists);
+    SettingsAFCreator() = delete;
+    explicit SettingsAFCreator(Evas_Object* parent);
     virtual ~SettingsAFCreator();
     virtual bool populateLayout(Evas_Object* genlist);
     Evas_Object* createScroller(Evas_Object *parent);
@@ -77,12 +77,12 @@ private:
         Evas_Object* editfield;
         Evas_Object* entry;
         Evas_Object* it;
+        Elm_Entry_Filter_Limit_Size* limit;
     };
     void createInputLayout(Evas_Object* parent, char* fieldName, genlistCallbackData* cb_data);
     void clearFields();
     void addItems();
 protected:
-    std::map<unsigned, ItemData> m_buttonsMap;
     Evas_Object* m_scroller;
     Evas_Object* m_box;
 
@@ -104,7 +104,6 @@ protected:
 
     std::shared_ptr<AutoFillFormItem> m_item;
     Ewk_Context* m_ewkContext;
-    bool m_profile_exists;
     Ewk_Autofill_Profile* m_profile;
 };
 
index 363db1a..63daaad 100755 (executable)
@@ -21,13 +21,17 @@ namespace tizen_browser{
 namespace base_ui{
 
 SettingsAFProfile::SettingsAFProfile(Evas_Object* parent)
-    : m_profile(nullptr)
+    : SettingsUI(parent)
+    , m_profile(nullptr)
     , m_itemData(nullptr)
     , m_profileName(std::string())
 {
-    init(parent);
-    SPSC.setProfileName.connect([this](std::string name){m_profileName = name;});
-    SPSC.autoFillCleared.connect([this](){
+    SPSC.setProfileName.connect([this](auto name){
+        BROWSER_LOGD("[%s:%d] set profile name", __PRETTY_FUNCTION__, __LINE__);
+        m_profileName = name;
+    });
+    SPSC.autoFillCleared.connect([this]{
+        BROWSER_LOGD("[%s:%d] clear profile name", __PRETTY_FUNCTION__, __LINE__);
         m_profileName.clear();
         m_profile = nullptr;
     });
@@ -36,16 +40,17 @@ SettingsAFProfile::SettingsAFProfile(Evas_Object* parent)
 SettingsAFProfile::~SettingsAFProfile()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    SPSC.autoFillCleared.disconnect_all_slots();
 }
 
 void SettingsAFProfile::updateButtonMap()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     ItemData profileName;
-    void* item_data(nullptr);
-    Eina_List* list(nullptr);
-    Eina_List* entire_item_list(
-        ewk_context_form_autofill_profile_get_all(ewk_context_default_get()));
+    void* item_data { nullptr };
+    Eina_List* list { nullptr };
+    Eina_List* entire_item_list {
+        ewk_context_form_autofill_profile_get_all(ewk_context_default_get()) };
 
     // ID for the item is not always 1 so we need to return the first existing one
     EINA_LIST_FOREACH(entire_item_list, list, item_data) {
@@ -56,7 +61,7 @@ void SettingsAFProfile::updateButtonMap()
     }
     profileName.buttonText = m_profile ?
         profileName.buttonText = ewk_autofill_profile_data_get(m_profile, EWK_PROFILE_NAME) :
-        profileName.buttonText = _(Translations::SettingsAutoFillProfileSetMyProfile.c_str());
+        profileName.buttonText = Translations::instance().SettingsAutoFillProfileSetMyProfile.c_str();
 
     if (!m_profileName.empty())
         profileName.buttonText = m_profileName;
@@ -70,24 +75,15 @@ bool SettingsAFProfile::populateList(Evas_Object* genlist)
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
-    m_naviframe->setTitle(_(Translations::SettingsAutoFillProfileTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsAutoFillProfileTitle.c_str());
 
-    appendGenlist(genlist, m_setting_item_class, m_itemData.get(), _select_profile_cb);
+    appendGenlist(
+        genlist,
+        m_setting_item_class,
+        m_itemData.get(),
+        [](auto, auto, auto){SPSC.settingsAutofillProfileClicked();}
+    );
     return true;
 }
-
-void SettingsAFProfile::_select_profile_cb(void* data, Evas_Object*, void*)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (!data) {
-        BROWSER_LOGE("data is null");
-        return;
-    }
-    auto self = static_cast<SettingsAFProfile*>(data);
-    if (self->m_profile)
-        SPSC.settingsAutofillProfileClicked(true);
-    else
-        SPSC.settingsAutofillProfileClicked(false);
-}
 }
 }
index 0cbce0a..3c55c9e 100755 (executable)
@@ -39,12 +39,11 @@ class SettingsAFProfile
     : public SettingsUI
 {
 public:
-    SettingsAFProfile(){};
-    SettingsAFProfile(Evas_Object* parent);
+    SettingsAFProfile() = delete;
+    explicit SettingsAFProfile(Evas_Object* parent);
     virtual ~SettingsAFProfile();
-    virtual bool populateList(Evas_Object* genlist);
-    virtual void updateButtonMap();
-    static void _select_profile_cb(void* data, Evas_Object*, void*);
+    bool populateList(Evas_Object* genlist) override;
+    void updateButtonMap() override;
 protected:
     Ewk_Autofill_Profile* m_profile;
     std::shared_ptr<ItemData> m_itemData;
index 3a0e763..34902e7 100755 (executable)
@@ -23,10 +23,10 @@ namespace tizen_browser{
 namespace base_ui{
 
 SettingsAdvanced::SettingsAdvanced(Evas_Object* parent)
-    : m_popup(nullptr)
+    : SettingsUI(parent)
+    , m_popup(nullptr)
 {
-    init(parent);
-    updateButtonMap();
+    updateButtonMapInternal();
     vconf_notify_key_changed("memory/sysman/mmc", notifyStorageChange, this);
     SPSC.settingsSaveContentRadioPopupPtr.connect(
         [this](auto popup){m_popup = popup;});
@@ -38,29 +38,29 @@ SettingsAdvanced::~SettingsAdvanced()
     SPSC.settingsSaveContentRadioPopupPtr.disconnect_all_slots();
 }
 
-void SettingsAdvanced::updateButtonMap()
+void SettingsAdvanced::updateButtonMapInternal()
 {
     ItemData enable_js;
-    enable_js.buttonText = _(Translations::SettingsAdvancedEnableJavaScript.c_str());
-    enable_js.subText = _(Translations::SettingsAdvancedEnableJavaScriptSub.c_str());
+    enable_js.buttonText = Translations::instance().SettingsAdvancedEnableJavaScript.c_str();
+    enable_js.subText = Translations::instance().SettingsAdvancedEnableJavaScriptSub.c_str();
     enable_js.sui = this;
     enable_js.id = ENABLE_JS;
 
     ItemData block_popups;
-    block_popups.buttonText = _(Translations::SettingsAdvancedBlockPopups.c_str());
-    block_popups.subText = _(Translations::SettingsAdvancedBlockPopupsSub.c_str());
+    block_popups.buttonText = Translations::instance().SettingsAdvancedBlockPopups.c_str();
+    block_popups.subText = Translations::instance().SettingsAdvancedBlockPopupsSub.c_str();
     block_popups.sui = this;
     block_popups.id = BLOCK_POPUPS;
 
     ItemData save_content;
-    save_content.buttonText = _(Translations::SettingsAdvancedSaveContent.c_str());
+    save_content.buttonText = Translations::instance().SettingsAdvancedSaveContent.c_str();
     save_content.subText =  []() {
         auto sig =
             SPSC.getWebEngineSettingsParamString(
                 basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION);
         return (sig && !sig->empty()) ?
             _(sig->c_str()) :
-            _(Translations::Device.c_str());
+            Translations::instance().Device.c_str();
     }();
     save_content.sui = this;
     save_content.id = SAVE_CONTENT;
@@ -73,6 +73,11 @@ void SettingsAdvanced::updateButtonMap()
         boost::bind(&SettingsAdvanced::setContentDestination, this, _1));
 }
 
+void SettingsAdvanced::updateButtonMap()
+{
+    updateButtonMapInternal();
+}
+
 void SettingsAdvanced::changeGenlistStorage()
 {
     int mmc_mode = VCONFKEY_SYSMAN_MMC_REMOVED;
@@ -111,7 +116,7 @@ bool SettingsAdvanced::populateList(Evas_Object* genlist)
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
-    m_naviframe->setTitle(_(Translations::SettingsAdvancedTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsAdvancedTitle.c_str());
 
     m_genlistItems[SettingsAdvancedOptions::ENABLE_JS] =
         appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsAdvancedOptions::ENABLE_JS], _check_cb);
@@ -259,18 +264,18 @@ void SettingsAdvanced::setContentDestination(int button)
 
     switch (static_cast<RadioButtons>(button)) {
         case RadioButtons::DEVICE:
-            m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = _(Translations::Device.c_str());
+            m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = Translations::instance().Device.c_str();
             setStorageType(SettingsStorageType::DEVICE);
             SPSC.setWebEngineSettingsParamString(
                 basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION,
-                Translations::Device);
+                Translations::instance().Device);
             break;
         case RadioButtons::SD_CARD:
-            m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = _(Translations::SDCard.c_str());
+            m_buttonsMap[SettingsAdvancedOptions::SAVE_CONTENT].subText = Translations::instance().SDCard.c_str();
             setStorageType(SettingsStorageType::SD_CARD);
             SPSC.setWebEngineSettingsParamString(
                 basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION,
-                Translations::SDCard);
+                Translations::instance().SDCard);
             break;
         default:
             return;
index a597dc8..c9d1dc1 100755 (executable)
@@ -51,7 +51,7 @@ class SettingsAdvanced
     : public SettingsUI
 {
 public:
-    SettingsAdvanced(Evas_Object* parent);
+    explicit SettingsAdvanced(Evas_Object* parent);
     virtual ~SettingsAdvanced();
     bool populateList(Evas_Object* genlist) override;
     void updateButtonMap() override;
@@ -68,6 +68,7 @@ public:
     void setContentDestination(int button);
     bool setStorageType(SettingsStorageType type);
 private:
+    void updateButtonMapInternal(); // internal version for proper call from constructor
     RadioPopup* m_popup;
 };
 
index d534802..801775f 100755 (executable)
@@ -20,9 +20,9 @@ namespace tizen_browser{
 namespace base_ui{
 
 SettingsDelPersData::SettingsDelPersData(Evas_Object* parent)
+    : SettingsUI(parent)
 {
-    init(parent);
-    updateButtonMap();
+    updateButtonMapInternal();
 };
 
 SettingsDelPersData::~SettingsDelPersData()
@@ -30,42 +30,42 @@ SettingsDelPersData::~SettingsDelPersData()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
-void SettingsDelPersData::updateButtonMap()
+void SettingsDelPersData::updateButtonMapInternal()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     // TODO Missing translations
     ItemData selectAll;
-    selectAll.buttonText = _(Translations::SettingsDelPersDataSelectAll.c_str());
+    selectAll.buttonText = Translations::instance().SettingsDelPersDataSelectAll.c_str();
     selectAll.sui = this;
     selectAll.id = SELECT_ALL;
 
     ItemData browsHistory;
-    browsHistory.buttonText = _(Translations::SettingsDelPersDataBrowsingHistory.c_str());
+    browsHistory.buttonText = Translations::instance().SettingsDelPersDataBrowsingHistory.c_str();
     browsHistory.sui = this;
     browsHistory.id = BROWSING_HISTORY;
 
     ItemData cache;
-    cache.buttonText = _(Translations::SettingsDelPersDataCache.c_str());
+    cache.buttonText = Translations::instance().SettingsDelPersDataCache.c_str();
     cache.sui = this;
     cache.id = CACHE;
 
     ItemData cookies;
-    cookies.buttonText = _(Translations::SettingsDelPersDataCookies.c_str());
+    cookies.buttonText = Translations::instance().SettingsDelPersDataCookies.c_str();
     cookies.sui = this;
     cookies.id = COOKIES_AND_SITE;
 
     ItemData pass;
-    pass.buttonText = _(Translations::SettingsDelPersDataPasswords.c_str());
+    pass.buttonText = Translations::instance().SettingsDelPersDataPasswords.c_str();
     pass.sui = this;
     pass.id = PASSWORDS;
 
     ItemData autofill;
-    autofill.buttonText = _(Translations::SettingsDelPersDataAutoFillData.c_str());
+    autofill.buttonText = Translations::instance().SettingsDelPersDataAutoFillData.c_str();
     autofill.sui = this;
     autofill.id = DEL_PERS_AUTO_FILL;
 
     ItemData loc;
-    loc.buttonText = _(Translations::SettingsDelPersDataLocationData.c_str());
+    loc.buttonText = Translations::instance().SettingsDelPersDataLocationData.c_str();
     loc.sui = this;
     loc.id = LOCATION;
 
@@ -78,28 +78,57 @@ void SettingsDelPersData::updateButtonMap()
     m_buttonsMap[SettingsDelPersDataOptions::LOCATION] = loc;
 }
 
+void SettingsDelPersData::updateButtonMap()
+{
+    updateButtonMapInternal();
+}
+
+void SettingsDelPersData::resetOptionValues()
+{
+    m_option[SettingsDelPersDataOptions::SELECT_ALL] = false;
+    m_option[SettingsDelPersDataOptions::BROWSING_HISTORY] = true;
+    m_option[SettingsDelPersDataOptions::CACHE] = true;
+    m_option[SettingsDelPersDataOptions::COOKIES_AND_SITE] = true;
+    m_option[SettingsDelPersDataOptions::PASSWORDS] = false;
+    m_option[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL] = false;
+    m_option[SettingsDelPersDataOptions::LOCATION] = false;
+}
+
 bool SettingsDelPersData::populateList(Evas_Object* genlist)
 {
-    m_naviframe->setTitle(_(Translations::SettingsDelPersDataTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsDelPersDataTitle.c_str());
 
     m_naviframe->addLeftButton(__cancel_button_cb, this);
     m_naviframe->addRightButton(__delete_button_cb, this);
     m_naviframe->setPrevButtonVisible(false);
     m_naviframe->setLeftButtonVisible(true);
     m_naviframe->setRightButtonVisible(true);
-    m_naviframe->setRightButtonText(_(Translations::SettingsDelPersDataDelete.c_str()));
-    m_naviframe->setLeftButtonText(_(Translations::SettingsDelPersDataCancel.c_str()));
-
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::SELECT_ALL], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::BROWSING_HISTORY], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::CACHE], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::COOKIES_AND_SITE], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::PASSWORDS], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL], nullptr);
-    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::LOCATION], nullptr);
+    m_naviframe->setRightButtonText(Translations::instance().SettingsDelPersDataDelete.c_str());
+    m_naviframe->setLeftButtonText(Translations::instance().SettingsDelPersDataCancel.c_str());
+
+    resetOptionValues();
+
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::SELECT_ALL], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::BROWSING_HISTORY], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::CACHE], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::COOKIES_AND_SITE], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::PASSWORDS], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::DEL_PERS_AUTO_FILL], _check_cb);
+    appendGenlist(genlist, m_setting_check_normal_item_class, &m_buttonsMap[SettingsDelPersDataOptions::LOCATION], _check_cb);
     return true;
 }
 
+void SettingsDelPersData::_check_cb(void*, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto el = elm_genlist_selected_item_get(obj);
+    auto check = elm_object_item_part_content_get(el, "elm.swallow.end");
+    auto value = !elm_check_state_get(check);
+
+    elm_check_state_set(check, value);
+    evas_object_smart_callback_call(check, "changed", nullptr);
+}
+
 void SettingsDelPersData::__cancel_button_cb(void*, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -121,18 +150,14 @@ void SettingsDelPersData::__delete_button_cb(void* data, Evas_Object*, void*)
 Evas_Object* SettingsDelPersData::createNormalCheckBox(Evas_Object* obj, ItemData* itd)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto check = elm_check_add(obj);
-    elm_object_style_set(check, "default");
+
+    Evas_Object* check{ elm_check_add(obj) };
     evas_object_smart_callback_add(check, "changed", grid_item_check_changed, itd);
-    if (static_cast<SettingsDelPersDataOptions>(itd->id) == BROWSING_HISTORY ||
-        static_cast<SettingsDelPersDataOptions>(itd->id) == CACHE ||
-        static_cast<SettingsDelPersDataOptions>(itd->id) == COOKIES_AND_SITE) {
-        elm_check_state_set(check, EINA_TRUE);
-        setOption(itd->id, true);
-    } else {
-        elm_check_state_set(check, EINA_FALSE);
-        setOption(itd->id, false);
-    }
+    elm_object_style_set(check, "default");
+    elm_check_state_set(check, getOption(itd->id) ? EINA_TRUE : EINA_FALSE);
+    evas_object_repeat_events_set(check, EINA_FALSE);
+    evas_object_propagate_events_set(check, EINA_FALSE);
+
     return check;
 }
 
@@ -156,6 +181,10 @@ void SettingsDelPersData::grid_item_check_changed(void* data, Evas_Object* obj,
         self->setOption(
             itd->id,
             static_cast<bool>(value));
+        if ((value == false) && (self->getOption(SELECT_ALL) == true)) {
+            elm_check_state_set(self->getCheckboxes()[SELECT_ALL], false);
+            self->setOption(SELECT_ALL, false);
+        }
     }
     bool val = self->getOption(SELECT_ALL);
     if (self->getOption(LOCATION) != val &&
index 170381c..22d281b 100755 (executable)
@@ -37,16 +37,19 @@ class SettingsDelPersData
 {
 public:
     SettingsDelPersData(){};
-    SettingsDelPersData(Evas_Object* parent);
+    explicit SettingsDelPersData(Evas_Object* parent);
     virtual ~SettingsDelPersData();
-    virtual bool populateList(Evas_Object* genlist);
-    virtual void updateButtonMap();
-    virtual Evas_Object* createNormalCheckBox(Evas_Object*, ItemData*);
+    void resetOptionValues();
+    bool populateList(Evas_Object* genlist) override;
+    void updateButtonMap() override;
+    Evas_Object* createNormalCheckBox(Evas_Object*, ItemData*) override;
+    static void _realized_cb(void* data, Evas_Object*, void* event_info);
     static void grid_item_check_changed(void* data, Evas_Object* obj, void*);
+    static void _check_cb(void*, Evas_Object* obj, void*);
     static void __cancel_button_cb(void* data, Evas_Object*, void*);
     static void __delete_button_cb(void* data, Evas_Object*, void*);
-protected:
-    std::map<unsigned, ItemData> m_buttonsMap;
+private:
+    void updateButtonMapInternal(); // internal version for proper call from constructor
 };
 
 }
index 096430d..d2ed7f2 100755 (executable)
 namespace tizen_browser{
 namespace base_ui{
 
-const std::string SettingsHomePage::DEF_HOME_PAGE = Translations::TizenPage;
-const std::string SettingsHomePage::QUICK_PAGE = _(Translations::QuickPage.c_str());
-const std::string SettingsHomePage::MOST_VISITED_PAGE = _(Translations::MostVisitedPage.c_str());
-const std::string SettingsHomePage::OTHER_PAGE = _(Translations::OtherPage.c_str());
-const std::string SettingsHomePage::CURRENT_PAGE = _(Translations::CurrentPage.c_str());
+const std::string SettingsHomePage::DEF_HOME_PAGE = Translations::instance().TizenPage;
 
 SettingsHomePage::SettingsHomePage(Evas_Object* parent)
-{
-    init(parent);
-};
+    : SettingsUI(parent)
+{ }
 
 SettingsHomePage::~SettingsHomePage()
 {
@@ -49,38 +44,38 @@ void SettingsHomePage::updateButtonMap()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     ItemData defaultPage;
-    defaultPage.buttonText = _(Translations::SettingsHomePageDefault.c_str());
-    defaultPage.subText = DEF_HOME_PAGE;
+    defaultPage.buttonText = Translations::instance().SettingsHomePageDefault.c_str();
+    defaultPage.subText = SettingsHomePage::DEF_HOME_PAGE;
     defaultPage.sui = this;
     defaultPage.id = DEFAULT;
 
     ItemData current;
-    current.buttonText = _(Translations::SettingsHomePageCurrentPage.c_str());
+    current.buttonText = Translations::instance().SettingsHomePageCurrentPage.c_str();
     current.subText = getCurrentPage();
     current.sui = this;
     current.id = CURRENT;
 
     ItemData quick;
-    quick.buttonText = _(Translations::SettingsHomePageQuickAccess.c_str());
+    quick.buttonText = Translations::instance().SettingsHomePageQuickAccess.c_str();
     quick.sui = this;
     quick.id = QUICK_ACCESS;
 
     ItemData most;
-    most.buttonText = _(Translations::SettingsHomePageMostVisited.c_str());
+    most.buttonText = Translations::instance().SettingsHomePageMostVisited.c_str();
     most.sui = this;
     most.id = MOST_VIS;
 
     ItemData other;
-    other.buttonText = _(Translations::SettingsHomePageOther.c_str());
+    other.buttonText = Translations::instance().SettingsHomePageOther.c_str();
     other.subText = [this]() -> std::string {
         auto sig = SPSC.getWebEngineSettingsParamString(
             basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
-        auto otherPage = (sig && !sig->empty()) ? *sig : _(Translations::TizenPage.c_str());
+        auto otherPage = (sig && !sig->empty()) ? *sig : SettingsHomePage::DEF_HOME_PAGE.c_str();
 
-        if (!otherPage.compare(QUICK_PAGE) ||
-            !otherPage.compare(MOST_VISITED_PAGE) ||
-            !otherPage.compare(DEF_HOME_PAGE) ||
-            otherPage.find(CURRENT_PAGE) != std::string::npos) {
+        if (!otherPage.compare(Translations::instance().QuickPage.c_str()) ||
+            !otherPage.compare(Translations::instance().MostVisitedPage.c_str()) ||
+            !otherPage.compare(SettingsHomePage::DEF_HOME_PAGE) ||
+            otherPage.find(Translations::instance().CurrentPage.c_str()) != std::string::npos) {
             otherPage = m_buttonsMap[SettingsHomePageOptions::OTHER].subText;
         }
         return otherPage;
@@ -103,15 +98,15 @@ void SettingsHomePage::setRadioOnChange()
     auto stateString = []() -> std::string {
         auto sig = SPSC.getWebEngineSettingsParamString(
             basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
-        return (sig && !sig->empty()) ? *sig : DEF_HOME_PAGE;
+        return (sig && !sig->empty()) ? *sig : SettingsHomePage::DEF_HOME_PAGE;
     }();
-    if (!stateString.compare(QUICK_PAGE)) {
+    if (!stateString.compare(Translations::instance().QuickPage.c_str())) {
         elm_radio_value_set(m_radio, SettingsHomePageOptions::QUICK_ACCESS);
-    } else if (!stateString.compare(MOST_VISITED_PAGE)) {
+    } else if (!stateString.compare(Translations::instance().MostVisitedPage.c_str())) {
         elm_radio_value_set(m_radio, SettingsHomePageOptions::MOST_VIS);
-    } else if (!stateString.compare(DEF_HOME_PAGE)) {
+    } else if (!stateString.compare(SettingsHomePage::DEF_HOME_PAGE)) {
         elm_radio_value_set(m_radio, SettingsHomePageOptions::DEFAULT);
-    } else if (stateString.find(CURRENT_PAGE) != std::string::npos ||
+    } else if (stateString.find(Translations::instance().CurrentPage.c_str()) != std::string::npos ||
         !stateString.compare(getCurrentPage())) {
         elm_radio_value_set(m_radio, SettingsHomePageOptions::CURRENT);
     } else {
@@ -126,7 +121,7 @@ bool SettingsHomePage::populateList(Evas_Object* genlist)
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
-    m_naviframe->setTitle(_(Translations::SettingsHomePageTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsHomePageTitle.c_str());
 
     updateButtonMap();
     m_itemsMap[SettingsHomePageOptions::DEFAULT] =
@@ -183,8 +178,9 @@ void SettingsHomePage::_current_cb(void* data, Evas_Object*, void*)
     auto self = static_cast<SettingsHomePage*>(data);
     SPSC.setWebEngineSettingsParamString(
         basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
-        SettingsHomePage::CURRENT_PAGE + self->getCurrentPage());
+        Translations::instance().CurrentPage.c_str() + self->getCurrentPage());
     self->updateButtonMap();
+    SPSC.closeSettingsUIClicked();
 }
 
 void SettingsHomePage::_default_cb(void* data, Evas_Object*, void*)
@@ -199,6 +195,7 @@ void SettingsHomePage::_default_cb(void* data, Evas_Object*, void*)
         basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
         SettingsHomePage::DEF_HOME_PAGE);
     self->updateButtonMap();
+    SPSC.closeSettingsUIClicked();
 }
 
 void SettingsHomePage::_quick_cb(void* data, Evas_Object*, void*)
@@ -211,8 +208,9 @@ void SettingsHomePage::_quick_cb(void* data, Evas_Object*, void*)
     auto self = static_cast<SettingsHomePage*>(data);
     SPSC.setWebEngineSettingsParamString(
         basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
-        SettingsHomePage::QUICK_PAGE);
+        Translations::instance().QuickPage.c_str());
     self->updateButtonMap();
+    SPSC.closeSettingsUIClicked();
 }
 
 void SettingsHomePage::_most_visited_cb(void* data, Evas_Object*, void*)
@@ -225,8 +223,9 @@ void SettingsHomePage::_most_visited_cb(void* data, Evas_Object*, void*)
     auto self = static_cast<SettingsHomePage*>(data);
     SPSC.setWebEngineSettingsParamString(
         basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
-        SettingsHomePage::MOST_VISITED_PAGE);
+        Translations::instance().MostVisitedPage.c_str());
     self->updateButtonMap();
+    SPSC.closeSettingsUIClicked();
 }
 
 void SettingsHomePage::_other_cb(void*, Evas_Object*, void*)
index 6e691ce..43547b2 100755 (executable)
@@ -45,7 +45,7 @@ class SettingsHomePage
 {
 public:
     SettingsHomePage(){};
-    SettingsHomePage(Evas_Object* parent);
+    explicit SettingsHomePage(Evas_Object* parent);
     std::string getCurrentPage();
     virtual ~SettingsHomePage();
     virtual bool populateList(Evas_Object* genlist);
@@ -60,10 +60,6 @@ public:
     static void _most_visited_cb(void *data, Evas_Object*obj , void* event_info);
     static void _other_cb(void* data, Evas_Object* obj, void* event_info);
     static const std::string DEF_HOME_PAGE;
-    static const std::string QUICK_PAGE;
-    static const std::string MOST_VISITED_PAGE;
-    static const std::string OTHER_PAGE;
-    static const std::string CURRENT_PAGE;
 
 private:
     std::map<SettingsHomePageOptions, Elm_Object_Item*> m_itemsMap;
index 20f3329..3a41100 100755 (executable)
@@ -22,9 +22,9 @@ namespace tizen_browser{
 namespace base_ui{
 
 SettingsMain::SettingsMain(Evas_Object* parent)
-{
-    init(parent);
-};
+    : SettingsUI(parent)
+{ }
+
 
 SettingsMain::~SettingsMain()
 {
@@ -34,43 +34,40 @@ SettingsMain::~SettingsMain()
 void SettingsMain::updateButtonMap()
 {
     ItemData homePage;
-    homePage.buttonText = _(Translations::SettingsMainHomePage.c_str());
-    homePage.subText = _(Translations::SettingsMainHomePageDefault.c_str());
+    homePage.buttonText = Translations::instance().SettingsMainHomePage.c_str();
+    homePage.subText = Translations::instance().SettingsMainHomePageDefault.c_str();
     homePage.sui = this;
     homePage.id = HOME;
 
     ItemData search;
-    search.buttonText = _(Translations::SettingsMainDefaultSearchEngine.c_str());
-    search.subText =  []() -> std::string {
-        auto sig =
-            SPSC.getWebEngineSettingsParamString(
-                basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
-        return (sig && !sig->empty()) ?
-            *sig :
-            Translations::Google;
-    }();
+    search.buttonText = Translations::instance().SettingsMainDefaultSearchEngine.c_str();
+    auto sig = SPSC.getWebEngineSettingsParamString(
+        basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
+    auto sub = (sig && !sig->empty()) ? *sig : Translations::instance().Google;
+
+    search.subText =  _(sub.c_str());
     search.sui = this;
     search.id = SEARCH;
 
     ItemData autofill;
-    autofill.buttonText = _(Translations::SettingsMainAutoFillProfiles.c_str());
-    autofill.subText = _(Translations::SettingsMainAutoFillProfilesSub.c_str());
+    autofill.buttonText = Translations::instance().SettingsMainAutoFillProfiles.c_str();
+    autofill.subText = Translations::instance().SettingsMainAutoFillProfilesSub.c_str();
     autofill.sui = this;
     autofill.id = AUTO_FILL_PROFILE;
 
     ItemData zoom;
-    zoom.buttonText = _(Translations::SettingsMainManualZoom.c_str());
-    zoom.subText = _(Translations::SettingsMainManualZoomSub.c_str());
+    zoom.buttonText = Translations::instance().SettingsMainManualZoom.c_str();
+    zoom.subText = Translations::instance().SettingsMainManualZoomSub.c_str();
     zoom.sui = this;
     zoom.id = ZOOM;
 
     ItemData privacy;
-    privacy.buttonText = _(Translations::SettingsMainPrivacy.c_str());
+    privacy.buttonText = Translations::instance().SettingsMainPrivacy.c_str();
     privacy.sui = this;
     privacy.id = PRIVACY;
 
     ItemData advanced;
-    advanced.buttonText = _(Translations::SettingsMainAdvanced.c_str());
+    advanced.buttonText = Translations::instance().SettingsMainAdvanced.c_str();
     advanced.sui = this;
     advanced.id = ADVANCED;
 
@@ -97,7 +94,7 @@ bool SettingsMain::populateList(Evas_Object* genlist)
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
-    m_naviframe->setTitle(_(Translations::SettingsMainTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsMainTitle.c_str());
 
     updateButtonMap();
     m_genlistItems[SettingsMainOptions::HOME] =
@@ -164,7 +161,7 @@ std::string SettingsMain::getHomePage()
         SPSC.getWebEngineSettingsParamString(
             basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
 
-    return (sig && !sig->empty()) ? (*sig) : Translations::TizenPage;
+    return (sig && !sig->empty()) ? (*sig) : Translations::instance().TizenPage;
 }
 
 void SettingsMain::_home_page_cb(void*, Evas_Object*, void*)
@@ -231,13 +228,13 @@ void SettingsMain::setSearchEngineSubText(int button)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     switch (static_cast<RadioButtons>(button)) {
         case RadioButtons::GOOGLE:
-            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Google;
+            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Google;
             break;
         case RadioButtons::YAHOO:
-            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Yahoo;
+            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Yahoo;
             break;
         case RadioButtons::BING:
-            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::Bing;
+            m_buttonsMap[SettingsMainOptions::SEARCH].subText = Translations::instance().Bing;
             break;
         default:
             return;
@@ -253,7 +250,7 @@ void SettingsMain::setHomePageSubText()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     auto homePage(getHomePage());
-    auto it(homePage.find(Translations::CurrentPage));
+    auto it(homePage.find(Translations::instance().CurrentPage));
 
     boost::optional<std::string> currentOpt(SPSC.requestCurrentPage());
     std::string currentURL = std::string();
@@ -261,26 +258,26 @@ void SettingsMain::setHomePageSubText()
     if (currentOpt && !currentOpt->empty())
         currentURL = *currentOpt;
 
-    if (!homePage.compare(Translations::TizenPage)) {
+    if (!homePage.compare(Translations::instance().TizenPage)) {
         m_buttonsMap[SettingsMainOptions::HOME].subText =
-            Translations::TizenPage;
-    } else if (!homePage.compare(Translations::QuickPage)) {
+            Translations::instance().TizenPage.c_str();
+    } else if (!homePage.compare(Translations::instance().QuickPage)) {
         m_buttonsMap[SettingsMainOptions::HOME].subText =
-            Translations::SettingsHomePageQuickAccess;
-    } else if (!homePage.compare(Translations::MostVisitedPage)) {
+            Translations::instance().SettingsHomePageQuickAccess.c_str();
+    } else if (!homePage.compare(Translations::instance().MostVisitedPage)) {
         m_buttonsMap[SettingsMainOptions::HOME].subText =
-            Translations::SettingsHomePageMostVisited;
+            Translations::instance().SettingsHomePageMostVisited.c_str();
     } else if (!homePage.compare(currentURL)) {
         m_buttonsMap[SettingsMainOptions::HOME].subText =
-            Translations::SettingsHomePageCurrentPage;
+            Translations::instance().SettingsHomePageCurrentPage.c_str();
     } else if (it != std::string::npos) {
-        homePage.erase(it, Translations::CurrentPage.length());
-        m_buttonsMap[SettingsMainOptions::HOME].subText = homePage;
+        homePage.erase(it, Translations::instance().CurrentPage.length());
+        m_buttonsMap[SettingsMainOptions::HOME].subText = _(homePage.c_str());
         SPSC.setWebEngineSettingsParamString(
             basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE,
             homePage);
     } else {
-        m_buttonsMap[SettingsMainOptions::HOME].subText = homePage;
+        m_buttonsMap[SettingsMainOptions::HOME].subText = _(homePage.c_str());
     }
     elm_genlist_realized_items_update(m_genlist);
 }
index 0dace03..634d22f 100755 (executable)
@@ -37,8 +37,7 @@ enum SettingsMainOptions {
     HOME,
     SEARCH,
     AUTO_FILL_PROFILE,
-    AUTO_FILL_CREATOR_WITHOUT_PROFILE,
-    AUTO_FILL_CREATOR_WITH_PROFILE,
+    AUTO_FILL_CREATOR,
     PRIVACY,
     ZOOM,
     ADVANCED,
@@ -51,7 +50,7 @@ class SettingsMain
 {
 public:
     SettingsMain(){};
-    SettingsMain(Evas_Object* parent);
+    explicit SettingsMain(Evas_Object* parent);
     virtual ~SettingsMain();
     bool populateList(Evas_Object* genlist) override;
     Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd) override;
index 8274a20..0900734 100755 (executable)
@@ -57,8 +57,10 @@ void SettingsManager::connectOpenSignals()
         boost::bind(&SettingsManager::showSettingsAdvancedUI, this));
     SPSC.settingsDelPersDataClicked.connect(
         boost::bind(&SettingsManager::showSettingsDelPrivDataUI, this));
-    SPSC.settingsAutofillProfileClicked.connect(
-        boost::bind(&SettingsManager::showSettingsAutofillCreatorUI, this, _1));
+    SPSC.settingsAutofillProfileClicked.connect([this]{
+        showSettingsAutofillCreatorUI();});
+    SPSC.settingsAutofillCreateCancelClicked.connect([this]{
+        m_settingsViews.erase(AUTO_FILL_CREATOR);});
 }
 
 std::shared_ptr<SettingsUI>& SettingsManager::addView(const SettingsMainOptions& s)
@@ -76,11 +78,8 @@ std::shared_ptr<SettingsUI>& SettingsManager::addView(const SettingsMainOptions&
             case AUTO_FILL_PROFILE:
                 m_settingsViews[s] = std::make_shared<SettingsAFProfile>(m_parent);
                 break;
-            case AUTO_FILL_CREATOR_WITH_PROFILE:
-                m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent, true);
-                break;
-            case AUTO_FILL_CREATOR_WITHOUT_PROFILE:
-                m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent, false);
+            case AUTO_FILL_CREATOR:
+                m_settingsViews[s] = std::make_shared<SettingsAFCreator>(m_parent);
                 break;
             case PRIVACY:
                 m_settingsViews[s] = std::make_shared<SettingsPrivacy>(m_parent);
@@ -123,15 +122,10 @@ void SettingsManager::showSettingsAutofillUI()
     SPSC.showSettings(SettingsMainOptions::AUTO_FILL_PROFILE);
 }
 
-void SettingsManager::showSettingsAutofillCreatorUI(bool profile)
+void SettingsManager::showSettingsAutofillCreatorUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (profile)
-        SPSC.showSettings(
-            SettingsMainOptions::AUTO_FILL_CREATOR_WITH_PROFILE);
-    else
-        SPSC.showSettings(
-            SettingsMainOptions::AUTO_FILL_CREATOR_WITHOUT_PROFILE);
+    SPSC.showSettings(SettingsMainOptions::AUTO_FILL_CREATOR);
 }
 
 void SettingsManager::showSettingsPrivacyUI()
index d48534f..51922eb 100755 (executable)
@@ -54,7 +54,7 @@ public:
     void showSettingsBaseUI();
     void showSettingsHomePageUI();
     void showSettingsAutofillUI();
-    void showSettingsAutofillCreatorUI(bool);
+    void showSettingsAutofillCreatorUI();
     void showSettingsPrivacyUI();
     void showSettingsUserAgentUI();
     void showSettingsAdvancedUI();
index 500da15..c981ced 100755 (executable)
@@ -63,7 +63,8 @@ public:
     B_SIG<void ()> settingsAutofillClicked;
     B_SIG<void ()> settingsAdvancedClicked;
     B_SIG<void ()> settingsUserAgentClicked;
-    B_SIG<void (bool)> settingsAutofillProfileClicked;
+    B_SIG<void ()> settingsAutofillProfileClicked;
+    B_SIG<void ()> settingsAutofillCreateCancelClicked;
     B_SIG<void (const std::string&)> homePageChanged;
     B_SIG<std::string ()> requestCurrentPage;
     B_SIG<bool ()> isLandscape;
index 2652a16..1f3aced 100755 (executable)
@@ -24,34 +24,34 @@ namespace base_ui{
 
 
 SettingsPrivacy::SettingsPrivacy(Evas_Object* parent)
+    : SettingsUI(parent)
 {
-    init(parent);
-    updateButtonMap();
-};
+    updateButtonMapInternal();
+}
 
 SettingsPrivacy::~SettingsPrivacy()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
-void SettingsPrivacy::updateButtonMap()
+void SettingsPrivacy::updateButtonMapInternal()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     ItemData cookies;
-    cookies.buttonText = _(Translations::SettingsPrivacyAcceptCookies.c_str());
-    cookies.subText = _(Translations::SettingsPrivacyAcceptCookiesSub.c_str());
+    cookies.buttonText = Translations::instance().SettingsPrivacyAcceptCookies.c_str();
+    cookies.subText = Translations::instance().SettingsPrivacyAcceptCookiesSub.c_str();
     cookies.sui = this;
     cookies.id = SettingsPrivacyOptions::COOKIES;
 
     ItemData signIn;
-    signIn.buttonText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
-    signIn.subText = _(Translations::SettingsPrivacySaveSigninInfo.c_str());
+    signIn.buttonText = Translations::instance().SettingsPrivacySaveSigninInfo.c_str();
+    signIn.subText = Translations::instance().SettingsPrivacySaveSigninInfoSub.c_str();
     signIn.sui = this;
     signIn.id = SettingsPrivacyOptions::SIGNIN_INFO;
 
     ItemData delPerData;
-    delPerData.buttonText = _(Translations::SettingsPrivacyDeletePersonalData.c_str());
+    delPerData.buttonText = Translations::instance().SettingsPrivacyDeletePersonalData.c_str();
     delPerData.sui = this;
     delPerData.id = SettingsPrivacyOptions::DEL_PER_DATA;
 
@@ -60,6 +60,11 @@ void SettingsPrivacy::updateButtonMap()
     m_buttonsMap[SettingsPrivacyOptions::DEL_PER_DATA] = delPerData;
 }
 
+void SettingsPrivacy::updateButtonMap()
+{
+    updateButtonMapInternal();
+}
+
 bool SettingsPrivacy::populateList(Evas_Object* genlist)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -67,7 +72,7 @@ bool SettingsPrivacy::populateList(Evas_Object* genlist)
     m_naviframe->setLeftButtonVisible(false);
     m_naviframe->setRightButtonVisible(false);
     m_naviframe->setPrevButtonVisible(true);
-    m_naviframe->setTitle(_(Translations::SettingsPrivacyTitle.c_str()));
+    m_naviframe->setTitle(Translations::instance().SettingsPrivacyTitle.c_str());
 
     appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::COOKIES], _check_cb);
     appendGenlist(genlist, m_setting_check_on_of_item_class, &m_buttonsMap[SettingsPrivacyOptions::SIGNIN_INFO], _check_cb);
@@ -113,12 +118,10 @@ void SettingsPrivacy::_cookies_cb(void*, Evas_Object* obj, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto value = elm_check_state_get(obj);
-    if (value == EINA_TRUE)
-        ewk_cookie_manager_accept_policy_set(
-            ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
-    else
-        ewk_cookie_manager_accept_policy_set(
-            ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_NEVER);
+
+    SPSC.setWebEngineSettingsParam(
+        basic_webengine::WebEngineSettings::ENABLE_COOKIES,
+        static_cast<bool>(value));
 }
 
 void SettingsPrivacy::_signin_cb(void*, Evas_Object* obj, void*)
@@ -136,5 +139,36 @@ void SettingsPrivacy::_del_per_data_cb(void*, Evas_Object*, void*)
     SPSC.settingsDelPersDataClicked();
 }
 
+Evas_Object* SettingsPrivacy::createOnOffCheckBox(Evas_Object* obj, ItemData* itd)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Evas_Object* check { elm_check_add(obj) };
+    elm_object_style_set(check, "on&off");
+    elm_check_state_set(check,  getCheckState(itd->id));
+    evas_object_propagate_events_set(check, EINA_FALSE);
+    return check;
+}
+
+Eina_Bool SettingsPrivacy::getCheckState(int id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::optional<bool> sig;
+
+    switch (id) {
+        case COOKIES:
+            sig = SPSC.getWebEngineSettingsParam(
+                basic_webengine::WebEngineSettings::ENABLE_COOKIES);
+            break;
+        case SIGNIN_INFO:
+            sig = SPSC.getWebEngineSettingsParam(
+                basic_webengine::WebEngineSettings::REMEMBER_PASSWORDS);
+            break;
+        default:
+            sig = false;
+            break;
+    }
+    return (sig && *sig) ? EINA_TRUE : EINA_FALSE;
+}
+
 }
 }
index a9a9162..dcad693 100755 (executable)
@@ -43,15 +43,19 @@ class SettingsPrivacy
 {
 public:
     SettingsPrivacy(){};
-    SettingsPrivacy(Evas_Object* parent);
+    explicit SettingsPrivacy(Evas_Object* parent);
     virtual ~SettingsPrivacy();
     bool populateList(Evas_Object* genlist) override;
     void updateButtonMap() override;
+    Evas_Object* createOnOffCheckBox(Evas_Object* obj, ItemData* itd) override;
+    Eina_Bool getCheckState(int id);
     static void _cookies_cb(void *data, Evas_Object*obj , void* event_info);
     static void _signin_cb(void *data, Evas_Object*obj , void* event_info);
     static void _del_per_data_cb(void *data, Evas_Object*obj , void* event_info);
     static void _realized_cb(void* data, Evas_Object* obj, void* event_info);
     static void _check_cb(void* data, Evas_Object* obj, void* event_info);
+private:
+    void updateButtonMapInternal(); // internal version for proper call from constructor
 };
 
 }
index ead40b8..cb72d17 100755 (executable)
@@ -34,8 +34,39 @@ SettingsUI::SettingsUI()
     , m_settings_layout(nullptr)
     , m_items_layout(nullptr)
     , m_parent(nullptr)
+    , m_layout(nullptr)
     , m_radio(nullptr)
 {
+    m_setting_item_class = nullptr;
+    m_setting_double_item_class = nullptr;
+    m_setting_check_on_of_item_class = nullptr;
+    m_setting_check_normal_item_class = nullptr;
+    m_setting_check_radio_item_class = nullptr;
+
+    init();
+}
+
+SettingsUI::SettingsUI(Evas_Object* parent)
+    : m_naviframe(nullptr)
+    , m_genlist(nullptr)
+    , m_settings_layout(nullptr)
+    , m_items_layout(nullptr)
+    , m_parent(parent)
+    , m_layout(nullptr)
+    , m_radio(nullptr)
+{
+    m_setting_item_class = nullptr;
+    m_setting_double_item_class = nullptr;
+    m_setting_check_on_of_item_class = nullptr;
+    m_setting_check_normal_item_class = nullptr;
+    m_setting_check_radio_item_class = nullptr;
+
+    init();
+}
+
+void SettingsUI::init()
+{
+    Translations::instance().update();
     m_edjFilePath = EDJE_DIR;
     m_edjFilePath.append("SettingsUI/SettingsMobileUI.edj");
     elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
@@ -47,6 +78,11 @@ SettingsUI::SettingsUI()
     m_setting_check_radio_item_class = createItemClass("type1",_gengrid_item_text_get, _gengrid_item_content_radio_get);
 }
 
+void SettingsUI::init(Evas_Object* parent)
+{
+    m_parent = parent;
+}
+
 Elm_Gengrid_Item_Class* SettingsUI::createItemClass(
     const char* style,
     Elm_Gen_Item_Text_Get_Cb text_cb,
@@ -95,13 +131,6 @@ SettingsUI::~SettingsUI()
         evas_object_del(m_radio);
 }
 
-void SettingsUI::init(Evas_Object* parent)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(parent);
-    m_parent = parent;
-}
-
 Evas_Object* SettingsUI::getContent()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -114,6 +143,7 @@ Evas_Object* SettingsUI::getContent()
 void SettingsUI::showUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    Translations::instance().update();
     m_naviframe->show();
     updateButtonMap();
     if (m_genlist || elm_genlist_items_count(m_genlist)) {
@@ -162,24 +192,6 @@ void SettingsUI::orientationChanged()
     }
 }
 
-Evas_Object* SettingsUI::createActionBar(Evas_Object* settings_layout)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    Evas_Object* actionBar = elm_layout_add(settings_layout);
-    elm_object_part_content_set(settings_layout, "actionbar_swallow", actionBar);
-    evas_object_size_hint_weight_set(actionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(actionBar, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-    elm_layout_file_set(actionBar, m_edjFilePath.c_str(), "action_bar");
-    Evas_Object *close_click_btn = elm_button_add(actionBar);
-    elm_object_style_set(close_click_btn, "basic_button");
-    evas_object_smart_callback_add(close_click_btn, "clicked", SettingsUI::close_clicked_cb, this);
-    elm_object_part_content_set(actionBar, "close_click", close_click_btn);
-    elm_object_translatable_part_text_set(actionBar, "settings_title", "IDS_BR_BODY_SETTINGS");
-
-    return actionBar;
-}
-
 Evas_Object* SettingsUI::_gengrid_item_content_radio_get(void* data, Evas_Object* obj, const char* part)
 {
     if (!data) {
@@ -265,13 +277,16 @@ Evas_Object* SettingsUI::_gengrid_item_content_normal_get(void* data, Evas_Objec
 
 void SettingsUI::_language_changed(void *data, Evas_Object* obj, void*)
 {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
     if (!data) {
         BROWSER_LOGE("data is null");
         return;
     }
-    SettingsUI* self = static_cast<SettingsUI*>(data);
+    Translations::instance().update();
+    auto self = static_cast<SettingsUI*>(data);
     self->updateButtonMap();
+    elm_genlist_clear(obj);
+    self->populateList(obj);
     elm_genlist_realized_items_update(obj);
 }
 
@@ -294,6 +309,7 @@ Evas_Object* SettingsUI::createSettingsMobilePage(Evas_Object* settings_layout)
         elm_genlist_multi_select_set(m_genlist, EINA_FALSE);
         elm_scroller_policy_set(m_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
         elm_scroller_bounce_set(m_genlist, EINA_FALSE, EINA_FALSE);
+        elm_genlist_mode_set(m_genlist, ELM_LIST_COMPRESS);
         evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
         elm_object_part_content_set(layout, "options_swallow", m_genlist);
         evas_object_show(m_genlist);
index 399f579..a874898 100755 (executable)
@@ -46,7 +46,11 @@ class SettingsUI
 {
 public:
     SettingsUI();
+    explicit SettingsUI(Evas_Object* parent);
     virtual ~SettingsUI();
+    SettingsUI(const SettingsUI&) = delete;
+    SettingsUI& operator=(const SettingsUI&) = delete;
+
     virtual bool populateList(Evas_Object*) { return false; };
     virtual bool populateLayout(Evas_Object*) { return false; };
     virtual void updateButtonMap(){};
@@ -73,7 +77,6 @@ public:
             const void *data,
             Evas_Smart_Cb func);
     void prepareLayout(Evas_Object* layout);
-    Evas_Object* createActionBar(Evas_Object* settings_layout);
     Evas_Object* createSettingsMobilePage(Evas_Object* settings_layout);
     Evas_Object* createMainView(Evas_Object* settings_layout);
     Evas_Object* getGenlist() { return m_genlist; }
@@ -85,6 +88,7 @@ public:
     Evas_Object* getRadioGroup() { return m_radio; }
 
 private:
+    void init();
     Evas_Object* createSettingsUILayout(Evas_Object* parent);
     static void close_clicked_cb(void* data, Evas_Object* obj, void* event_info);
 
index d0ef85a..bdd588c 100755 (executable)
@@ -23,17 +23,17 @@ namespace tizen_browser{
 namespace base_ui{
 
 SettingsUserAgent::SettingsUserAgent(Evas_Object* parent)
+    : SettingsUI(parent)
 {
-    init(parent);
-    updateButtonMap();
-};
+    updateButtonMapInternal();
+}
 
 SettingsUserAgent::~SettingsUserAgent()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
-void SettingsUserAgent::updateButtonMap()
+void SettingsUserAgent::updateButtonMapInternal()
 {
     for (auto i = 0; i < UA_ITEMS_COUNT; ++i) {
         ItemData content;
@@ -45,6 +45,11 @@ void SettingsUserAgent::updateButtonMap()
     }
 }
 
+void SettingsUserAgent::updateButtonMap()
+{
+    updateButtonMapInternal();
+}
+
 bool SettingsUserAgent::populateList(Evas_Object* genlist)
 {
     m_naviframe->setLeftButtonVisible(false);
index 517a62a..7772e70 100755 (executable)
@@ -38,12 +38,13 @@ class SettingsUserAgent
     : public SettingsUI
 {
 public:
-    SettingsUserAgent(Evas_Object* parent);
+    explicit SettingsUserAgent(Evas_Object* parent);
     virtual ~SettingsUserAgent();
-    virtual bool populateList(Evas_Object* genlist) override;
-    virtual void updateButtonMap() override;
+    bool populateList(Evas_Object* genlist) override;
+    void updateButtonMap() override;
     Evas_Object* createRadioButton(Evas_Object* obj, ItemData* itd) override;
 private:
+    void updateButtonMapInternal(); // internal version for proper call from constructor
     struct UserAgentItem {
         UserAgentItem(std::string&& n, std::string&& s)
             : name(n)
index 1e71e8d..1dd445e 100755 (executable)
@@ -1,1056 +1 @@
-collections { base_scale: 2.6;
-
-group {
-    name: "affdv-layout";
-    images {
-        image: "navi_ic_back_nor.png" COMP;
-    }
-    parts {
-        part {
-            name: "bg_clipper";
-            type : RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                fixed: 0 0;
-                min: 1 1;
-                max: -1 -1;
-                visible: 1;
-                align: 0 0;
-                color: 243 243 243 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        part {
-            name: "select_all_bg";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 0;
-                min: 1 72;
-                max: -1 72;
-                color: 231 231 231 255;
-                rel1 { relative: 0.0 0.0; to: "bg_clipper";}
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        rect {
-            name: "select_all_text_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 0 0;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "select_all_bg";}
-                rel2 { relative: 1.0 1.0; to: "select_all_bg";}
-            }
-        }
-        rect {
-            name: "select_all_text_spacer_2";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 1 1;
-                fixed: 1 1;
-                min: 72 0;
-                max: 72 0;
-                rel1 { relative: 0.0 0.0; to: "select_all_bg";}
-                rel2 { relative: 1.0 1.0; to: "select_all_bg";}
-            }
-        }
-        part {
-            name: "select_all_text";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 56 0;
-                fixed: 1 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 1.0 1.0; to: "select_all_text_spacer";}
-                rel2 { relative: 0.0 0.0; to: "select_all_text_spacer_2";}
-                text {
-                    text: "Select all";
-                    font: "Sans";
-                    size: 30;
-                    align: 0.0 0.5;
-                }
-            }
-        }
-        rect {
-            name: "select_all_checkbox_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 1 1;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "select_all_bg";}
-                rel2 { relative: 1.0 1.0; to: "select_all_bg";}
-            }
-        }
-        part {
-            name: "select_all_checkbox";
-            scale:1;
-            mouse_events: 1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 1 0.5;
-                fixed: 1 1;
-                min: 48 48;
-                max: 48 48;
-                rel1 { relative: 0.0 0.0; to: "select_all_bg";}
-                rel2 { relative: 0.0 0.0; to: "select_all_checkbox_spacer";}
-            }
-        }
-        part {
-            name: "select_all_checkbox_button";
-            scale:1;
-            mouse_events: 1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0.5;
-                fixed: 0 0;
-                min: 0 0;
-                max: -1 -1;
-                rel1 { relative: 0.0 0.0; to: "select_all_bg";}
-                rel2 { relative: 1.0 1.0; to: "select_all_bg";}
-                color_class: transparent;
-            }
-        }
-        part {
-            name: "bottom_bar_bg";
-            type: RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 1;
-                min: 1 100;
-                max: -1 100;
-                color: 255 255 255 255;
-                rel1 { relative: 0.0 0.0; to: "bg_clipper";}
-                rel2 { relative: 1.0 1.0; to: "bg_clipper";}
-            }
-        }
-        part {
-            name: "del_bg_border";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 0.5;
-                min: 1 100;
-                max: -1 100;
-                color: 0 0 0 77;
-                rel1 { relative: 0.0 0.0; to: "bottom_bar_bg";}
-                rel2 { relative: 1.0 1.0; to: "bottom_bar_bg";}
-            }
-        }
-        part {
-            name: "del_bg";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 0;
-                align: 0.5 0.5;
-                min: 1 1;
-                max: -1 -1;
-                color: 255 255 255 255;
-                rel1 { relative: 0+(1/720) 0+(1/100); to: "del_bg_border";}
-                rel2 { relative: 1-(1/720) 1-(1/100); to: "del_bg_border";}
-            }
-        }
-        part {
-            name: "del_text";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 56 0;
-                fixed: 1 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 0.0 0.0; to: "del_bg";}
-                rel2 { relative: 1.0 1.0; to: "del_bg";}
-                text {
-                    text: "Delete";
-                    font: "Sans";
-                    size: 40;
-                    align: 0.5 0.5;
-                }
-            }
-            description {
-                state: "dim" 0.0;
-                inherit: "default" 0.0;
-                color: 207 207 207 255;
-            }
-        }
-        part {
-            name: "del_button";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0.5 0.5;
-                fixed: 0 1;
-                min: 1 100;
-                max: -1 100;
-                rel1 { relative: 0.0 0.0; to: "del_bg";}
-                rel2 { relative: 1.0 1.0; to: "del_bg";}
-                color_class: transparent;
-            }
-        }
-        part {
-            name: "affdv_genlist";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                fixed: 0 0;
-                min: 1 0;
-                max: -1 -1;
-                rel1 { relative: 0.0 1.0; to: "select_all_bg";}
-                rel2 { relative: 1.0 0.0; to: "bottom_bar_bg";}
-            }
-        }
-    }
-    programs {
-        program {
-            name: "show_del_button";
-            signal: "show,del,button,signal";
-            source: "";
-            action: STATE_SET "default" 0.0;
-            target: "del_text";
-        }
-        program {
-            name: "dim_del_button";
-            signal: "dim,del,button,signal";
-            source: "";
-            action: STATE_SET "dim" 0.0;
-            target: "del_text";
-        }
-    }
-}
-
-group {
-    name: "elm/genlist/item/affdv_item/default";
-    data.item: "texts" "item_title";
-    data.item: "contents" "checkbox";
-    parts {
-        part {
-            name: "item_bg";
-            type: RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                min: 1 100;
-                max: -1 100;
-                color: 247 247 247 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        rect {
-            name: "item_title_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 0 0;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 1.0 1.0; to: "item_bg";}
-            }
-        }
-        rect {
-            name: "select_all_text_spacer_2";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 1 1;
-                fixed: 1 1;
-                min: 72 0;
-                max: 72 0;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 1.0 1.0; to: "item_bg";}
-            }
-        }
-        part {
-            name: "item_title";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 350 100;
-                max: -1 -1;
-                fixed: 0 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 1.0 1.0; to: "item_title_spacer";}
-                rel2 { relative: 0.0 0.0; to: "select_all_text_spacer_2";}
-                text {
-                    text: "First name";
-                    font: "Sans";
-                    size: 36;
-                    align: 0.0 0.5;
-                }
-            }
-        }
-        rect {
-            name: "checkbox_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 1 1;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 1.0 1.0; to: "item_bg";}
-            }
-        }
-        part {
-            name: "checkbox";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 1 0.5;
-                min: 48 48;
-                max: 48 48;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 0.0 0.0; to: "checkbox_spacer";}
-            }
-        }
-    }
-}
-
-group {
-    name: "affcv-layout";
-    images {
-        image: "navi_ic_back_nor.png" COMP;
-    }
-    parts {
-        part {
-            name: "bg_clipper";
-            type : RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 1 1;
-                max: -1 -1;
-                visible: 1;
-                fixed: 0 0;
-                align: 0 0;
-                color: 255 255 255 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        part {
-            name: "affcv_genlist";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                fixed: 0 0;
-                min: 1 0;
-                max: -1 -1;
-                rel1 { relative: 0.0 0.0; to: "bg_clipper";}
-                rel2 { relative: 1.0 1.0; to: "bg_clipper";}
-            }
-        }
-    }
-}
-
-group {
-    name : "affcv_item";
-    data.item: "texts" "field_name";
-    data.item: "contents" "entry_swallow entry_clear_button";
-    images {
-        image: "btn_bar_stop_nor.png" COMP;
-    }
-    parts {
-        part {
-            name: "bg";
-            scale : 1;
-            type : RECT;
-            description {
-                state: "default" 0.0;
-                min: 1 150;
-                max: -1 150;
-                visible: 1;
-                align: 0 0;
-                color: 255 255 255 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        part {
-            name: "field_name";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 350 50;
-                max: -1 50;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 0.05 0.0; to: "bg"; offset: 0 15;}
-                rel2 { relative: 1.0 1.0; to: "bg";}
-                text {
-                    text: "Full name";
-                    font: "Sans";
-                    size: 30;
-                    align: 0 0.0;
-                }
-            }
-        }
-        part {
-            name: "entry_swallow";
-            scale : 1;
-            type : SWALLOW;
-            description {
-                state: "default" 0.0;
-                min: 1 80;
-                max: -1 80;
-                visible: 1;
-                align: 0 0.8;
-                rel1 { relative: 0.05 0.0; to:"bg"; }
-                rel2 { relative: 0.95 1.0; to:"bg"; }
-            }
-        }
-        part {
-            name: "line";
-            scale : 1;
-            type : RECT;
-            description {
-                state: "default" 0.0;
-                min: 1 1;
-                max: -1 1;
-                visible: 1;
-                align: 0 0;
-                color: 0 0 0 255;
-                rel1 { relative: 0.05 1.0; to: "bg"; offset: 0 -1;}
-                rel2 { relative: 0.95 1.0; to: "bg";}
-            }
-        }
-    }
-}
-
-group {
-        name: "elm/entry/selection/entry_style";
-        parts {
-            part {
-                name: "bg";
-                scale:1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 224 237 251 255;
-                }
-            }
-        }
-    }
-    group {
-        name: "elm/entry/cursor/entry_style";
-        parts {
-            part {
-                name: "bg";
-                scale:1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 10 132 229 255;
-                    min: 3 38;
-                    max: 3 38;
-                    visible: 0;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 1;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focused";
-                signal: "elm,action,focus";
-                source: "elm";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-                after: "cursor_show";
-            }
-            program {
-                name: "unfocused";
-                signal: "elm,action,unfocus";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-                after: "stop_action";
-            }
-            program { name: "cursor_show";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-                after: "cursor_show_timer";
-            }
-            program { name: "cursor_hide";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-                transition: SINUSOIDAL 0.2;
-                after: "cursor_hide_timer";
-            }
-            program { name: "cursor_show_timer";
-                in: 0.4 0.0;
-                after: "cursor_hide";
-            }
-            program { name: "cursor_hide_timer";
-                in: 0.3 0.0;
-                after: "cursor_show";
-            }
-            program {
-                name: "stop_action";
-                action: ACTION_STOP;
-                target: "cursor_show";
-                target: "cursor_hide";
-                target: "cursor_show_timer";
-                target: "cursor_hide_timer";
-            }
-        }
-    }
-
-group {
-    name: "elm/entry/base-single/entry_style";
-    data {
-        item: focus_highlight "off";
-    }
-    styles {
-        style {
-            name: "entry-style";
-            base: "font=Sans:style=SVD_Medium font_size="42" wrap=none color=#969696";
-            tag:  "br" "";
-        }
-    }
-    parts {
-        part {
-            name: "bg";
-            type : RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 1 80;
-                max: -1 80;
-                visible: 1;
-                fixed: 1 1;
-                align: 0 0;
-                color: 255 255 255 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        part {
-            name: "elm.text";
-            scale: 1;
-            multiline: 0;
-            entry_mode: EDITABLE;
-            select_mode: DEFAULT;
-            cursor_mode: BEFORE;
-            type: TEXTBLOCK;
-            source: "elm/entry/selection/entry_style";
-            source4: "elm/entry/cursor/entry_style";
-            description {
-                state: "default" 0.0;
-                max: -1 80;
-                visible: 1;
-                fixed: 0 0;
-                rel1 { relative: 0.0 0.0; to: "bg";}
-                rel2 { relative: 1.0 1.0; to: "bg";}
-                align: 0.0 0.0;
-                text {
-                    style: "entry-style";
-                    min: 0 1;
-                }
-            }
-        }
-    }
-    programs {
-        program {
-            name: "focus";
-            signal: "load";
-            source: "";
-            action: FOCUS_SET;
-            target: "elm.text";
-        }
-    }
-}
-
-group {
-    name: "edit-field";
-    data {
-        item: focus_highlight "off";
-    }
-    parts {
-        part {
-            name: "editfield_entry";
-            scale : 1;
-            type : SWALLOW;
-            description {
-                state: "default" 0.0;
-                fixed: 0 1;
-                min: 1 80;
-                max: -1 80;
-                visible: 1;
-                align: 0.0 0.0;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-            description {
-                state: "show" 0.0;
-                inherit: "default";
-                rel2 {
-                    relative: 0.0 1.0;
-                    to: "clear_icon";
-                }
-            }
-        }
-        part {
-            name: "clear_icon";
-            type: IMAGE;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                fixed: 1 1;
-                align: 1 0.5;
-                min: 56 56;
-                max: 56 56;
-                rel1 { relative: 0.0 0.0;}
-                rel2 { relative: 1.0 1.0;}
-                image.normal: "btn_bar_stop_nor.png";
-            }
-            description {
-                state: "show" 0.0;
-                inherit: "default" 0.0;
-                visible: 1;
-            }
-        }
-        part {
-            name: "entry_clear_button";
-            scale : 1;
-            type : SWALLOW;
-            description {
-                state: "default" 0.0;
-                min: 56 56;
-                max: 56 56;
-                visible: 0;
-                align: 0.0 0.0;
-                rel1 { relative: 0.0 0.0; to:"clear_icon"; }
-                rel2 { relative: 1.0 1.0; to:"clear_icon"; }
-            }
-            description {
-                state: "show" 0.0;
-                inherit: "default" 0.0;
-                visible: 1;
-            }
-        }
-    }
-    programs {
-        program {
-            name: "show_clear_button";
-            signal: "show,clear,button,signal";
-            source: "";
-            action: STATE_SET "show" 0.0;
-            target: "clear_icon";
-            target: "entry_clear_button";
-            target: "editfield_entry";
-        }
-        program {
-            name: "hide_clear_button";
-            signal: "hide,clear,button,signal";
-            source: "";
-            action: STATE_SET "default" 0.0;
-            target: "clear_icon";
-            target: "entry_clear_button";
-            target: "editfield_entry";
-        }
-    }
-}
-
-group {
-    name: "afflv-layout";
-    images {
-        image: "navi_ic_back_nor.png" COMP;
-    }
-    parts {
-        part {
-            name: "bg_clipper";
-            type : RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 1 1;
-                max: -1 -1;
-                visible: 1;
-                fixed: 0 0;
-                align: 0 0;
-                color: 243 243 243 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        part {
-            name: "profile_bg";
-            type: RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 0;
-                min: 1 72;
-                max: -1 72;
-                color: 231 231 231 255;
-                rel1 { relative: 0.0 0.0; to: "bg_clipper";}
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        rect {
-            name: "profile_text_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 0 0;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "profile_bg";}
-                rel2 { relative: 1.0 1.0; to: "profile_bg";}
-            }
-        }
-        part {
-            name: "profile_text";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 56 0;
-                fixed: 1 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 1.0 1.0; to: "profile_text_spacer";}
-                rel2 { relative: 1.0 1.0; to: "profile_bg";}
-                text {
-                    font: "Sans";
-                    size: 30;
-                    align: 0.0 0.5;
-                }
-            }
-        }
-        part {
-            name: "bottom_bar_bg";
-            type: RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 1;
-                min: 1 100;
-                max: -1 100;
-                color: 255 255 255 255;
-                rel2 { relative: 1 1; to: "bg_clipper";}
-            }
-        }
-        part {
-            name: "add_profile_bg_border";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 0;
-                min: 1 100;
-                max: -1 100;
-                color: 0 0 0 77;
-                rel1 { relative: 0.0 0.0; to: "bottom_bar_bg";}
-                rel2 { relative: 0.5 1.0; to: "bottom_bar_bg";}
-            }
-        }
-        part {
-            name: "add_profile_bg";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 0;
-                align: 0 0.5;
-                min: 1 1;
-                max: -1 -1;
-                color: 255 255 255 255;
-                rel1 { relative: 0+(1/720) 0+(1/100); to: "add_profile_bg_border";}
-                rel2 { relative: 1-(1/720) 1-(1/100); to: "add_profile_bg_border";}
-            }
-        }
-        part {
-            name: "add_profile_text";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 56 1;
-                max: -1 100;
-                fixed: 0 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 0.0 0.0; to: "add_profile_bg";}
-                rel2 { relative: 1.0 1.0; to: "add_profile_bg";}
-                text {
-                    text: "Add";
-                    font: "Sans";
-                    size: 40;
-                    align: 0.5 0.5;
-                }
-            }
-        }
-        part {
-            name: "add_profile_button";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                fixed: 1 1;
-                min: 1 100;
-                max: -1 100;
-                rel1 { relative: 0.0 0.0; to: "add_profile_bg";}
-                rel2 { relative: 1.0 1.0; to: "add_profile_bg";}
-                color_class: transparent;
-            }
-        }
-        part {
-            name: "delete_profile_bg_border";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 1;
-                align: 0 0;
-                min: 1 100;
-                max: -1 100;
-                color: 0 0 0 77;
-                rel1 { relative: 0.5 0.0; to: "bottom_bar_bg";}
-                rel2 { relative: 1.0 1.0; to: "bottom_bar_bg";}
-            }
-        }
-        part {
-            name: "delete_profile_bg";
-            type: RECT;
-            mouse_events: 1;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                fixed: 0 0;
-                align: 1 0.5;
-                min: 1 1;
-                max: -1 -1;
-                color: 255 255 255 255;
-                rel1 { relative: 0+(1/720) 0+(1/100); to: "delete_profile_bg_border";}
-                rel2 { relative: 1-(1/720) 1-(1/100); to: "delete_profile_bg_border";}
-            }
-        }
-        part {
-            name: "delete_profile_text";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 56 0;
-                fixed: 1 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 0.0 0.0; to: "delete_profile_bg";}
-                rel2 { relative: 1.0 1.0; to: "delete_profile_bg";}
-                text {
-                    text: "Delete";
-                    font: "Sans";
-                    size: 40;
-                    align: 0.5 0.5;
-                }
-            }
-            description {
-                state: "dim" 0.0;
-                inherit: "default" 0.0;
-                color: 207 207 207 255;
-            }
-        }
-        part {
-            name: "delete_profile_button";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                fixed: 1 1;
-                min: 1 100;
-                max: -1 100;
-                rel1 { relative: 0.0 0.0; to: "delete_profile_bg";}
-                rel2 { relative: 1.0 1.0; to: "delete_profile_bg";}
-                color_class: transparent;
-            }
-        }
-        part {
-            name: "afflv_genlist";
-            scale:1;
-            type: SWALLOW;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                fixed: 0 0;
-                min: 1 1;
-                max: -1 -1;
-                rel1 { relative: 0.0 1.0; to: "profile_bg";}
-                rel2 { relative: 1.0 0.0; to: "bottom_bar_bg";}
-            }
-        }
-    }
-    programs {
-        program {
-            name: "show_del_button";
-            signal: "show,del,button,signal";
-            source: "";
-            action: STATE_SET "default" 0.0;
-            target: "delete_profile_text";
-        }
-        program {
-            name: "dim_del_button";
-            signal: "dim,del,button,signal";
-            source: "";
-            action: STATE_SET "dim" 0.0;
-            target: "delete_profile_text";
-        }
-    }
-}
-
-group {
-    name: "elm/genlist/item/afflv_item/default";
-    data.item: "texts" "item_title";
-    parts {
-        part {
-            name: "item_bg";
-            type: RECT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 1;
-                align: 0 0;
-                min: 1 100;
-                max: -1 100;
-                color: 247 247 247 255;
-                rel1 { relative: 0.0 0.0; }
-                rel2 { relative: 1.0 1.0; }
-            }
-        }
-        rect {
-            name: "item_title_spacer";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 0 0;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 1.0 1.0; to: "item_bg";}
-            }
-        }
-        rect {
-            name: "item_title_spacer_2";
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                visible: 0;
-                align: 1 1;
-                fixed: 1 1;
-                min: 24 0;
-                max: 24 0;
-                rel1 { relative: 0.0 0.0; to: "item_bg";}
-                rel2 { relative: 1.0 1.0; to: "item_bg";}
-            }
-        }
-        part {
-            name: "item_title";
-            type: TEXT;
-            scale: 1;
-            description {
-                state: "default" 0.0;
-                min: 350 100;
-                max: -1 -1;
-                fixed: 0 0;
-                align: 0 0;
-                color: 64 64 64 255;
-                rel1 { relative: 1.0 1.0; to: "item_title_spacer";}
-                rel2 { relative: 0.0 0.0; to: "item_title_spacer_2";}
-                text {
-                    text: "First name";
-                    font: "Sans";
-                    size: 36;
-                    align: 0.0 0.5;
-                }
-            }
-        }
-    }
-}
-
-} // Collections
+#include "../../../core/Tools/edc/EntryCustomLayout.edc"
index 95c44de..4378860 100755 (executable)
@@ -3,20 +3,15 @@ project(SimpleUI)
 set(SimpleUI_SRCS
     SimpleUI.cpp
     InputPopup.cpp
-    SimplePopup.cpp
     NotificationPopup.cpp
     ViewManager.cpp
     RadioPopup.cpp
     ProgressiveWebApp.cpp
+    TextPopup.cpp
+    ContentPopup.cpp
+    SplashScreen.cpp
     )
 
-if (${PROFILE} MATCHES "mobile")
-set(SimpleUI_SRCS ${SimpleUI_SRCS}
-    TextPopup_mob.cpp
-    ContentPopup_mob.cpp
-    )
-endif (${PROFILE} MATCHES "mobile")
-
 include(Coreheaders)
 include(EFLHelpers)
 include(EWebKitHelpers)
@@ -25,12 +20,13 @@ include_directories(${CMAKE_BINARY_DIR})
 include_directories(${CMAKE_SOURCE_DIR})
 include_directories(${CMAKE_SOURCE_DIR}/services)
 include_directories(${CMAKE_SOURCE_DIR}/services/WebPageUI)
+include_directories(${CMAKE_SOURCE_DIR}/services/WebPageMin)
 include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService)
-include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineService/src)
+include_directories(${CMAKE_SOURCE_DIR}/services/WebEngineMin)
 include_directories(${CMAKE_SOURCE_DIR}/services/StorageService)
 include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkFlowUI)
 include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkManagerUI)
-include_directories(${CMAKE_SOURCE_DIR}/services/FavoriteService)
+include_directories(${CMAKE_SOURCE_DIR}/services/BookmarkService)
 include_directories(${CMAKE_SOURCE_DIR}/services/HistoryService)
 include_directories(${CMAKE_SOURCE_DIR}/services/TabService)
 include_directories(${CMAKE_SOURCE_DIR}/services/HistoryUI)
@@ -48,11 +44,14 @@ pkg_check_modules(capi_net QUIET capi-network-connection)
 add_library(${PROJECT_NAME} SHARED ${SimpleUI_SRCS})
 
 add_dependencies(${PROJECT_NAME} WebPageUI)
+add_dependencies(${PROJECT_NAME} WebPageMin)
+add_dependencies(${PROJECT_NAME} WebEngineMin)
 add_dependencies(${PROJECT_NAME} StorageService)
 add_dependencies(${PROJECT_NAME} HistoryService)
 add_dependencies(${PROJECT_NAME} TabService)
 add_dependencies(${PROJECT_NAME} BookmarkFlowUI)
 add_dependencies(${PROJECT_NAME} BookmarkManagerUI)
+add_dependencies(${PROJECT_NAME} BookmarkService)
 add_dependencies(${PROJECT_NAME} QuickAccess)
 add_dependencies(${PROJECT_NAME} HistoryUI)
 add_dependencies(${PROJECT_NAME} TabUI)
@@ -62,6 +61,8 @@ add_dependencies(${PROJECT_NAME} CertificateService)
 add_dependencies(${PROJECT_NAME} FindOnPageUI)
 
 target_link_libraries(${PROJECT_NAME} WebPageUI)
+target_link_libraries(${PROJECT_NAME} WebPageMin)
+target_link_libraries(${PROJECT_NAME} WebEngineMin)
 target_link_libraries(${PROJECT_NAME} StorageService)
 target_link_libraries(${PROJECT_NAME} HistoryService)
 target_link_libraries(${PROJECT_NAME} TabService)
@@ -71,6 +72,7 @@ target_link_libraries(${PROJECT_NAME} TabUI)
 target_link_libraries(${PROJECT_NAME} SettingsUI)
 target_link_libraries(${PROJECT_NAME} BookmarkFlowUI)
 target_link_libraries(${PROJECT_NAME} BookmarkManagerUI)
+target_link_libraries(${PROJECT_NAME} BookmarkService)
 target_link_libraries(${PROJECT_NAME} PlatformInputManager)
 target_link_libraries(${PROJECT_NAME} CertificateService)
 target_link_libraries(${PROJECT_NAME} FindOnPageUI)
@@ -87,26 +89,14 @@ install(TARGETS ${PROJECT_NAME}
 include(EDCCompile)
 
 #please do not add edc/ directory
-if (${PROFILE} MATCHES "mobile")
-set(edcFiles
-    InputPopup_mob.edc
-    NotificationPopup_mob.edc
-    Tooltip.edc
-    ViewManager.edc
-    TextPopup_mob.edc
-    ContentPopup_mob.edc
-    )
-else (${PROFILE} MATCHES "mobile")
 set(edcFiles
-    InputPopup.edc
     NotificationPopup.edc
-    Tooltip.edc
     ViewManager.edc
+    TextPopup.edc
     )
-endif (${PROFILE} MATCHES "mobile")
 
 foreach(edec ${edcFiles})
-    string(REGEX REPLACE "(_mob)?.edc" ".edj" target_name ${edec})
+    string(REPLACE ".edc" ".edj" target_name ${edec})
     EDJ_TARGET(${target_name}
                ${CMAKE_CURRENT_SOURCE_DIR}/edc/${edec}
                ${CMAKE_CURRENT_BINARY_DIR})
similarity index 55%
rename from services/SimpleUI/ContentPopup_mob.cpp
rename to services/SimpleUI/ContentPopup.cpp
index 09b7e34..1fd85fc 100755 (executable)
@@ -1,4 +1,4 @@
-#include "ContentPopup_mob.h"
+#include "ContentPopup.h"
 #include "ServiceManager.h"
 #include "AbstractMainWindow.h"
 #include "Tools/EflTools.h"
@@ -22,38 +22,33 @@ ContentPopup* ContentPopup::createPopup(Evas_Object* parent, const std::string&
 ContentPopup::~ContentPopup()
 {
     buttonClicked.disconnect_all_slots();
-    evas_object_del(m_layout);
+    for (auto& button : m_buttons) {
+        evas_object_smart_callback_del(button.m_evasObject, "clicked", _response_cb);
+        evas_object_del(button.m_evasObject);
+    }
+    evas_object_del(m_popup);
 }
 
 ContentPopup::ContentPopup(Evas_Object* parent)
     : m_parent(parent)
-    , m_layout(nullptr)
-    , m_buttons_box(nullptr)
     , m_content(nullptr)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("SimpleUI/ContentPopup.edj");
-    elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
     createLayout();
 }
 
 ContentPopup::ContentPopup(Evas_Object* parent,
                      const std::string& title)
     : m_parent(parent)
-    , m_layout(nullptr)
-    , m_buttons_box(nullptr)
+    , m_content(nullptr)
     , m_title(title)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("SimpleUI/ContentPopup.edj");
-    elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
+    m_popup = nullptr;
     createLayout();
 }
 
 void ContentPopup::show()
 {
-    evas_object_show(m_layout);
-    elm_object_part_content_set(m_parent, "popup_content", m_layout);
+    evas_object_show(m_popup);
     popupShown(this);
 }
 
@@ -91,29 +86,29 @@ void ContentPopup::_response_cb(void* data,
 void ContentPopup::setTitle(const std::string& title)
 {
     this->m_title = title;
-    elm_object_translatable_part_text_set(m_layout, "title_text", m_title.c_str());
+    elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
 }
 
 void ContentPopup::setContent(Evas_Object* content)
 {
     m_content = content;
-    elm_object_content_set(m_scroller, content);
+    elm_object_content_set(m_popup, m_content);
 }
 
 void ContentPopup::addButton(const PopupButtons& button, bool dismissOnClick)
 {
-    auto btn = elm_button_add(m_buttons_box);
+    auto btn = elm_button_add(m_popup);
+    elm_object_style_set(btn, "bottom");
+    evas_object_size_hint_max_set(btn, MAX_BUTTON_SIZE, MAX_BUTTON_SIZE);
     m_buttons.push_back(Button(button, dismissOnClick, btn));
-    elm_object_style_set(btn, "text-popup-button");
     evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    elm_object_part_text_set(btn, "elm.text", _(buttonsTranslations[button].c_str()));
-    elm_box_pack_end(m_buttons_box, btn);
+    elm_object_translatable_text_set(btn, _(buttonsTranslations[button].c_str()));
     evas_object_smart_callback_add(btn, "clicked", _response_cb, (void*) this);
 
+    auto buttonString = std::string("button") + std::to_string(m_buttons.size());
+    elm_object_part_content_set(m_popup, buttonString.c_str(), btn);
     evas_object_show(btn);
-    if (m_buttons.size() > 1)      // separator for more buttons than one
-        elm_object_signal_emit(btn, "visible", "ui");
 }
 
 void ContentPopup::createLayout()
@@ -121,24 +116,12 @@ void ContentPopup::createLayout()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(m_parent);
 
-    m_layout = elm_layout_add(m_parent);
-    elm_object_tree_focus_allow_set(m_layout, EINA_FALSE);
-    elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "text_popup_layout");
-    evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, 0);
-    evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    elm_object_translatable_part_text_set(m_layout, "title_text", m_title.c_str());
-    evas_object_event_callback_add(m_layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
-
-    m_buttons_box = elm_box_add(m_layout);
-    elm_box_horizontal_set(m_buttons_box, EINA_TRUE);
-    evas_object_size_hint_weight_set(m_buttons_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-    evas_object_size_hint_align_set(m_buttons_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    evas_object_show(m_buttons_box);
-    elm_object_part_content_set(m_layout, "buttons_swallow", m_buttons_box);
-
-    m_scroller = elm_scroller_add(m_layout);
-    elm_object_part_content_set(m_layout, "content_swallow", m_scroller);
-    evas_object_show(m_scroller);
+    m_popup = elm_popup_add(m_parent);
+    elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+    evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+    evas_object_event_callback_add(m_popup, EVAS_CALLBACK_RESIZE, _layout_resize_cb, this);
+    evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
 }
 
 void ContentPopup::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj*/, void* /*event_info*/)
@@ -147,12 +130,15 @@ void ContentPopup::_layout_resize_cb(void* data, Evas* /*e*/, Evas_Object* /*obj
 
     auto self = static_cast<ContentPopup*>(data);
     int w;
-    evas_object_geometry_get(self->m_layout, NULL, NULL, &w, NULL);
+    evas_object_geometry_get(self->m_popup, NULL, NULL, &w, NULL);
     w -= 2 * Z3_SCALE_SIZE(MARGIN);
     elm_label_wrap_width_set(self->m_content, w);
 }
 
-
+void ContentPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+    auto self = static_cast<ContentPopup*>(data);
+    self->dismiss();
+}
 }
-
 }
similarity index 82%
rename from services/SimpleUI/ContentPopup_mob.h
rename to services/SimpleUI/ContentPopup.h
index f220fbb..adebf8b 100755 (executable)
@@ -31,6 +31,14 @@ namespace tizen_browser
 namespace base_ui
 {
 
+struct PopupData {
+    virtual ~PopupData() {};
+};
+
+struct CertificatePopupData : public PopupData {
+    basic_webengine::CertificateConfirmationPtr cert;
+};
+
 class ContentPopup : public interfaces::AbstractPopup
 {
 public:
@@ -47,17 +55,19 @@ public:
     void addButton(const PopupButtons& button, bool dismissOnClick = true);
     boost::signals2::signal<void (PopupButtons)> buttonClicked;
     boost::signals2::signal<bool ()> isLandscape;
+    boost::signals2::signal<void (const std::string&, const bool&)> setDBBoolParamValue;
 
     ~ContentPopup();
 
-    Evas_Object* getMainLayout() { return m_scroller; }
+    Evas_Object* getMainLayout() { return m_popup; }
 private:
-    ContentPopup(Evas_Object* parent);
+    explicit ContentPopup(Evas_Object* parent);
     ContentPopup(Evas_Object* parent, const std::string& title);
     void createLayout();
 
     static void _layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
     static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+    static void _dismiss_cb(void* data, Evas_Object* obj, void*);
 
     struct Button {
         Button(PopupButtons type, bool dismissOnClick, Evas_Object* object)
@@ -71,15 +81,14 @@ private:
     };
 
     Evas_Object* m_parent;
-    Evas_Object* m_layout;
-    Evas_Object* m_buttons_box;
-    Evas_Object* m_scroller;
+    Evas_Object* m_popup;
     Evas_Object* m_content;
     std::vector<Button> m_buttons;
     std::string m_title;
     std::string m_message;
     std::string m_edjFilePath;
     static const int MARGIN = 44;
+    static const int MAX_BUTTON_SIZE = 496;
 };
 
 }
diff --git a/services/SimpleUI/CustomPopup.cpp b/services/SimpleUI/CustomPopup.cpp
deleted file mode 100755 (executable)
index 2dbf838..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#include "CustomPopup.h"
-#include "BrowserLogger.h"
-
-CustomPopup::CustomPopup(Evas_Object* main_layout) :
-    m_popup(NULL),
-    m_content(NULL),
-    m_mainLayout(main_layout)
-{
-
-}
-
-CustomPopup::CustomPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char* title, char* okButtonText, char* cancelButtonText) :
-    m_popup(NULL),
-    m_mainLayout(main_layout),
-    m_content(content),
-    m_message(message),
-    m_title(title),
-    m_okButtonText(okButtonText),
-    m_cancelButtonText(cancelButtonText)
-{
-
-}
-
-void CustomPopup::setTitle(const std::string& title)
-{
-    m_title = title;
-}
-
-void CustomPopup::setMessage(const std::string& message)
-{
-    m_message = message;
-}
-
-void CustomPopup::setContent(Evas_Object* content)
-{
-    m_content = content;
-}
-
-void CustomPopup::setOkButtonText(const std::string& okButtonText)
-{
-    m_okButtonText = okButtonText;
-}
-
-void CustomPopup::setCancelButtonText(const std::string& cancelButtonText)
-{
-    m_cancelButtonText = cancelButtonText;
-}
-
-void CustomPopup::show()
-{
-    BROWSER_LOGD("[%s],", __func__);
-    std::string edjePath = std::string(EDJE_DIR);
-    edjePath.append("SimpleUI/CustomPopup.edj");
-    elm_theme_extension_add(0, edjePath.c_str());
-    m_popup = elm_layout_add(m_mainLayout);
-    if(m_content)
-        elm_layout_file_set(m_popup, edjePath.c_str(), "own_popup_long");
-    else
-        elm_layout_file_set(m_popup, edjePath.c_str(), "own_popup");
-    BROWSER_LOGI("PATH: %s", edjePath.c_str());
-    elm_object_part_text_set(m_popup, "title_text", m_title.c_str());
-
-    Evas_Object *buttonsBox = elm_box_add(m_popup);
-    elm_box_horizontal_set(buttonsBox, EINA_TRUE);
-
-    if (!m_okButtonText.empty())
-    {
-        BROWSER_LOGD("Button1, %s", edjePath.c_str());
-        Evas_Object *btn1 = elm_button_add(buttonsBox);
-        evas_object_size_hint_weight_set(btn1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-        evas_object_size_hint_align_set(btn1, 0.5, 0.5);
-        elm_object_style_set(btn1, "standard_button");
-        elm_object_part_text_set(btn1, "elm.text", m_okButtonText.c_str());
-        elm_box_pack_end(buttonsBox, btn1);
-        evas_object_smart_callback_add(btn1, "clicked", popup_ok_cb, (void*)this);
-        evas_object_show(btn1);
-    }
-
-    if (!m_cancelButtonText.empty())
-    {
-        BROWSER_LOGD("Button2");
-        Evas_Object *btn2 = elm_button_add(buttonsBox);
-        evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-        evas_object_size_hint_align_set(btn2, 0.5, 0.5);
-        elm_object_style_set(btn2, "standard_button");
-        elm_object_part_text_set(btn2, "elm.text", m_cancelButtonText.c_str());
-        elm_box_pack_end(buttonsBox, btn2);
-        evas_object_smart_callback_add(btn2, "clicked", popup_cancel_cb, (void*)this);
-        evas_object_show(btn2);
-    }
-
-    if(!m_message.empty())
-        elm_object_part_text_set(m_popup, "elm.text", m_message.c_str());
-
-    evas_object_show(buttonsBox);
-    elm_object_part_content_set(m_popup, "buttons", buttonsBox);
-    elm_object_part_content_set(m_popup, "content", m_content);
-    elm_object_part_content_set(m_mainLayout, "popup", m_popup);
-
-    elm_object_signal_emit(m_mainLayout, "elm,state,show", "elm");
-}
-
-void CustomPopup::hide()
-{
-    elm_object_signal_emit(m_mainLayout, "elm,state,hide", "elm");
-}
-
-void CustomPopup::popup_ok_cb(void *data, Evas_Object *btn, void*)
-{
-    BROWSER_LOGD("[%s],", __func__);
-    CustomPopup *ownPopup = static_cast<CustomPopup*>(data);
-    ownPopup->on_ok(ownPopup->m_content);
-}
-void CustomPopup::popup_cancel_cb(void *data, Evas_Object *btn, void*)
-{
-    BROWSER_LOGD("[%s],", __func__);
-    CustomPopup *ownPopup = static_cast<CustomPopup*>(data);
-    ownPopup->on_cancel(ownPopup->m_content);
-}
-
diff --git a/services/SimpleUI/CustomPopup.h b/services/SimpleUI/CustomPopup.h
deleted file mode 100755 (executable)
index e9f518c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef CUSTOMPOPUP_H
-#define CUSTOMPOPUP_H
-
-#include <Elementary.h>
-#include <boost/signals2.hpp>
-
-class CustomPopup{
-
-public:
-    CustomPopup(Evas_Object *main_layout);
-    CustomPopup(Evas_Object *main_layout, Evas_Object *content, const char *message, char *title, char* okButtonText, char* cancelButtonText);
-
-    /**
-     * Theese setters should be called before showing popup.
-     */
-    void setContent(Evas_Object *content);
-    void setMessage(const std::string &message);
-    void setTitle(const std::string &title);
-    void setOkButtonText(const std::string &okButtonText);
-    void setCancelButtonText(const std::string &cancelButtonText);
-
-    void show();
-    void hide();
-    boost::signals2::signal<void (Evas_Object *)> on_ok;
-    boost::signals2::signal<void (Evas_Object *)> on_cancel;
-
-private:
-    static void popup_ok_cb(void *data, Evas_Object *btn, void*);
-    static void popup_cancel_cb(void *data, Evas_Object *btn, void*);
-    Evas_Object *m_popup;
-    Evas_Object *m_content;
-    std::string m_message, m_title, m_okButtonText, m_cancelButtonText;
-
-protected:
-    Evas_Object *m_mainLayout;
-};
-
-#endif
index 3515ce0..5645929 100755 (executable)
@@ -10,13 +10,12 @@ InputPopup::InputPopup() :
     m_icon(nullptr),
     m_button_left(nullptr),
     m_button_right(nullptr),
+    m_entry_layout(nullptr),
     m_entry(nullptr),
     m_box(nullptr),
-    m_label(nullptr)
+    m_label(nullptr),
+    m_limit(nullptr)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("SimpleUI/InputPopup.edj");
-    elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
     m_bad_words.push_back("");
 }
 
@@ -42,6 +41,8 @@ InputPopup::~InputPopup()
     }
     if (m_label)
         evas_object_del(m_label);
+    if (m_limit)
+        free(m_limit);
     if (m_box)
         evas_object_del(m_box);
     if (m_popup)
@@ -80,11 +81,6 @@ InputPopup* InputPopup::createPopup(
     return inputPopup;
 }
 
-void InputPopup::setInput(const std::string& input)
-{
-    m_input = input;
-}
-
 void InputPopup::setTitle(const std::string& title)
 {
     m_title = title;
@@ -118,7 +114,8 @@ void InputPopup::addBadWord(const std::string &word)
 void InputPopup::show()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    createLayout();
+    if (!m_popup)
+        createLayout();
     popupShown(this);
 
     elm_object_disabled_set(
@@ -150,6 +147,7 @@ void InputPopup::createLayout()
 
     elm_object_translatable_part_text_set(m_popup, "default", m_message.c_str());
     elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+    evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
 
     m_box = elm_box_add(m_popup);
     tools::EflTools::setExpandHints(m_box);
@@ -161,41 +159,42 @@ void InputPopup::createLayout()
         elm_entry_single_line_set(m_label, EINA_TRUE);
         elm_entry_scrollable_set(m_label, EINA_FALSE);
         elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
-        elm_object_text_set(m_label, elm_entry_utf8_to_markup(m_message.c_str()));
+        elm_object_translatable_text_set(m_label, elm_entry_utf8_to_markup(m_message.c_str()));
         elm_box_pack_end(m_box, m_label);
         evas_object_show(m_label);
     }
 
-    m_entry = elm_entry_add(m_box);
+    m_entry_layout = elm_layout_add(m_box);
+    elm_layout_theme_set(m_entry_layout, "layout", "editfield", "singleline");
+    evas_object_size_hint_weight_set(m_entry_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_entry_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+    m_entry = elm_entry_add(m_entry_layout);
     tools::EflTools::setExpandHints(m_entry);
+    m_limit = tools::EflTools::setEntryLimit(m_entry);
     elm_entry_single_line_set(m_entry, EINA_TRUE);
     elm_entry_scrollable_set(m_entry, EINA_TRUE);
-    elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
-    elm_box_pack_end(m_box, m_entry);
-
-    m_icon = elm_icon_add(m_entry);
-    elm_icon_standard_set(m_icon, "close");
-    evas_object_size_hint_min_set(
-        m_icon,
-        ELM_SCALE_SIZE(40),
-        ELM_SCALE_SIZE(40));
-    evas_object_size_hint_max_set(
-        m_icon,
-        ELM_SCALE_SIZE(40),
-        ELM_SCALE_SIZE(40));
-    elm_object_part_content_set(m_entry, "end", m_icon);
-
-    elm_object_part_text_set(m_entry, "elm.text", elm_entry_utf8_to_markup(m_input.c_str()));
-    elm_object_part_text_set(m_entry, "elm.guide", elm_entry_utf8_to_markup(m_tip.c_str()));
+    elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_URL);
+    elm_object_part_content_set(m_entry_layout, "elm.swallow.content", m_entry);
+
+    Evas_Object* m_icon = elm_button_add(m_entry_layout);
+    elm_object_style_set(m_icon, "editfield_clear");
+    elm_object_focus_allow_set(m_icon, EINA_FALSE);
+    elm_object_part_content_set(m_entry_layout, "elm.swallow.button", m_icon);
+
+    elm_box_pack_end(m_box, m_entry_layout);
+
+    elm_object_translatable_part_text_set(m_entry, "elm.text", elm_entry_utf8_to_markup(m_input.c_str()));
+    elm_object_translatable_part_text_set(m_entry, "elm.guide", elm_entry_utf8_to_markup(m_tip.c_str()));
 
     m_button_left = elm_button_add(m_popup);
     tools::EflTools::setExpandHints(m_button_left);
-    elm_object_text_set(m_button_left, m_cancel_button_text.c_str());
+    elm_object_translatable_text_set(m_button_left, m_cancel_button_text.c_str());
     elm_object_part_content_set(m_popup, "button1", m_button_left);
 
     m_button_right = elm_button_add(m_popup);
     tools::EflTools::setExpandHints(m_button_right);
-    elm_object_text_set(m_button_right, m_ok_button_text.c_str());
+    elm_object_translatable_text_set(m_button_right, m_ok_button_text.c_str());
     elm_object_part_content_set(m_popup, "button2", m_button_right);
 
     evas_object_smart_callback_add(m_entry, "changed,user", _entry_changed, this);
@@ -204,6 +203,7 @@ void InputPopup::createLayout()
     evas_object_smart_callback_add(m_button_right, "clicked", _right_button_clicked, this);
 
     evas_object_show(m_box);
+    evas_object_show(m_entry_layout);
     evas_object_show(m_icon);
     evas_object_show(m_entry);
     evas_object_show(m_button_left);
@@ -220,12 +220,17 @@ void InputPopup::_entry_changed(void* data, Evas_Object *, void *)
             elm_entry_markup_to_utf8(
                 elm_object_part_text_get(inputPopup->m_entry, "elm.text"));
 
-        elm_object_disabled_set(
-            inputPopup->m_button_right,
+        elm_object_disabled_set(inputPopup->m_button_right,
+            text.find_first_not_of(" ") == std::string::npos ||
             std::find(
                 inputPopup->m_bad_words.begin(),
                 inputPopup->m_bad_words.end(),
                 text) != inputPopup->m_bad_words.end());
+
+        if (elm_entry_is_empty(inputPopup->m_entry))
+            elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,hide,button", "");
+        else
+            elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,show,button", "");
     } else
         BROWSER_LOGD("data is null ");
 }
@@ -235,8 +240,9 @@ void InputPopup::_input_cancel_clicked(void* data, Evas_Object*, void *)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         auto inputPopup = static_cast<InputPopup*>(data);
-        elm_object_part_text_set(inputPopup->m_entry, "elm.text", "");
+        elm_object_translatable_part_text_set(inputPopup->m_entry, "elm.text", "");
         elm_object_disabled_set(inputPopup->m_button_right, EINA_TRUE);
+        elm_object_signal_emit(inputPopup->m_entry_layout, "elm,action,hide,button", "");
     } else
         BROWSER_LOGD("data is null ");
 }
@@ -264,5 +270,11 @@ void InputPopup::_left_button_clicked(void* data, Evas_Object *, void*)
         BROWSER_LOGD("data is null ");
 }
 
+void InputPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+    auto self = static_cast<InputPopup*>(data);
+    self->dismiss();
+}
+
 }
 }
index c7275e6..20fa481 100755 (executable)
@@ -39,6 +39,9 @@ class InputPopup : public interfaces::AbstractPopup
 {
 
 public:
+    InputPopup(const InputPopup&) = delete;
+    InputPopup& operator=(const InputPopup&) = delete;
+
     static InputPopup* createPopup(Evas_Object *parent);
     static InputPopup* createPopup(
         Evas_Object *parent,
@@ -56,7 +59,6 @@ public:
 #endif
 
     void setContent(Evas_Object *content);
-    void setInput(const std::string &input);
     void setTitle(const std::string &title);
     void setMessage(const std::string &message);
     void setTip(const std::string& tip);
@@ -71,20 +73,24 @@ private:
     ~InputPopup();
     void createLayout();
 
-    std::string m_edjFilePath;
     static void _right_button_clicked(void *data, Evas_Object *btn, void*);
     static void _left_button_clicked(void *data, Evas_Object *btn, void*);
     static void _entry_changed(void * data, Evas_Object *, void*);
     static void _input_cancel_clicked(void * data, Evas_Object *, void *);
+    static void _dismiss_cb(void* data, Evas_Object* obj, void*);
 
     Evas_Object *m_parent;
     Evas_Object *m_popup;
     Evas_Object *m_icon;
     Evas_Object *m_button_left;
     Evas_Object *m_button_right;
+    Evas_Object *m_entry_layout;
     Evas_Object *m_entry;
     Evas_Object *m_box;
     Evas_Object *m_label;
+
+    Elm_Entry_Filter_Limit_Size *m_limit;
+
     std::string m_input;
     std::string m_title;
     std::string m_message;
index 6dd9841..914b71e 100755 (executable)
@@ -29,13 +29,12 @@ namespace tizen_browser {
 namespace base_ui {
 
 NotificationPopup::NotificationPopup()
-    : m_parent(nullptr)
+    : edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/NotificationPopup.edj"))
+    , m_parent(nullptr)
     , m_layout(nullptr)
     , m_progress(nullptr)
     , m_timer(nullptr)
 {
-    edjFilePath = EDJE_DIR;
-    edjFilePath.append("SimpleUI/NotificationPopup.edj");
     elm_theme_extension_add(nullptr, edjFilePath.c_str());
 }
 
index 1ab6403..8ad3e54 100755 (executable)
 #include "ProgressiveWebApp.h"
 
 #include "BrowserLogger.h"
+#include <curl/curl.h>
 
 namespace tizen_browser {
 namespace base_ui {
 
 ProgressiveWebApp::ProgressiveWebApp()
-    : m_pwaInfoStruct()
+    : m_active(false)
+    , m_pwaInfoStruct()
     , m_uriPartsMap()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -35,7 +37,13 @@ ProgressiveWebApp::~ProgressiveWebApp()
 
 void ProgressiveWebApp::preparePWAParameters(const std::string &uri)
 {
-    parse_uri(uri);
+    CURL* curl = curl_easy_init();
+    char* text = curl_easy_unescape(curl, uri.c_str(), uri.length(), nullptr);
+    if (text) {
+        parse_uri(std::string(text));
+        curl_free(text);
+    }
+    curl_easy_cleanup(curl);
     fillPWAstruct(m_uriPartsMap);
 }
 
@@ -49,7 +57,7 @@ void ProgressiveWebApp::parse_uri(const std::string& uri)
         prevpos = pos;
         pos = uri.find("pwa_", pos+1);
         std::string tmp = uri.substr(prevpos, pos-prevpos-1);
-        std::string::size_type delimiter = tmp.find(":");
+        std::string::size_type delimiter = tmp.find("=");
         std::string first = tmp.substr(0, delimiter);
         std::string second = tmp.substr(delimiter+1, tmp.length());
         m_uriPartsMap[first] = second;
@@ -75,6 +83,9 @@ void ProgressiveWebApp::fillPWAstruct(const std::map<std::string, std::string> &
     it = pwaParametersMap.find("pwa_shortName");
     if (it != pwaParametersMap.end())
         m_pwaInfoStruct.shortName = it->second;
+    it = pwaParametersMap.find("pwa_icon_src");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.icon = it->second;
     it = pwaParametersMap.find("pwa_orientation");
     if (it != pwaParametersMap.end())
         m_pwaInfoStruct.orientation = std::stoi(it->second);
@@ -83,11 +94,51 @@ void ProgressiveWebApp::fillPWAstruct(const std::map<std::string, std::string> &
         m_pwaInfoStruct.displayMode = std::stoi(it->second);
     it = pwaParametersMap.find("pwa_themeColor");
     if (it != pwaParametersMap.end())
-        m_pwaInfoStruct.themeColor = std::stol(it->second);
+        m_pwaInfoStruct.themeColor = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_theme_r");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.themeR = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_theme_g");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.themeG = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_theme_b");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.themeB = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_theme_a");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.themeA = std::stoi(it->second);
     it = pwaParametersMap.find("pwa_backgroundColor");
     if (it != pwaParametersMap.end())
-        m_pwaInfoStruct.backgroundColor = std::stol(it->second);
+        m_pwaInfoStruct.backgroundColor = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_bg_r");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.backgroundR = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_bg_g");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.backgroundG = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_bg_b");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.backgroundB = std::stoi(it->second);
+    it = pwaParametersMap.find("pwa_bg_a");
+    if (it != pwaParametersMap.end())
+        m_pwaInfoStruct.backgroundA = std::stoi(it->second);
+}
+
+std::string ProgressiveWebApp::preparePWA(const std::string& url)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::string startUrl;
+    std::string prefix("multi-instance-shortcut://tizen.org/shortcut/multi-instance?");
+    if (!url.compare(0, prefix.size(), prefix)) {
+        preparePWAParameters(url);
+        startUrl = m_pwaInfoStruct.uri;
+        if (startUrl.empty())
+            return startUrl;
+        m_active = true;
+        BROWSER_LOGD("[%s:%d] PWA is Active", __PRETTY_FUNCTION__, __LINE__);
+    }
+    return startUrl;
 }
 
-}   // namespace tizen_browser
 }   // namespace base_ui
+}   // namespace tizen_browser
index b19828e..bd7969e 100755 (executable)
@@ -30,10 +30,19 @@ struct pwaInfo {
     std::string     uri;
     std::string     name;
     std::string     shortName;
+    std::string     icon;
     int             orientation; // needs to portrait-primary, portrait-secondary, landscape-primary, landscape-secondary.
     int             displayMode; // needs to fullscreen, standalone, minimal-ui, browser, and so on.
-    long            themeColor;
-    long            backgroundColor;
+    int             themeColor;
+    int             themeR;
+    int             themeG;
+    int             themeB;
+    int             themeA;
+    int             backgroundColor;
+    int             backgroundR;
+    int             backgroundG;
+    int             backgroundB;
+    int             backgroundA;
 };
 
 class ProgressiveWebApp
@@ -42,18 +51,21 @@ public:
     ProgressiveWebApp();
     ~ProgressiveWebApp();
     void preparePWAParameters(const std::string& uri);
-    pwaInfo getPWAinfo() {return m_pwaInfoStruct;}
+    pwaInfo getPWAinfo() const {return m_pwaInfoStruct;}
+    bool isActive() const { return m_active; }
+    std::string preparePWA(const std::string& url);
 
 private:
     void parse_uri(const std::string& uri);
     void fillPWAstruct(const std::map<std::string, std::string> &pwaParametersMap);
 
+    bool m_active;
     pwaInfo m_pwaInfoStruct;
     std::map<std::string, std::string> m_uriPartsMap;
 };
 
 
-}   // namespace tizen_browser
 }   // namespace base_ui
+}   // namespace tizen_browser
 
 #endif // PROGRESSIVEWEBAPP_H
index bb49097..242b7cc 100755 (executable)
@@ -10,27 +10,27 @@ namespace base_ui
 std::map<RadioButtons, std::string> RadioPopup::createTranslations()
 {
     std::map<RadioButtons, std::string> m;
-    m[RadioButtons::GOOGLE]  = Translations::Google;
-    m[RadioButtons::YAHOO]   = Translations::Yahoo;
-    m[RadioButtons::BING]    = Translations::Bing;
+    m[RadioButtons::GOOGLE]  = Translations::instance().Google;
+    m[RadioButtons::YAHOO]   = Translations::instance().Yahoo;
+    m[RadioButtons::BING]    = Translations::instance().Bing;
     // TODO Translations
-    m[RadioButtons::DEVICE]  = Translations::Device;
-    m[RadioButtons::SD_CARD] = Translations::SDCard;
+    m[RadioButtons::DEVICE]  = Translations::instance().Device;
+    m[RadioButtons::SD_CARD] = Translations::instance().SDCard;
 
     return m;
 }
 
 RadioButtons RadioPopup::translateButtonState(const std::string& name)
 {
-    if (!name.compare(Translations::Google))
+    if (!name.compare(Translations::instance().Google))
         return RadioButtons::GOOGLE;
-    else if(!name.compare(Translations::Yahoo))
+    else if(!name.compare(Translations::instance().Yahoo))
         return RadioButtons::YAHOO;
-    else if(!name.compare(Translations::Bing))
+    else if(!name.compare(Translations::instance().Bing))
         return RadioButtons::BING;
-    else if(!name.compare(Translations::Device))
+    else if(!name.compare(Translations::instance().Device))
         return RadioButtons::DEVICE;
-    else if(!name.compare(Translations::SDCard))
+    else if(!name.compare(Translations::instance().SDCard))
         return RadioButtons::SD_CARD;
     else
         return RadioButtons::NONE;
@@ -54,7 +54,7 @@ RadioPopup::RadioPopup(Evas_Object* parent)
     m_popup = elm_popup_add(m_parent);
     elm_popup_align_set(m_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
     evas_object_size_hint_weight_set(m_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
+    evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
     m_box = elm_box_add(m_popup);
     elm_object_focus_set(m_box, EINA_FALSE);
     evas_object_size_hint_weight_set(m_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -147,6 +147,12 @@ void RadioPopup::_response_cb(void* data, Evas_Object* obj, void*)
     self->dismiss();
 }
 
+void RadioPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+    auto self = static_cast<RadioPopup*>(data);
+    self->dismiss();
+}
+
 void RadioPopup::setTitle(const std::string& title)
 {
     m_title = title;
index 12605d3..bc0f975 100755 (executable)
@@ -56,9 +56,10 @@ public:
     ~RadioPopup();
 
 private:
-    RadioPopup(Evas_Object* parent);
+    explicit RadioPopup(Evas_Object* parent);
 
     static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+    static void _dismiss_cb(void* data, Evas_Object* obj, void*);
     Evas_Object* addRadioToGenlist(const RadioButtons& button, Evas_Object* obj);
 
     static std::map<RadioButtons, std::string> s_buttonsTranslations;
diff --git a/services/SimpleUI/SimplePopup.cpp b/services/SimpleUI/SimplePopup.cpp
deleted file mode 100755 (executable)
index 9e88961..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#include "SimplePopup.h"
-#include "ServiceManager.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-SimplePopup* SimplePopup::createPopup(Evas_Object* parent)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SimplePopup *raw_popup = new SimplePopup(parent);
-    return raw_popup;
-}
-
-SimplePopup* SimplePopup::createPopup(Evas_Object* parent, const std::string &title, const std::string &message)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SimplePopup *raw_popup = new SimplePopup(parent, title, message);
-    return raw_popup;
-}
-
-SimplePopup::~SimplePopup()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    for (std::map<Evas_Object*, PopupButtons>::iterator it = addedButtons.begin(); it != addedButtons.end(); ++it) {
-        evas_object_smart_callback_del(it->first, "clicked", _response_cb);
-    }
-    evas_object_del(content);
-    evas_object_del(popup);
-    buttonClicked.disconnect_all_slots();
-    popupDismissed.disconnect_all_slots();
-    popupShown.disconnect_all_slots();
-}
-
-SimplePopup::SimplePopup(Evas_Object* parent) : m_parent(parent), popup(nullptr), content(nullptr)
-{ }
-
-SimplePopup::SimplePopup(Evas_Object* parent, const std::string &title, const std::string &message)
-    : m_parent(parent)
-    , popup(nullptr)
-    , content(nullptr)
-    , title(title)
-    , message(message)
-{ }
-
-void SimplePopup::show()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    if (!popup) {
-       popup = elm_popup_add(m_parent);
-    }
-    evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-    if (content != nullptr)
-       elm_object_content_set(popup, content);
-    else
-       elm_object_text_set(popup, message.c_str());
-
-    elm_popup_content_text_wrap_type_set(popup, ELM_WRAP_WORD);
-    elm_object_part_text_set(popup, "title,text", title.c_str());
-
-    int buttonsCounter = 1;
-    for(std::list<PopupButtons>::iterator it = buttons.begin(); it != buttons.end(); ++it)
-    {
-        Evas_Object *btn1 = elm_button_add(popup);
-        elm_object_text_set(btn1, buttonsTranslations[*it].c_str());
-        std::string buttonName = "button";
-        buttonName.append(std::to_string(buttonsCounter));
-        elm_object_part_content_set(popup, buttonName.c_str(), btn1);
-        addedButtons[btn1] = *it;
-        evas_object_smart_callback_add(btn1, "clicked", _response_cb, this);
-        ++buttonsCounter;
-    }
-
-    evas_object_show(popup);
-    popupShown(this);
-}
-
-void SimplePopup::dismiss()
-{
-    popupDismissed(this);
-}
-
-void SimplePopup::onBackPressed()
-{
-    dismiss();
-}
-
-void SimplePopup::_response_cb(void *data, Evas_Object *obj, void */*event_info*/)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SimplePopup *self = static_cast<SimplePopup*>(data);
-    self->buttonClicked(self->addedButtons[obj], self->popupData);
-    self->dismiss();
-}
-
-void SimplePopup::setTitle(const std::string &title)
-{
-    this->title = title;
-}
-
-void SimplePopup::setMessage(const std::string &message)
-{
-    this->message = message;
-}
-
-void SimplePopup::setContent(Evas_Object* content)
-{
-    this->content = content;
-}
-
-void SimplePopup::setData(std::shared_ptr< PopupData > popupData)
-{
-    this->popupData = popupData;
-}
-
-void SimplePopup::addButton(PopupButtons buttonId)
-{
-    buttons.push_back(buttonId);
-}
-
-} // base_ui
-} // tizen_browser
diff --git a/services/SimpleUI/SimplePopup.h b/services/SimpleUI/SimplePopup.h
deleted file mode 100755 (executable)
index d19cd0f..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __SIMPLE_POPUP_H__
-#define __SIMPLE_POPUP_H__ 1
-
-#include <Evas.h>
-#include <Elementary.h>
-#include <string>
-#include <list>
-#include <memory>
-
-#include "AbstractPopup.h"
-#include "PopupButtons.h"
-#include "WebConfirmation.h"
-#include "DownloadControl/DownloadControl.h"
-
-namespace tizen_browser
-{
-namespace base_ui
-{
-
-struct PopupData {
-    virtual ~PopupData() {};
-};
-
-struct CertificatePopupData : public PopupData {
-    basic_webengine::CertificateConfirmationPtr cert;
-};
-
-struct EntryPopupData : public PopupData {
-    std::string text;
-    Evas_Object * entry;
-};
-
-class SimplePopup : public interfaces::AbstractPopup
-{
-public:
-    static SimplePopup* createPopup(Evas_Object* parent);
-    static SimplePopup* createPopup(Evas_Object* parent, const std::string &title, const std::string &message);
-
-    void show();
-    void dismiss();
-    void onBackPressed();
-#if PROFILE_MOBILE
-    void orientationChanged() {};
-#endif
-
-    void setTitle(const std::string &title);
-    void setMessage(const std::string &message);
-    void setContent(Evas_Object *content);
-    void setData(std::shared_ptr<PopupData> popupData);
-    void addButton(PopupButtons buttonId);
-
-    boost::signals2::signal<void (PopupButtons, std::shared_ptr<PopupData>)> buttonClicked;
-
-    ~SimplePopup();
-
-private:
-    SimplePopup(Evas_Object* parent);
-    SimplePopup(Evas_Object* parent, const std::string &title, const std::string &message);
-
-    Evas_Object *m_parent;
-    Evas_Object *popup;
-    Evas_Object *content;
-    std::string title;
-    std::string message;
-    std::list<PopupButtons> buttons;
-    static void _response_cb(void *data, Evas_Object *obj, void *event_info);
-    std::map<Evas_Object *, PopupButtons> addedButtons;
-    std::shared_ptr<PopupData> popupData;
-};
-
-}
-
-}
-
-#endif //__SIMPLE_POPUP_H__
index 36c12d2..15d4f96 100755 (executable)
 #include <Ecore.h>
 #include <Ecore_Wayland.h>
 #include <Edje.h>
-#include <Evas.h>
 #include <app.h>
-#include <thread>
-#include <future>
-#include <functional>
 #include <appcore-common.h>
+#include <cassert>
+#include <push-service.h>
+#include <app_context.h>
+#include <app_control_internal.h>
+#include <app_manager.h>
+#include <app_manager_extension.h>
+#include <notification.h>
+#include <notification_internal.h>
+
+#include "WebPageUI.h"
+#include "WebPageMin.h"
+#include "AbstractWebEngine.h"
+#include "TabOrigin.h"
+#include "HistoryUI.h"
+#include "FindOnPageUI.h"
+#include "SettingsUI.h"
+#include "SettingsMain.h"
+#include "SettingsHomePage.h"
+#include "SettingsManager.h"
+#include "TextPopup.h"
+#include "QuickAccess.h"
+#include "TabUI.h"
+#include "TabId.h"
+#include "HistoryService.h"
+#include "BookmarkFlowUI.h"
+#include "BookmarkManagerUI.h"
+#include "BookmarkService.h"
+#include "PlatformInputManager.h"
+#include "StorageService.h"
+#include "CertificateContents.h"
+#include "ProgressiveWebApp.h"
+#include "Action.h"
+#include "InputPopup.h"
+#include "ContentPopup.h"
+#include "WebConfirmation.h"
+#include "ViewManager.h"
+#include "MenuButton.h"
+#include "NaviframeWrapper.h"
+#include "SplashScreen.h"
 
 #include "Config.h"
 #include "app_i18n.h"
 #include "TabService.h"
 #include "BrowserLogger.h"
 #include "ServiceManager.h"
-#include "AbstractWebEngine.h"
-#include "TabId.h"
 #include "BrowserImage.h"
 #include "SimpleUI.h"
 #include "WebPageUIStatesManager.h"
 #include "HistoryItem.h"
 #include "boost/date_time/gregorian/gregorian.hpp"
 #include "boost/date_time/posix_time/posix_time.hpp"
-#include "UrlHistoryList/UrlHistoryList.h"
 #include "NotificationPopup.h"
-#include "ContentPopup_mob.h"
 #include "RadioPopup.h"
 #include "Tools/GeneralTools.h"
 #include "Tools/SnapshotType.h"
 #include "SettingsPrettySignalConnector.h"
 #include "net_connection.h"
+#include "DownloadControl/DownloadControl.h"
 
 namespace tizen_browser{
 namespace base_ui{
 
+using namespace config;
+
 EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui")
 
 const std::string HomePageURL = "about:home";
-const std::string ResetBrowserPopupMsg = "Do you really want to reset Browser?" \
-                                         " If you press Reset, delete all data" \
-                                         " and return to initial setting.";
 const int SCALE_FACTOR = 720;
+const std::string SimpleUI::TAB_LIMIT_DECISION = "tab_limit_decision";
 
 SimpleUI::SimpleUI()
     : AbstractMainWindow()
@@ -78,42 +110,43 @@ SimpleUI::SimpleUI()
     , m_tabUI()
     , m_initialised(false)
     , m_tabLimit(0)
-    , m_favoritesLimit(0)
+    , m_qaLimit(0)
     , m_wvIMEStatus(false)
-#if PWA
+    , m_main_window(nullptr)
+    , m_splash_screen()
     , m_pwa()
-    , m_alreadyOpenedPWA(false)
-#endif
     , m_manualRotation(false)
     , m_current_angle(0)
     , m_temp_angle(0)
+    , m_alreadyOpenedExecURL(false)
+    , m_languageChanged(false)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     elm_init(0, nullptr);
 
-    main_window = elm_win_util_standard_add("browserApp", "browserApp");
+    m_main_window = elm_win_util_standard_add("browserApp", "browserApp");
 
     int width;
-    elm_win_screen_size_get(main_window, nullptr, nullptr, &width, nullptr);
+    elm_win_screen_size_get(m_main_window, nullptr, nullptr, &width, nullptr);
     double config_scale_value = (double)(width)/SCALE_FACTOR;
-    config::Config::getInstance().set(
+    Config::getInstance().set(
             "scale", static_cast<double>(elm_config_scale_get()/config_scale_value));
-    m_tabLimit = boost::any_cast<int>(config::Config::getInstance().get("TAB_LIMIT"));
-    m_favoritesLimit = boost::any_cast<int>(config::Config::getInstance().get("FAVORITES_LIMIT"));
+    m_tabLimit = boost::any_cast<int>(Config::getInstance().get("TAB_LIMIT"));
+    m_qaLimit = boost::any_cast<int>(Config::getInstance().get("QUICKACCESS_LIMIT"));
 
-    elm_win_conformant_set(main_window, EINA_TRUE);
-    if (main_window == nullptr)
+    elm_win_conformant_set(m_main_window, EINA_TRUE);
+    if (m_main_window == nullptr)
         BROWSER_LOGE("Failed to create main window");
 
-    setMainWindow(main_window);
-    m_viewManager.init(main_window);
+    setMainWindow(m_main_window);
+    m_viewManager.init(m_main_window);
 
-    elm_win_resize_object_add(main_window, m_viewManager.getConformant());
-    evas_object_show(main_window);
+    elm_win_resize_object_add(m_main_window, m_viewManager.getConformant());
+    evas_object_show(m_main_window);
 
-    if (elm_win_wm_rotation_supported_get(main_window)) {
+    if (elm_win_wm_rotation_supported_get(m_main_window)) {
         rotationType(rotationLock::noLock);
-        evas_object_smart_callback_add(main_window, "wm,rotation,changed", __orientation_changed, this);
+        evas_object_smart_callback_add(m_main_window, "wm,rotation,changed", __orientation_changed, this);
         enableManualRotation(false);
     } else
         BROWSER_LOGW("[%s:%d] Device does not support rotation.", __PRETTY_FUNCTION__, __LINE__);
@@ -122,67 +155,47 @@ SimpleUI::SimpleUI()
     // determine if keyboard has been shown. I think it is possible to unify it with below callbacks.
     evas_object_smart_callback_add(m_viewManager.getConformant(), "virtualkeypad,state,on", onUrlIMEOpened, this);
     evas_object_smart_callback_add(m_viewManager.getConformant(), "virtualkeypad,state,off",onUrlIMEClosed, this);
-}
-
-SimpleUI::~SimpleUI() {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    evas_object_del(m_window.get());
-}
 
-void SimpleUI::suspend()
-{
-    m_webEngine->suspend();
+    m_splash_screen.init(m_main_window);
+    m_splash_screen.isLandscape.connect([this]{ return isLandscape(); });
+    m_splash_screen.updateManualRotation.connect(
+        [this]{ enableManualRotation(isManualRotation(m_viewManager.topOfStack())); });
 }
 
 void SimpleUI::resume()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_functionViewPrepare();
+    if (!m_pwa.isActive() && m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+        m_splash_screen.hide();
+    if (m_pwa.isActive())
+        m_webEngine->setFocus();
 #if DUMMY_BUTTON
-    m_webPageUI->createDummyButton();
+    else
+        m_webPageUI->createDummyButton();
 #endif
-    m_webEngine->resume();
+    if (m_pwa.isActive() ||
+        m_webPageUI->stateEquals(WPUState::MAIN_INCOGNITO_PAGE) ||
+        m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE))
+        m_webEngine->resume();
+    if (m_languageChanged) {
+        m_languageChanged = false;
+        m_webEngine->languageChanged();
+    }
     if (m_findOnPageUI && m_findOnPageUI->isVisible())
         m_findOnPageUI->show_ime();
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
-void SimpleUI::destroyUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_webEngine->destroyTabs();
-}
-
-std::string SimpleUI::edjePath(const std::string &file)
-{
-    return std::string(EDJE_DIR) + file;
-}
-
-std::shared_ptr<services::HistoryItemVector> SimpleUI::getMostVisitedItems()
-{
-    return m_historyService->getMostVisitedHistoryItems();
-}
-
-void SimpleUI::setMostVisitedFrequencyValue(
-    std::shared_ptr<services::HistoryItem> historyItem, int visitFrequency)
-{
-    m_historyService->setMostVisitedFrequency(historyItem->getId(), visitFrequency);
-}
-
-std::shared_ptr<services::HistoryItemVector> SimpleUI::getHistory()
-{
-    return m_historyService->getHistoryToday();
-}
-
 void SimpleUI::prepareServices()
 {
     loadUIServices();
     loadModelServices();
 
     auto futureModelSig =
-        std::async(std::launch::async, [this](){connectModelSignals();});
+        std::async(std::launch::async, [this]{ connectModelSignals(); });
     auto futureUISig
-        = std::async(std::launch::async, [this](){connectUISignals();});
+        = std::async(std::launch::async, [this]{ connectUISignals(); });
     futureModelSig.get();
     futureUISig.get();
 
@@ -190,122 +203,115 @@ void SimpleUI::prepareServices()
     initUIServices();
     initModelServices();
 }
-#if PWA
-std::string SimpleUI::preparePWA(const std::string& url)
-{
-    std::string startUrl;
-    if (!strncmp(url.c_str(), "browser_shortcut::", strlen("browser_shortcut::"))) {
-        BROWSER_LOGD("Progressive web app");
-        m_pwa.preparePWAParameters(url);
-        startUrl = m_pwa.getPWAinfo().uri;
-        if (startUrl.empty())
-            return std::string();
-        BROWSER_LOGD("Display mode: %d", m_pwa.getPWAinfo().displayMode);
-        m_webPageUI->setDisplayMode(
-            static_cast<WebPageUI::WebDisplayMode>(
-                m_pwa.getPWAinfo().displayMode));
 
-        if (m_pwa.getPWAinfo().orientation ==  WebPageUI::WebScreenOrientationLockPortrait)
-            rotationType(rotationLock::portrait);
-        else if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockLandscape)
-            rotationType(rotationLock::landscape);
-        return startUrl;
-    }
-    return std::string();
+void SimpleUI::preparePWAServices()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    m_webPageMin =
+        std::dynamic_pointer_cast<base_ui::WebPageMin, core::AbstractService>(
+            core::ServiceManager::getInstance().getService("org.tizen.browser.webpagemin", "libWebPageMin.so"));
+
+    m_webEngine =
+        std::dynamic_pointer_cast
+        <basic_webengine::AbstractWebEngine, core::AbstractService>(
+            core::ServiceManager::getInstance().getService("org.tizen.browser.webenginemin", "libWebEngineMin.so"));
+
+    m_platformInputManager =
+        std::dynamic_pointer_cast
+        <services::PlatformInputManager, core::AbstractService>(
+            core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager", "libPlatformInputManager.so"));
+
+    m_storageService = std::dynamic_pointer_cast
+        <services::StorageService, core::AbstractService>(
+            core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice", "libStorageService.so"));
+
+    connectPWASignals();
+
+    m_platformInputManager->init(m_window.get());
+    m_webPageMin->init(m_viewManager.getContent());
+    m_webEngine->init(m_webPageMin->getContent());
 }
-#endif
 
-int SimpleUI::exec(const std::string& _url, const std::string& _caller, const std::string& _operation)
+int SimpleUI::exec(const std::string& url, const std::string& caller, const std::string& operation)
 {
     BROWSER_LOGD(
-        "[%s] _url=%s, _caller=%s, _operation=%s, initialised=%d",
+        "[%s] url=%s, caller=%s, operation=%s, initialised=%d",
         __func__,
-        _url.c_str(),
-        _caller.c_str(),
-        _operation.c_str(),
+        url.c_str(),
+        caller.c_str(),
+        operation.c_str(),
         m_initialised);
-    std::string url = _url;
-    std::string operation = _operation;
-    m_caller = _caller;
+    std::string pwaUrl = m_pwa.preparePWA(url);
+
+    if (m_pwa.isActive()) {
+        if (m_pwa.getPWAinfo().orientation ==  WebPageUI::WebScreenOrientationLockPortrait)
+            rotationType(rotationLock::portrait);
+        else if (m_pwa.getPWAinfo().orientation == WebPageUI::WebScreenOrientationLockLandscape)
+            rotationType(rotationLock::landscape);
+    }
+    if (!m_initialised)
+        m_splash_screen.show(m_pwa);
     m_alreadyOpenedExecURL = false;
-    m_functionViewPrepare = [url, operation, this]() mutable {
+    m_functionViewPrepare = [=]() mutable {
         if (!m_initialised) {
-            if (m_window.get()) {
-                prepareServices();
+            if (m_pwa.isActive()) {                 // Progressive web app
+                preparePWAServices();
+                pushViewToStack(m_webPageMin);
+                m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
+            } else {
+                if (m_window.get()) {
+                    prepareServices();
 
-                //Push first view to stack.
-                pushViewToStack(m_webPageUI);
+                    //Push first view to stack.
+                    pushViewToStack(m_webPageUI);
 
-                // Register H/W back key callback
-                m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
-            }
+                    // Register H/W back key callback
+                    m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
+                }
 
-            if (url.empty()) {
                 BROWSER_LOGD("[%s]: restore last session", __func__);
                 switchViewToQuickAccess();
                 restoreLastSession();
             }
             m_initialised = true;
         }
-        std::string pwaUrl = std::string();
-#if PWA
-        // Progressive web app
-        pwaUrl = preparePWA(url);
-
-        if ((!pwaUrl.empty() && m_webEngine->getState() != basic_webengine::State::SECRET) ||
-            (pwaUrl.empty() && m_webEngine->getState() == basic_webengine::State::SECRET))
-            changeEngineState();
-
-        m_webPageUI->updateEngineStateUI();
-#endif
 
         if (!pwaUrl.empty() || (!url.empty() && !m_alreadyOpenedExecURL)) {
-            BROWSER_LOGD("[%s]: open new tab", __func__);
             std::string newUrl = url;
-            if (!operation.compare(APP_CONTROL_OPERATION_SEARCH)) {
+            if (!operation.compare(APP_CONTROL_OPERATION_SEARCH) && !m_pwa.isActive()) {
                 newUrl = m_webPageUI->getURIEntry().rewriteURI(url);
                 popStackTo(m_webPageUI);
             }
-            auto taburl = pwaUrl.empty() ? newUrl : pwaUrl;
-#if PWA
-            // Allow for only one instance of PWA
-            if (m_alreadyOpenedPWA)
-                m_webEngine->closeTab();
-            if (!pwaUrl.empty())
-                popStackTo(m_webPageUI);
-            m_alreadyOpenedPWA = !pwaUrl.empty();
-#endif
-
-            openNewTab(taburl);
+            if (m_splash_screen.isVisible()) {
+                auto taburl = pwaUrl.empty() ? newUrl : pwaUrl;
+                openNewTab(taburl);
+            }
             m_alreadyOpenedExecURL = true;
         }
     };
+
+    if (!operation.compare(APP_CONTROL_OPERATION_VIEW) ||
+        !operation.compare("libpush.operation.handle"))
+        resume();
     BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str());
     return 0;
 }
 
-#if PWA
 void SimpleUI::countCheckUrl()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    int id, ret = 0;
-    id = m_historyService->getHistoryId(m_webEngine->getURI());
+    bool chk = m_storageService->getPWAStorage().getPWACheck(m_webEngine->getURI());
 
-    if (id)
-        ret = m_historyService->getHistoryCnt(id);
+    if (!chk) {
+        int ret = m_historyService->getHistoryCnt(
+            m_historyService->getHistoryId(m_webEngine->getURI()));
 
-    if (ret == CONNECT_COUNT)
-        pwaPopupRequest();
-    else
-        BROWSER_LOGD("[%s:%d] url count : %d", __PRETTY_FUNCTION__, __LINE__, ret);
-}
-#endif
-
-void SimpleUI::faviconChanged(tools::BrowserImagePtr favicon)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (!m_webEngine->isLoading())
-        m_historyService->updateHistoryItemFavicon(m_webEngine->getURI(), favicon);
+        if (ret >= CONNECT_COUNT)
+            pwaPopupRequest();
+        else
+            BROWSER_LOGD("[%s:%d] url count : %d", __PRETTY_FUNCTION__, __LINE__, ret);
+    }
 }
 
 void SimpleUI::restoreLastSession()
@@ -329,39 +335,39 @@ void SimpleUI::loadUIServices()
 
     m_webPageUI =
         std::dynamic_pointer_cast<base_ui::WebPageUI, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.webpageui"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.webpageui", "libWebPageUI.so"));
 
     m_quickAccess =
         std::dynamic_pointer_cast<base_ui::QuickAccess, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.quickaccess"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.quickaccess", "libQuickAccess.so"));
 
     m_historyUI =
         std::dynamic_pointer_cast<base_ui::HistoryUI, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.historyui"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.historyui", "libHistoryUI.so"));
 
     m_tabUI =
         std::dynamic_pointer_cast<base_ui::TabUI, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.tabui"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.tabui", "libTabUI.so"));
 
     auto futureSettings(std::async(std::launch::async, [this](){
         m_settingsManager =
             std::dynamic_pointer_cast<SettingsManager, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui", "libSettingsUI.so"));
     }));
     auto futureBookmarkFlow(std::async(std::launch::async, [this](){
         m_bookmarkFlowUI =
             std::dynamic_pointer_cast<base_ui::BookmarkFlowUI, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkflowui"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkflowui", "libBookmarkFlowUI.so"));
     }));
     auto futureFindOnPage(std::async(std::launch::async, [this](){
         m_findOnPageUI =
             std::dynamic_pointer_cast<base_ui::FindOnPageUI, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.findonpageui"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.findonpageui", "libFindOnPageUI.so"));
     }));
     auto futureBookmarksMan(std::async(std::launch::async, [this](){
         m_bookmarkManagerUI =
             std::dynamic_pointer_cast<base_ui::BookmarkManagerUI, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui", "libBookmarkManagerUI.so"));
     }));
     futureSettings.get();
     futureBookmarkFlow.get();
@@ -376,37 +382,37 @@ void SimpleUI::loadModelServices()
     m_webEngine =
         std::dynamic_pointer_cast
         <basic_webengine::AbstractWebEngine, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
 
     m_historyService =
         std::dynamic_pointer_cast
         <services::HistoryService, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice", "libHistoryService.so"));
 
     m_platformInputManager =
         std::dynamic_pointer_cast
         <services::PlatformInputManager, core::AbstractService>(
-            core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager"));
+            core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager", "libPlatformInputManager.so"));
 
-    auto futureStorage(std::async(std::launch::async, [this](){
+    auto futureStorage(std::async(std::launch::async, [this]{
         m_storageService = std::dynamic_pointer_cast
             <services::StorageService, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.storageservice", "libStorageService.so"));
     }));
-    auto futureTab(std::async(std::launch::async, [this](){
+    auto futureTab(std::async(std::launch::async, [this]{
         m_tabService = std::dynamic_pointer_cast<
             services::TabService, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.tabservice"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.tabservice", "libTabService.so"));
     }));
-    auto futureFavourite(std::async(std::launch::async, [this](){
+    auto futureFavourite(std::async(std::launch::async, [this]{
         m_favoriteService = std::dynamic_pointer_cast
-            <interfaces::AbstractFavoriteService, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice"));
+            <services::BookmarkService, core::AbstractService>(
+                core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice", "libBookmarkService.so"));
     }));
-    auto futureCertificates(std::async(std::launch::async, [this](){
+    auto futureCertificates(std::async(std::launch::async, [this]{
         m_certificateContents = std::dynamic_pointer_cast
             <services::CertificateContents, core::AbstractService>(
-                core::ServiceManager::getInstance().getService("org.tizen.browser.certificateservice"));
+                core::ServiceManager::getInstance().getService("org.tizen.browser.certificateservice", "libCertificateService.so"));
     }));
     futureStorage.get();
     futureTab.get();
@@ -416,297 +422,582 @@ void SimpleUI::loadModelServices()
 
 void SimpleUI::connectWebPageSignals()
 {
-    M_ASSERT(m_webPageUI.get());
-    m_webPageUI->getURIEntry().uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1));
-    m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
-    m_webPageUI->backPage.connect(boost::bind(&basic_webengine::AbstractWebEngine::back, m_webEngine.get()));
-    m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::showTabUI, this));
-    m_webPageUI->showBookmarksUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
-        m_favoriteService->getRoot(), BookmarkManagerState::Default));
-    m_webPageUI->showHomePage.connect(boost::bind(&SimpleUI::showHomePage, this));
-    m_webPageUI->forwardPage.connect(boost::bind(&basic_webengine::AbstractWebEngine::forward, m_webEngine.get()));
-    m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
-    m_webPageUI->hideQuickAccess.connect(boost::bind(&QuickAccess::hideUI, m_quickAccess));
-    m_webPageUI->getQuickAccessEditUI()->requestQuickAccessGengrid.connect(
-        boost::bind(&QuickAccess::getQuickAccessGengrid, m_quickAccess.get()));
-    m_webPageUI->getQuickAccessEditUI()->requestMostVisitedGengrid.connect(
-        boost::bind(&QuickAccess::getMostVisitedGengrid, m_quickAccess.get()));
+    assert(m_webPageUI.get());
+    m_webPageUI->getURIEntry().uriChanged.connect(
+        [this](const auto& url) { this->filterURL(url); });
+    m_webPageUI->backPage.connect(
+        [this]{ this->switchViewToWebPage(); });
+    m_webPageUI->backPage.connect(
+        [this]{ m_webEngine->back(); });
+    m_webPageUI->showTabUI.connect(
+        [this]{ this->showTabUI(); });
+    m_webPageUI->showHomePage.connect(
+        [this]{ this->showHomePage(); });
+    m_webPageUI->forwardPage.connect(
+        [this]{ m_webEngine->forward(); });
+    m_webPageUI->showQuickAccess.connect(
+        [this]{ m_quickAccess->showUI(); });
+    m_webPageUI->hideQuickAccess.connect(
+        [this]{ m_quickAccess->hideUI(); });
+    m_webPageUI->getQuickAccessEditUI()->requestQuickAccessEditLayout.connect(
+        [this]{ return m_quickAccess->getQuickAccessEditLayout(); });
+    m_webPageUI->getQuickAccessEditUI()->requestMostVisitedEditLayout.connect(
+        [this]{ return m_quickAccess->getMostVisitedEditLayout(); });
     m_webPageUI->getQuickAccessEditUI()->requestQuickAccessState.connect(
-        boost::bind(&QuickAccess::getQuickAccessState, m_quickAccess.get()));
+        [this]{ return m_quickAccess->getQuickAccessState(); });
     m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(
-        boost::bind(&QuickAccess::editingFinished, m_quickAccess.get()));
-    m_webPageUI->getQuickAccessEditUI()->editingFinished.connect(
-        boost::bind(&WebPageUI::editingFinished, m_webPageUI.get()));
+        [this]{ m_quickAccess->editingFinished(); m_webPageUI->editingFinished(); });
     m_webPageUI->getQuickAccessEditUI()->deleteSelectedMostVisitedItems.connect(
-        boost::bind(&QuickAccess::deleteSelectedMostVisitedItems, m_quickAccess.get()));
+        [this]{ m_quickAccess->deleteSelectedMostVisitedItems(); });
+    m_webPageUI->getQuickAccessEditUI()->reorderQuickAccessItems.connect(
+        [this]{ m_quickAccess->reorderQuickAccessItems(); });
     m_webPageUI->getQuickAccessEditUI()->closeUI.connect(
-        boost::bind(&SimpleUI::popTheStack, this));
-    m_webPageUI->focusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::setFocus, m_webEngine.get()));
-    m_webPageUI->unfocusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::clearFocus, m_webEngine.get()));
-    m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
-        m_favoriteService->getRoot(), BookmarkManagerState::Default));
-    m_webPageUI->updateManualRotation.connect([this](){enableManualRotation(isManualRotation(m_viewManager.topOfStack()));});
-    m_webPageUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
-    m_webPageUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this));
-    m_webPageUI->isQuickAccess.connect(boost::bind(&SimpleUI::checkQuickAccess, this));
-    m_webPageUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this));
-    m_webPageUI->showBookmarkFlowUI.connect(boost::bind(&SimpleUI::showBookmarkFlowUI, this));
-    m_webPageUI->showFindOnPageUI.connect(boost::bind(&SimpleUI::showFindOnPageUI, this, std::string()));
-    m_webPageUI->isFindOnPageVisible.connect(boost::bind(&FindOnPageUI::isVisible, m_findOnPageUI.get()));
-    m_webPageUI->showSettingsUI.connect(boost::bind(&SettingsManager::showSettingsBaseUI, m_settingsManager.get()));
-    m_webPageUI->addNewTab.connect(boost::bind(&SimpleUI::newTabClicked, this));
-    m_webPageUI->getURIEntry().mobileEntryFocused.connect(boost::bind(&WebPageUI::mobileEntryFocused, m_webPageUI));
-    m_webPageUI->getURIEntry().mobileEntryUnfocused.connect(boost::bind(&WebPageUI::mobileEntryUnfocused, m_webPageUI));
-    m_webPageUI->qaOrientationChanged.connect(boost::bind(&QuickAccess::orientationChanged, m_quickAccess));
-    m_webPageUI->getURIEntry().secureIconClicked.connect(boost::bind(&SimpleUI::showCertificatePopup, this));
-    m_webPageUI->getURIEntry().isValidCert.connect(boost::bind(&services::CertificateContents::isValidCertificate, m_certificateContents, _1));
+        [this]{ this->popTheStack(); });
+    m_webPageUI->focusWebView.connect(
+        [this]{ m_webEngine->setFocus(); });
+    m_webPageUI->unfocusWebView.connect(
+        [this]{ m_webEngine->clearFocus(); });
+    m_webPageUI->showBookmarksUI.connect(
+        [this]{ showBookmarkManagerUI(m_favoriteService->getRoot(), BookmarkManagerState::Default); });
+    m_webPageUI->updateManualRotation.connect(
+        [this]{ enableManualRotation(isManualRotation(m_viewManager.topOfStack())); });
+    m_webPageUI->getWindow.connect(
+        [this]{ return this->getMainWindow(); });
+    m_webPageUI->isBookmark.connect(
+        [this]{ return this->checkBookmark(); });
+    m_webPageUI->isQuickAccess.connect(
+        [this]{ return m_storageService->getQuickAccessStorage().quickAccessItemExist(m_webEngine->getURI()); });
+    m_webPageUI->getMostVisitedCount.connect(
+        [this]{ return m_quickAccess->getMostVisitedItemsCount(); });
+    m_webPageUI->deleteBookmark.connect(
+        [this]{ this->deleteBookmark(); });
+    m_webPageUI->showBookmarkFlowUI.connect(
+        [this]{ this->showBookmarkFlowUI(); });
+    m_webPageUI->showFindOnPageUI.connect(
+        [this]{ this->showFindOnPageUI(std::string()); });
+    m_webPageUI->isFindOnPageVisible.connect(
+        [this]{ return m_findOnPageUI->isVisible(); });
+    m_webPageUI->showSettingsUI.connect(
+        [this]{ m_settingsManager->showSettingsBaseUI(); });
+    m_webPageUI->addNewTab.connect(
+        [this]{ this->newTabClicked(); });
+    m_webPageUI->getURIEntry().mobileEntryFocused.connect(
+        [this]{ m_webPageUI->mobileEntryFocused(); });
+    m_webPageUI->getURIEntry().mobileEntryUnfocused.connect(
+        [this]{ m_webPageUI->mobileEntryUnfocused(); });
+    m_webPageUI->qaOrientationChanged.connect(
+        [this]{ m_quickAccess->orientationChanged(); });
+    m_webPageUI->getURIEntry().secureIconClicked.connect(
+        [this]{ this->showCertificatePopup(); });
+    m_webPageUI->getURIEntry().isValidCert.connect(
+        [this](const auto& url){ return m_certificateContents->isValidCertificate(url); });
     m_webPageUI->getURIEntry().reloadPage.connect(
-        boost::bind(&basic_webengine::AbstractWebEngine::reload, m_webEngine.get()));
+        [this]{ m_webEngine->reload(); });
     m_webPageUI->getURIEntry().stopLoadingPage.connect(
-        boost::bind(&basic_webengine::AbstractWebEngine::stopLoading, m_webEngine.get()));
-    m_webPageUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
-    m_webPageUI->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this));
-    m_webPageUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
-    m_webPageUI->quickAccessEdit.connect(boost::bind(&SimpleUI::editQuickAccess, this));
-    m_webPageUI->deleteMostVisited.connect(boost::bind(&SimpleUI::deleteMostVisited, this));
-    m_webPageUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
-    m_webPageUI->getTitle.connect(boost::bind(&basic_webengine::AbstractWebEngine::getTitle, m_webEngine.get()));
-    m_webPageUI->getEngineState.connect(boost::bind(&basic_webengine::AbstractWebEngine::getState, m_webEngine.get()));
-    m_webPageUI->requestCurrentPageForWebPageUI.connect(boost::bind(&SimpleUI::requestSettingsCurrentPage, this));
-#if PWA
-    m_webPageUI->pwaRequestManifest.connect(boost::bind(&basic_webengine::AbstractWebEngine::requestManifest, m_webEngine.get()));
-    m_webPageUI->getCountCheckSignal.connect(boost::bind(&SimpleUI::countCheckUrl, this));
-#endif
-    m_webPageUI->isMostVisited.connect(boost::bind(&QuickAccess::isMostVisitedActive, m_quickAccess.get()));
+        [this]{ m_webEngine->stopLoading(); });
+    m_webPageUI->getURIEntry().createSearchQuery.connect(
+        [this](const std::string& s){ return this->createSearchQuery(s); });
+    m_webPageUI->isLandscape.connect(
+        [this]{ return this->isLandscape(); });
+    m_webPageUI->switchToMobileMode.connect(
+        [this]{ this->switchToMobileMode(); });
+    m_webPageUI->switchToDesktopMode.connect(
+        [this]{ this->switchToDesktopMode(); });
+    m_webPageUI->quickAccessEdit.connect(
+        [this]{ this->editQuickAccess(); });
+    m_webPageUI->deleteMostVisited.connect(
+        [this]{ this->deleteMostVisited(); });
+    m_webPageUI->addToQuickAccess.connect(
+        [this](const auto& url, const auto& title){ this->addQuickAccessItem(url, title); });
+    m_webPageUI->getTitle.connect(
+        [this]{ return m_webEngine->getTitle(); });
+    m_webPageUI->getEngineState.connect(
+        [this]{ return m_webEngine->getState(); });
+    m_webPageUI->requestCurrentPageForWebPageUI.connect(
+        [this]{ return requestSettingsCurrentPage(); });
+    m_webPageUI->pwaRequestManifest.connect(
+        [this]{ m_webEngine->setPWAData(); });
+    m_webPageUI->getCountCheckSignal.connect(
+        [this]{ return this->countCheckUrl(); });
+    m_webPageUI->isMostVisited.connect(
+        [this]{ return m_quickAccess->isMostVisitedActive(); });
+    m_webPageUI->setBarsShown.connect(
+        [this](bool value){ this->m_webEngine->setBarsShown(value); });
 }
 
 void SimpleUI::connectQuickAccessSignals()
 {
-    M_ASSERT(m_quickAccess.get());
-    m_quickAccess->openURLquickaccess.connect(boost::bind(&SimpleUI::openURLquickaccess, this, _1, _2));
-    m_quickAccess->openURLhistory.connect(boost::bind(&SimpleUI::openURLhistory, this, _1, _2));
-    m_quickAccess->getMostVisitedItems.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
-    m_quickAccess->getQuickAccessItems.connect(boost::bind(&SimpleUI::onQuickAccessClicked, this));
-    m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
-    m_quickAccess->addQuickAccessClicked.connect(boost::bind(&SimpleUI::onNewQuickAccessClicked, this));
-    m_quickAccess->deleteQuickAccessItem.connect(boost::bind(&SimpleUI::onQuickAccessDeleted, this, _1));
+    assert(m_quickAccess.get());
+    m_quickAccess->openURLquickaccess.connect(
+        [this](const auto& item){ this->openURL(item->getUrl(), item->getTitle(), m_webEngine->isDesktopMode()); });
+    m_quickAccess->openURLhistory.connect(
+        [this](const auto& item){ this->openURL(item->getUrl(), item->getTitle(), m_webEngine->isDesktopMode()); });
+    m_quickAccess->getMostVisitedItems.connect(
+        [this]{ m_quickAccess->setMostVisitedItems(m_historyService->getMostVisitedHistoryItems()); });
+    m_quickAccess->getQuickAccessItems.connect(
+        [this]{ m_quickAccess->setQuickAccessItems(m_storageService->getQuickAccessStorage().getQuickAccessList()); });
+    m_quickAccess->switchViewToWebPage.connect(
+        [this]{ return this->switchViewToWebPage(); });
+    m_quickAccess->addQuickAccessClicked.connect(
+        [this]{ return this->onNewQuickAccessClicked(); });
+    m_quickAccess->deleteQuickAccessItem.connect(
+        [this](const auto& item){ m_storageService->getQuickAccessStorage().deleteQuickAccessItem(item->getId()); });
+    m_quickAccess->reorderQuickAccessItem.connect(
+        [this](const auto& item, const auto& order){ m_storageService->getQuickAccessStorage().updateItemOrder(item->getId(), order); });
     m_quickAccess->removeMostVisitedItem.connect(
-        boost::bind(&SimpleUI::setMostVisitedFrequencyValue, this, _1, _2));
+        [this](const auto& item, const auto& freq){ m_historyService->setMostVisitedFrequency(item->getId(), freq); });
     m_quickAccess->sendSelectedMVItemsCount.connect(
-        boost::bind(&WebPageUI::setMostVisitedSelectedItemsCountInEditMode, m_webPageUI.get(), _1));
-    m_quickAccess->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+        [this](const auto& count){ m_webPageUI->setMostVisitedSelectedItemsCountInEditMode(count); });
+    m_quickAccess->isLandscape.connect(
+        [this]{ return this->isLandscape(); });
 }
 
 void SimpleUI::connectTabsSignals()
 {
-    M_ASSERT(m_tabUI.get());
-    m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
-    m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
-    m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
-    m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
-    m_tabUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
-    m_tabUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
-    m_tabUI->changeEngineState.connect(boost::bind(&SimpleUI::changeEngineState, this));
-    m_tabUI->refetchTabUIData.connect(boost::bind(&SimpleUI::refetchTabUIData, this));
-    m_tabUI->checkIfParamExistsInDB.connect(boost::bind(&storage::SettingsStorage::isDBParamPresent,
-        &m_storageService->getSettingsStorage(), _1));
-    m_tabUI->setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
-        &m_storageService->getSettingsStorage(), _1, _2));
-    m_tabUI->setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
-        &m_storageService->getSettingsStorage(), _1, _2));
-    m_tabUI->getDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsBool,
-        &m_storageService->getSettingsStorage(), _1, false));
-    m_tabUI->getDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsText,
-        &m_storageService->getSettingsStorage(), _1, ""));
-    m_tabUI->showPasswordUI.connect(boost::bind(&SimpleUI::showPasswordUI, this));
-    m_tabUI->showNoPasswordWarning.connect(boost::bind(&SimpleUI::onFirstSecretMode, this));
-    m_tabUI->getPasswordUI()->closeUI.connect(boost::bind(&SimpleUI::popTheStack, this));
-    m_tabUI->getPasswordUI()->setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
-        &m_storageService->getSettingsStorage(), _1, _2));
-    m_tabUI->getPasswordUI()->setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
-        &m_storageService->getSettingsStorage(), _1, _2));
-    m_tabUI->getPasswordUI()->getDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsText,
-        &m_storageService->getSettingsStorage(), _1, ""));
-    m_tabUI->getPasswordUI()->getDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::getSettingsBool,
-        &m_storageService->getSettingsStorage(), _1, false));
-    m_tabUI->getPasswordUI()->changeEngineState.connect(boost::bind(&SimpleUI::changeEngineState, this));
+    assert(m_tabUI.get());
+    m_tabUI->closeTabUIClicked.connect(
+        [this]{ this->popTheStack(); });
+    m_tabUI->newTabClicked.connect(
+        [this]{ this->newTabClicked(); });
+    m_tabUI->tabClicked.connect(
+        [this](const auto& id){ this->tabClicked(id); });
+    m_tabUI->closeTabsClicked.connect(
+        [this](const auto& tabId){ m_webEngine->closeTab(tabId); });
+    m_tabUI->getWindow.connect(
+        [this]{ return this->getMainWindow(); });
+    m_tabUI->isLandscape.connect(
+        [this]{ return this->isLandscape(); });
+    m_tabUI->changeEngineState.connect(
+        [this]{ this->changeEngineState(); });
+    m_tabUI->refetchTabUIData.connect(
+        [this]{ this->refetchTabUIData(); });
+    m_tabUI->checkIfParamExistsInDB.connect(
+        [this](const auto& key){ return m_storageService->getSettingsStorage().isDBParamPresent(key); });
+    m_tabUI->setDBBoolParamValue.connect(
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsBool(key, value); });
+    m_tabUI->setDBStringParamValue.connect(
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsString(key, value); });
+    m_tabUI->getDBBoolParamValue.connect(
+        [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsBool(key, false); });
+    m_tabUI->getDBStringParamValue.connect(
+        [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsText(key, ""); });
+    m_tabUI->showPasswordUI.connect(
+        [this]{ pushViewToStack(m_tabUI->getPasswordUI()); });
+    m_tabUI->showNoPasswordWarning.connect(
+        [this]{ this->onFirstSecretMode(); });
+    m_tabUI->getPasswordUI()->closeUI.connect(
+        [this]{ this->popTheStack(); });
+    m_tabUI->getPasswordUI()->setDBStringParamValue.connect(
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsString(key, value); });
+    m_tabUI->getPasswordUI()->setDBBoolParamValue.connect(
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setSettingsBool(key, value); });
+    m_tabUI->getPasswordUI()->getDBStringParamValue.connect(
+        [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsText(key, ""); });
+    m_tabUI->getPasswordUI()->getDBBoolParamValue.connect(
+        [this](const auto& key){ return m_storageService->getSettingsStorage().getSettingsBool(key, false); });
+    m_tabUI->getPasswordUI()->changeEngineState.connect(
+        [this]{ this->changeEngineState(); });
 }
 
 void SimpleUI::connectHistorySignals()
 {
-    M_ASSERT(m_historyUI.get());
-    m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryAllClicked, this));
-    m_historyUI->signalDeleteHistoryItems.connect(boost::bind(&SimpleUI::onDeleteHistoryItems, this, _1));
-    m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
-    m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::openURL, this, _1, _2, false));
-    m_historyUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
+    assert(m_historyUI.get());
+    m_historyUI->clearHistoryClicked.connect(
+        [this]{ this->onClearHistoryAllClicked(); });
+    m_historyUI->signalDeleteHistoryItems.connect(
+        [this](const auto& id){ m_historyService->deleteHistoryItem(id); });
+    m_historyUI->closeHistoryUIClicked.connect(
+        [this]{ this->popTheStack(); });
+    m_historyUI->signalHistoryItemClicked.connect(
+        [this](const auto& url, const auto& title){ this->openURL(url, title, false); });
+    m_historyUI->getWindow.connect(
+        [this]{ return this->getMainWindow(); });
 }
 
 void SimpleUI::connectBookmarkFlowSignals()
 {
-    M_ASSERT(m_bookmarkFlowUI.get());
-    m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
-    m_bookmarkFlowUI->saveBookmark.connect(boost::bind(&SimpleUI::addBookmark, this, _1));
-    m_bookmarkFlowUI->editBookmark.connect(boost::bind(&SimpleUI::editBookmark, this, _1));
-    m_bookmarkFlowUI->showSelectFolderUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
-        _1, BookmarkManagerState::SelectFolder));
-    m_bookmarkFlowUI->addToQuickAccess.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, _2));
+    assert(m_bookmarkFlowUI.get());
+    m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(
+        [this]{ this->popTheStack(); });
+    m_bookmarkFlowUI->saveBookmark.connect(
+        [this](const auto& bookmark_update){ this->addBookmark(bookmark_update); });
+    m_bookmarkFlowUI->editBookmark.connect(
+        [this](const auto& bookmark_update){ this->editBookmark(bookmark_update); });
+    m_bookmarkFlowUI->showSelectFolderUI.connect(
+        [this](const auto& parent){ this->showBookmarkManagerUI(parent, BookmarkManagerState::SelectFolder); });
+    m_bookmarkFlowUI->addToQuickAccess.connect(
+        [this](const auto& url, const auto& title){ this->addQuickAccessItem(url, title); });
 }
 
 void SimpleUI::connectBookmarkManagerSignals()
 {
-    M_ASSERT(m_bookmarkManagerUI.get());
-    m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
-    m_bookmarkManagerUI->folderSelected.connect(boost::bind(&BookmarkFlowUI::setFolder, m_bookmarkFlowUI.get(), _1));
-    m_bookmarkManagerUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
-    m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
-    m_bookmarkManagerUI->bookmarkItemEdit.connect(boost::bind(&SimpleUI::onBookmarkEdit, this, _1));
-    m_bookmarkManagerUI->bookmarkItemOrderEdited.connect(boost::bind(&SimpleUI::onBookmarkOrderEdited, this, _1));
-    m_bookmarkManagerUI->bookmarkItemDeleted.connect(boost::bind(&SimpleUI::onBookmarkDeleted, this, _1));
-    m_bookmarkManagerUI->newFolderItemClicked.connect(boost::bind(&SimpleUI::onNewFolderClicked, this, _1));
-    m_bookmarkManagerUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
-    m_bookmarkManagerUI->getHistoryGenlistContent.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1, _2, _3));
-    m_bookmarkManagerUI->removeSelectedItemsFromHistory.connect(boost::bind(&HistoryUI::removeSelectedHistoryItems, m_historyUI.get()));
-    m_bookmarkManagerUI->isEngineSecretMode.connect(boost::bind(&basic_webengine::AbstractWebEngine::isSecretMode, m_webEngine.get()));
+    assert(m_bookmarkManagerUI.get());
+    m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(
+        [this]{ this->popTheStack(); });
+    m_bookmarkManagerUI->folderSelected.connect(
+        [this](const auto& item){ m_bookmarkFlowUI->setFolder(item); });
+    m_bookmarkManagerUI->getWindow.connect(
+        [this]{ return this->getMainWindow(); });
+    m_bookmarkManagerUI->bookmarkItemClicked.connect(
+        [this](const auto& item){ this->onBookmarkClicked(item); });
+    m_bookmarkManagerUI->bookmarkItemEdit.connect(
+        [this](const auto& item){ this->onBookmarkEdit(item); });
+    m_bookmarkManagerUI->bookmarkItemOrderEdited.connect(
+        [this](const auto& item){ m_favoriteService->editBookmark(item->getId(), "", "", -1, item->getOrder()); });
+    m_bookmarkManagerUI->bookmarkItemDeleted.connect(
+        [this](const auto& item) { m_favoriteService->deleteBookmark(item->getId()); });
+    m_bookmarkManagerUI->newFolderItemClicked.connect(
+        [this](const auto& id){ this->onNewFolderClicked(id); });
+    m_bookmarkManagerUI->isLandscape.connect(
+        [this]{ return this->isLandscape(); });
+    m_bookmarkManagerUI->getHistoryGenlistContent.connect(
+        [this](const auto& parent, const auto& navi, const auto& remove){ return this->showHistoryUI(parent, navi, remove); });
+    m_bookmarkManagerUI->removeSelectedItemsFromHistory.connect(
+        [this]{ m_historyUI->removeSelectedHistoryItems(); });
+    m_bookmarkManagerUI->isEngineSecretMode.connect(
+        [this]{ return m_webEngine->isSecretMode(); });
 }
 
 void SimpleUI::connectFindOnPageSignals()
 {
-    M_ASSERT(m_findOnPageUI.get());
-    m_findOnPageUI->closeFindOnPageUIClicked.connect(boost::bind(&SimpleUI::closeFindOnPageUI, this));
-    m_findOnPageUI->startFindingWord.connect(boost::bind(&SimpleUI::findWord, this, _1));
+    assert(m_findOnPageUI.get());
+    m_findOnPageUI->closeFindOnPageUIClicked.connect(
+        [this] {
+            this->closeFindOnPageUI();
+        });
+    m_findOnPageUI->startFindingWord.connect(
+        [this](const auto& fdata){ m_webEngine->findWord(fdata.input_str, fdata.forward, fdata.func, fdata.data); });
 }
 
 void SimpleUI::connectSettingsSignals()
 {
-    M_ASSERT(m_settingsManager.get());
+    assert(m_settingsManager.get());
 
     // SETTINGS OVERALL
     m_settingsManager->connectOpenSignals();
     SPSC.closeSettingsUIClicked.connect(
-        boost::bind(&SimpleUI::popTheStack, this));
+        [this]{ this->popTheStack(); });
     SPSC.showSettings.connect(
-        boost::bind(&SimpleUI::showSettings, this,_1));
+        [this](const auto& settings){ this->showSettings(settings); });
     SPSC.getWebEngineSettingsParam.connect(
-        boost::bind(
-            &basic_webengine::AbstractWebEngine::getSettingsParam,
-            m_webEngine.get(),
-            _1));
+        [this](const auto& key){ return m_webEngine->getSettingsParam(key); });
     SPSC.getWebEngineSettingsParamString.connect(
-        boost::bind(
-            &storage::SettingsStorage::getParamString,
-            &m_storageService->getSettingsStorage(),
-            _1));
-
+        [this](const auto& key){ return m_storageService->getSettingsStorage().getParamString(key); });
     SPSC.setWebEngineSettingsParam.connect(
-        boost::bind(
-            &basic_webengine::AbstractWebEngine::setSettingsParam,
-            m_webEngine.get(),
-            _1,
-            _2));
+        [this](const auto& key, const auto& value){ m_webEngine->setSettingsParam(key, value); });
     SPSC.setWebEngineSettingsParam.connect(
-        boost::bind(&storage::SettingsStorage::setParam,
-            &m_storageService->getSettingsStorage(),
-            _1,
-            _2));
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setParam(key, value); });
     SPSC.setWebEngineSettingsParamString.connect(
-        boost::bind(
-            &storage::SettingsStorage::setParamString,
-            &m_storageService->getSettingsStorage(),
-            _1,
-            _2));
-
+        [this](const auto& key, const auto& value){ m_storageService->getSettingsStorage().setParamString(key, value); });
     SPSC.isLandscape.connect(
-        boost::bind(&SimpleUI::isLandscape, this));
+        [this]{ return this->isLandscape(); });
     SPSC.settingsBaseShowRadioPopup.connect(
-        boost::bind(&SimpleUI::onDefSearchEngineClicked, this));
+        [this]{ this->onDefSearchEngineClicked(); });
     SPSC.settingsSaveContentToRadioPopup.connect(
-        boost::bind(&SimpleUI::onSaveContentToClicked, this));
+        [this]{ this->onSaveContentToClicked(); });
 
-    // SETTINGS HOME PAGE SIGNALS
     m_settingsManager->init(m_viewManager.getContent());
     SPSC.requestCurrentPage.connect(
-        boost::bind(&SimpleUI::requestSettingsCurrentPage, this));
+        [this]{ return requestSettingsCurrentPage(); });
     SPSC.showTextPopup.connect(
-        boost::bind(&SimpleUI::selectSettingsOtherPageChange, this));
+        [this]{ this->selectSettingsOtherPageChange(); });
 
-    // SETTINGS DELETE DATA
     SPSC.deleteSelectedDataClicked.connect(
-        boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1));
-
+        [this](const auto& opt){ this->settingsDeleteSelectedData(opt); });
     SPSC.userAgentItemClicked.connect(
-        boost::bind(&SimpleUI::settingsOverrideUseragent, this,_1));
+        [this](const auto& ua){ this->settingsOverrideUseragent(ua); });
 }
 
 void SimpleUI::connectWebEngineSignals()
 {
-    m_webEngine->minimizeBrowser.connect(boost::bind(&SimpleUI::minimizeBrowser, this));
-    m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1));
-    m_webEngine->downloadStarted.connect(boost::bind(&SimpleUI::downloadStarted, this, _1));
-    m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1));
-    m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1));
-    m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this));
-    m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1));
-    m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this));
-    m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadFinished, this));
-    m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this));
-    m_webEngine->checkIfCreate.connect(boost::bind(&SimpleUI::checkIfCreate, this));
-    m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::engineTabClosed,this,_1));
-    m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1));
-    m_webEngine->switchToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
-    m_webEngine->favIconChanged.connect(boost::bind(&SimpleUI::faviconChanged, this, _1));
-    m_webEngine->windowCreated.connect(boost::bind(&SimpleUI::windowCreated, this));
-    m_webEngine->createTabId.connect(boost::bind(&SimpleUI::onCreateTabId, this));
-    m_webEngine->snapshotCaptured.connect(boost::bind(&SimpleUI::onSnapshotCaptured, this, _1, _2));
-    m_webEngine->redirectedWebPage.connect(boost::bind(&SimpleUI::redirectedWebPage, this, _1, _2));
-    m_webEngine->rotatePrepared.connect(boost::bind(&SimpleUI::rotatePrepared, this));
-    m_webEngine->switchToQuickAccess.connect(boost::bind(&SimpleUI::switchViewToQuickAccess, this));
-    m_webEngine->setCertificatePem.connect(boost::bind(&services::CertificateContents::saveCertificateInfo, m_certificateContents, _1, _2));
-    m_webEngine->setWrongCertificatePem.connect(boost::bind(&services::CertificateContents::saveWrongCertificateInfo, m_certificateContents, _1, _2));
-    m_webEngine->fullscreenModeSet.connect(boost::bind(&WebPageUI::fullscreenModeSet, m_webPageUI.get(), _1));
-    m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1));
-    m_webEngine->getRotation.connect(boost::bind(&SimpleUI::getRotation, this));
-    m_webEngine->openFindOnPage.connect(boost::bind(&SimpleUI::showFindOnPageUI, this, _1));
-    m_webEngine->closeFindOnPage.connect(boost::bind(&SimpleUI::closeFindOnPageUI, this));
-    m_webEngine->unsecureConnection.connect(boost::bind(&SimpleUI::showUnsecureConnectionPopup, this));
-    m_webEngine->registerHWKeyCallback.connect(boost::bind(&SimpleUI::registerHWKeyCallback, this));
-    m_webEngine->unregisterHWKeyCallback.connect(boost::bind(&SimpleUI::unregisterHWKeyCallback, this));
-}
-
-void SimpleUI::connectHistoryServiceSignals()
-{
-    m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1));
+    m_webEngine->minimizeBrowser.connect(
+        [this]{ this->minimizeBrowser(); });
+    m_webEngine->uriChanged.connect(
+        [this](const auto& url){ m_webPageUI->getURIEntry().changeUri(url); });
+    m_webEngine->downloadStarted.connect(
+        [this](const auto& status){ this->downloadStarted(status); });
+    m_webEngine->backwardEnableChanged.connect(
+        [this](const auto& enabled){ m_webPageUI->setBackButtonEnabled(enabled); });
+    m_webEngine->forwardEnableChanged.connect(
+        [this](const auto& enabled){ m_webPageUI->setForwardButtonEnabled(enabled); });
+    m_webEngine->loadStarted.connect(
+        [this]{ this->loadStarted(); });
+    m_webEngine->loadProgress.connect(
+        [this](const auto& progress){ m_webPageUI->progressChanged(progress); });
+#if DUMMY_BUTTON
+    m_webEngine->focusWebView.connect(
+        [this]{ this->m_webPageUI->setDummyButtonFocus(); });
+#endif
+    m_webEngine->loadFinished.connect(
+        [this]{ this->loadFinished(); });
+    m_webEngine->loadStop.connect(
+        [this]{ this->loadFinished(); });
+    m_webEngine->tabCreated.connect(
+        [this]{ m_webPageUI->setTabsNumber(m_webEngine->tabsCount()); });
+    m_webEngine->checkIfCreate.connect(
+        [this]{ return this->checkIfCreate(); });
+    m_webEngine->tabClosed.connect(
+        [this](const auto& id){ this->engineTabClosed(id); });
+    m_webEngine->IMEStateChanged.connect(
+        [this](const auto& status){ this->setwvIMEStatus(status); });
+    m_webEngine->switchToWebPage.connect(
+        [this]{ this->switchViewToWebPage(); });
+    m_webEngine->favIconChanged.connect(
+        [this](const auto& icon){
+            if (!m_webEngine->isLoading())
+                m_historyService->updateHistoryItemFavicon(m_webEngine->getURI(), icon);
+    });
+    m_webEngine->windowCreated.connect(
+        [this]{ switchViewToWebPage(); });
+    m_webEngine->createTabId.connect(
+        [this]{ m_webEngine->onTabIdCreated(m_tabService->createTabId()); });
+    m_webEngine->snapshotCaptured.connect(
+        [this](const auto& snap, const auto& type){ this->onSnapshotCaptured(snap, type); });
+    m_webEngine->rotatePrepared.connect(
+        [this]{ this->rotatePrepared(); });
+    m_webEngine->switchToQuickAccess.connect(
+        [this]{ this->switchViewToQuickAccess(); });
+    m_webEngine->setCertificatePem.connect(
+        [this](const auto& host, const auto& pem){ m_certificateContents->saveCertificateInfo(host, pem); });
+    m_webEngine->setWrongCertificatePem.connect(
+        [this](const auto& host, const auto& pem){ m_certificateContents->saveWrongCertificateInfo(host, pem); });
+    m_webEngine->fullscreenModeSet.connect(
+        [this](const auto& state){ m_webPageUI->fullscreenModeSet(state); });
+    m_webEngine->confirmationRequest.connect(
+        [this](const auto& conf){ this->handleConfirmationRequest(conf); });
+    m_webEngine->getRotation.connect(
+        [this]{ return this->getRotation(); });
+    m_webEngine->openFindOnPage.connect(
+        [this](const auto& str){ this->showFindOnPageUI(str); });
+    m_webEngine->closeFindOnPage.connect(
+        [this]{ this->closeFindOnPageUI(); });
+    m_webEngine->unsecureConnection.connect(
+        [this]{ this->showUnsecureConnectionPopup(); });
+    m_webEngine->registerHWKeyCallback.connect(
+        [this]{ m_platformInputManager->registerHWKeyCallback(m_webEngine->getLayout()); });
+    m_webEngine->unregisterHWKeyCallback.connect(
+        [this]{ m_platformInputManager->unregisterHWKeyCallback(m_webEngine->getLayout()); });
+    m_webEngine->urlbarOffsetSet.connect(
+        [this](const auto& offset){ m_webPageUI->urlbarOffsetSet(offset); });
+    m_webEngine->bottombarOffsetSet.connect(
+        [this](const auto& offset){ m_webPageUI->bottombarOffsetSet(offset); });
+    m_webEngine->createSearchQuery.connect(
+        [this](const std::string& s){ return this->createSearchQuery(s); });
+    m_webEngine->changeUIColor.connect(
+        [this](int r, int g, int b, int a){
+            m_webPageUI->changeUIColor(r,g,b,a);
+    });
+    m_webEngine->installPWA.connect(
+        [this](const std::string& s, const std::string& p, const std::string& sn) {
+            return m_storageService->getPWAStorage().installPWAItem(s, p, sn);
+    });
+    m_webEngine->storePWAShortcut.connect(
+        [this](const unsigned& id, const std::string& shortcut){
+            return m_storageService->getPWAStorage().storePWAShortcut(id, shortcut);
+    });
+    m_webEngine->pushSignal.connect(
+        [this](const char *sender_id, const char* push_data) { return this->handlePushSignal(sender_id, push_data); }
+    );
+    m_webEngine->storePermission.connect(
+        [this](const std::string& origin, const bool& state) {
+            return m_storageService->getPWAStorage().addPermission(origin, state); }
+    );
+    m_webEngine->getPermissionId.connect(
+        [this](const std::string& origin) {
+            return m_storageService->getPWAStorage().getPermissionId(origin); }
+    );
+    m_webEngine->updatePermissionState.connect(
+        [this](const int& id, const bool& state) {
+            return m_storageService->getPWAStorage().updatePermissionState(id, state); }
+    );
+    m_webEngine->getPermissionsMap.connect(
+        [this]{
+            BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+            return m_storageService->getPWAStorage().getPermissionsMap();
+    });
+}
+
+std::string SimpleUI::handlePushSignal(const char *sender_id, const char* data)
+{
+    BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, sender_id);
+    int id = m_storageService->getPWAStorage().getPWAIdFromPushId(sender_id);
+    if (id) {
+        app_context_h context = nullptr;
+        app_state_e   state ;
+        std::string appId = "org.tizen.browser";
+        std::string shortName = m_storageService->getPWAStorage().getPWAShortName(id);
+        std::string result = shortName + std::to_string(id);
+        bool isInactive =
+            (app_manager_get_app_context_by_instance_id(
+                appId.c_str(), result.c_str(), &context) == APP_MANAGER_ERROR_NO_SUCH_APP);
+        if(context) {
+            app_context_get_app_state( context, &state);
+            BROWSER_LOGD("[%s:%d] instance-id=%s ,  isInactive=%d, state=%d", __PRETTY_FUNCTION__, __LINE__, result.c_str(),isInactive,state);
+
+            if (state==APP_STATE_FOREGROUND) {
+                BROWSER_LOGD("[%s:%d] instance id active %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+                return std::string(data);
+            } else {
+                BROWSER_LOGD("[%s:%d] instance id inactive %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+                createPWANotification(id, data);
+            }
+        }
+        else{
+            BROWSER_LOGD("[%s:%d] instance id inactive %s", __PRETTY_FUNCTION__, __LINE__, result.c_str());
+            createPWANotification(id, data);
+        }
+    }
+    else {
+        BROWSER_LOGD("no instance id");
+        return std::string(data);
+    }
+    return std::string();
+}
+
+void SimpleUI::createPWANotification(const unsigned& id, const std::string& body)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    auto shortcut = m_storageService->getPWAStorage().getPWAShortcut(id);
+    auto title = m_storageService->getPWAStorage().getPWAName(id);
+
+    notification_h noti_h = nullptr;
+    int ret = NOTIFICATION_ERROR_NONE;
+    noti_h = notification_create(NOTIFICATION_TYPE_NOTI);
+
+    ret = notification_set_text(
+        noti_h,
+        NOTIFICATION_TEXT_TYPE_TITLE,
+        title.c_str(),
+        nullptr,
+        NOTIFICATION_VARIABLE_TYPE_NONE);
+
+    if (ret != NOTIFICATION_ERROR_NONE) {
+        BROWSER_LOGD("[%s]: PWANotification >> Title Error", __func__);
+        notification_free(noti_h);
+        return;
+    }
+
+    ret = notification_set_text(
+        noti_h,
+        NOTIFICATION_TEXT_TYPE_CONTENT,
+        body.c_str(),
+        nullptr,
+        NOTIFICATION_VARIABLE_TYPE_NONE);
+
+    if (ret != NOTIFICATION_ERROR_NONE) {
+        BROWSER_LOGD("[%s]: PWANotification >> Contents Error", __func__);
+        notification_free(noti_h);
+        return ;
+    }
+
+    ret = notification_set_display_applist(
+        noti_h,
+        NOTIFICATION_DISPLAY_APP_TICKER | NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY);
+
+    if (ret != NOTIFICATION_ERROR_NONE) {
+        BROWSER_LOGD("[%s]: PWANotification >> Display Error", __func__);
+        notification_free(noti_h);
+        return;
+    }
+
+    app_control_h app_control = nullptr;
+    if (app_control_create(&app_control) != APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("Fail to create app_control");
+        notification_free(noti_h);
+        return;
+    }
+    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) != APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("Fail to set app_control operation");
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
+
+    if (app_control_set_app_id(app_control, "org.tizen.browser") != APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("Fail to app_control_set_app_id");
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
+
+    if (app_control_set_uri(app_control,  shortcut.c_str()) != APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("Fail to app_control_set_uri");
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
+
+    if (app_control_add_extra_data(app_control, "push_data", body.c_str()) != APP_CONTROL_ERROR_NONE) {
+        BROWSER_LOGD("Fail to app_control_set_extra_data");
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
+
+    int err = notification_set_launch_option(noti_h, NOTIFICATION_LAUNCH_OPTION_APP_CONTROL, (void*)app_control);
+
+    BROWSER_LOGD("notification_set_launch_option >> NOTIFICATION_LAUNCH_OPTION_APP_CONTROL");
+    if (err != NOTIFICATION_ERROR_NONE) {
+        BROWSER_LOGD("notification_set_execute_option is failed with err[%d]", err);
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
+
+    int platform_key = NOTIFICATION_PRIV_ID_NONE;
+    ret = notification_insert(noti_h, &platform_key);
+
+    if (ret != NOTIFICATION_ERROR_NONE) {
+        BROWSER_LOGD("[%s]: PWANotification >> Display Error", __func__);
+        app_control_destroy(app_control);
+        notification_free(noti_h);
+        return;
+    }
 }
 
 void SimpleUI::connectTabServiceSignals()
 {
-    m_tabService->generateThumb.connect(boost::bind(&SimpleUI::onGenerateThumb, this, _1));
-    m_tabService->generateFavicon.connect(boost::bind(&SimpleUI::onGenerateFavicon, this, _1));
+    m_tabService->generateThumb.connect(
+        [this](const auto& id){ this->onGenerateThumb(id); });
+    m_tabService->generateFavicon.connect(
+        [this](const auto& id){ m_tabService->updateTabItemFavicon(id, m_webEngine->getFavicon()); });
 }
 
 void SimpleUI::connectPlatformInputSignals()
 {
-    m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
-    m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this));
-    m_platformInputManager->menuButtonPressed.connect(boost::bind(&SimpleUI::onMenuButtonPressed, this));
-    m_platformInputManager->XF86BackPressed.connect(boost::bind(&SimpleUI::onXF86BackPressed, this));
+    m_platformInputManager->returnPressed.connect(elm_exit);
+    m_platformInputManager->backPressed.connect(
+        [this]{ this->onBackPressed(); });
+    m_platformInputManager->menuButtonPressed.connect(
+        [this]{ this->onMenuButtonPressed(); });
+    m_platformInputManager->XF86BackPressed.connect(
+        [this]{ this->onXF86BackPressed(); });
+    m_platformInputManager->XF86MenuPressed.connect(
+        [this]{ this->onXF86MenuPressed(); });
 }
 
 void SimpleUI::connectCertificateSignals()
 {
-    m_certificateContents->getHostCertList.connect(boost::bind(&storage::CertificateStorage::getHostCertList, &m_storageService->getCertificateStorage()));
-    m_certificateContents->addOrUpdateCertificateEntry.connect(boost::bind(&storage::CertificateStorage::addOrUpdateCertificateEntry, &m_storageService->getCertificateStorage(), _1, _2, _3));
+    m_certificateContents->getHostCertList.connect(
+        [this]{ return m_storageService->getCertificateStorage().getHostCertList(); });
+    m_certificateContents->addOrUpdateCertificateEntry.connect(
+        [this](const auto& pem, const auto& host, const auto& allow){
+            m_storageService->getCertificateStorage().addOrUpdateCertificateEntry(pem, host, allow);
+    });
 }
 
 void SimpleUI::connectStorageSignals()
 {
-    m_storageService->getSettingsStorage().setWebEngineSettingsParam.connect(boost::bind(&basic_webengine::AbstractWebEngine::setSettingsParam, m_webEngine.get(), _1, _2));
+    m_storageService->getSettingsStorage().setWebEngineSettingsParam.connect(
+        [this](const auto& param, const auto& value){ m_webEngine->setSettingsParam(param, value); });
 }
 
 void SimpleUI::connectUISignals()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_viewManager.isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+    m_viewManager.isLandscape.connect(
+        [this]{ return this->isLandscape(); });
     connectWebPageSignals();
     connectQuickAccessSignals();
     connectTabsSignals();
@@ -717,6 +1008,44 @@ void SimpleUI::connectUISignals()
     connectBookmarkManagerSignals();
 }
 
+void SimpleUI::connectPWASignals()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    connectStorageSignals();
+
+    m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onPWABackPressed, this));
+
+    m_webEngine->loadFinished.connect([this]{ this->m_splash_screen.hide(); });
+    m_webEngine->rotatePrepared.connect([this]{ this->rotatePrepared(); });
+    m_webEngine->getPWAInstanceIDSignal.connect(
+        [this] { return m_pushPwaData.getInstanceId(); });
+    m_webEngine->getPWADataSignal.connect(
+        [this] { return m_pushPwaData.getData(); });
+    m_webEngine->pushSignal.connect(
+        [this](const char *sender_id, const char* push_data) {
+            return this->handlePushSignal(sender_id, push_data);
+    });
+    m_webEngine->storePermission.connect(
+        [this](const std::string& origin, const bool& state) {
+            return m_storageService->getPWAStorage().addPermission(origin, state);
+    });
+    m_webEngine->getPermissionId.connect(
+        [this](const std::string& origin) {
+            return m_storageService->getPWAStorage().getPermissionId(origin);
+    });
+    m_webEngine->updatePermissionState.connect(
+        [this](const int& id, const bool& state) {
+            return m_storageService->getPWAStorage().updatePermissionState(id, state);
+    });
+    m_webEngine->windowCreated.connect( [this]{ switchViewToWebPage(); });
+    m_webEngine->getPermissionsMap.connect(
+        [this]{
+            BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+            return m_storageService->getPWAStorage().getPermissionsMap();
+    });
+}
+
 void SimpleUI::connectModelSignals()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -734,26 +1063,26 @@ void SimpleUI::initUIServices()
 
     auto viewManager(m_viewManager.getContent());
 
-    M_ASSERT(m_webPageUI.get());
+    assert(m_webPageUI.get());
     m_webPageUI->init(viewManager);
 
     auto webPageUI(m_webPageUI->getContent());
-    M_ASSERT(m_quickAccess.get());
+    assert(m_quickAccess.get());
     m_quickAccess->init(webPageUI);
 
-    M_ASSERT(m_tabUI.get());
+    assert(m_tabUI.get());
     m_tabUI->init(viewManager);
 
-    M_ASSERT(m_historyUI.get());
+    assert(m_historyUI.get());
     m_historyUI->init(viewManager);
 
-    M_ASSERT(m_bookmarkFlowUI.get());
+    assert(m_bookmarkFlowUI.get());
     m_bookmarkFlowUI->init(viewManager);
 
-    M_ASSERT(m_findOnPageUI.get());
+    assert(m_findOnPageUI.get());
     m_findOnPageUI->init(webPageUI);
 
-    M_ASSERT(m_bookmarkManagerUI.get());
+    assert(m_bookmarkManagerUI.get());
     m_bookmarkManagerUI->init(viewManager);
 }
 
@@ -761,17 +1090,17 @@ void SimpleUI::initModelServices()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    M_ASSERT(m_webEngine.get());
-    M_ASSERT(m_webPageUI.get());
+    assert(m_webEngine.get());
+    assert(m_webPageUI.get());
     m_webEngine->init(m_webPageUI->getContent());
 
-    M_ASSERT(m_storageService->getSettingsStorage());
+    assert(m_storageService->getSettingsStorage().get());
     m_storageService->getSettingsStorage().initWebEngineSettingsFromDB();
 
-    M_ASSERT(m_platformInputManager);
+    assert(m_platformInputManager.get());
     m_platformInputManager->init(m_window.get());
 
-    M_ASSERT(m_certificateContents.get());
+    assert(m_certificateContents.get());
     m_certificateContents->init();
 }
 
@@ -800,37 +1129,29 @@ void SimpleUI::popStackTo(const sAUI& view)
         BROWSER_LOGW("[%s] appcore_flush_memory error!", __PRETTY_FUNCTION__);
 }
 
-void SimpleUI::registerHWKeyCallback()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_platformInputManager->registerHWKeyCallback(m_webEngine->getLayout());
-}
-
-void SimpleUI::unregisterHWKeyCallback()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_platformInputManager->unregisterHWKeyCallback(m_webEngine->getLayout());
-}
-
 void SimpleUI::switchViewToWebPage()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_webEngine->isSuspended())
         m_webEngine->resume();
-    m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
+    if (!m_pwa.isActive())
+        m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(),
+                                         m_webEngine->getURI(),
+                                         m_webEngine->isLoading());
+    else
+        m_webPageMin->setMainContent(m_webEngine->getLayout());
 }
 
 void SimpleUI::switchToTab(const basic_webengine::TabId& tabId)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_webEngine->switchToTab(tabId);
-    m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
-}
-
-void SimpleUI::showQuickAccess()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_quickAccess->showUI();
+    if (!m_pwa.isActive())
+        m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(),
+                                         m_webEngine->getURI(),
+                                         m_webEngine->isLoading());
+    else
+        m_webPageMin->setMainContent(m_webEngine->getLayout());
 }
 
 void SimpleUI::switchViewToQuickAccess()
@@ -838,6 +1159,7 @@ void SimpleUI::switchViewToQuickAccess()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
+    m_webPageUI->changeUIColor();
     m_webEngine->suspend();
     popStackTo(m_webPageUI);
 }
@@ -856,13 +1178,6 @@ void SimpleUI::openNewTab(const std::string &uri, const std::string& title,
     switchToTab(tab);
 }
 
-void SimpleUI::closeTab()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto tabId = m_webEngine->currentTabId();
-    closeTab(tabId);
-}
-
 void SimpleUI::closeTab(const basic_webengine::TabId& id)
 {
     BROWSER_LOGD("[%s:%d] id: %d", __PRETTY_FUNCTION__, __LINE__, id.get());
@@ -887,27 +1202,12 @@ bool SimpleUI::checkBookmark()
     }
 }
 
-bool SimpleUI::checkQuickAccess()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    return m_storageService->getQuickAccessStorage().quickAccessItemExist(m_webEngine->getURI());
-}
-
-void SimpleUI::openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
-{
-    openURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
-}
-
-void SimpleUI::openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode)
-{
-    openURL(quickaccessItem->getUrl(), quickaccessItem->getTitle(), desktopMode);
-}
-
 void SimpleUI::openURL(const std::string& url)
 {
-    // TODO: desktop mode should be checked in WebView or QuickAcces
-    // (depends on which view is active)
-    openURL(url, "", m_quickAccess->isDesktopMode());
+    if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE) || m_webPageUI->stateEquals(WPUState::MAIN_INCOGNITO_PAGE))
+        openURL(url, "", m_webEngine->isDesktopMode());
+    else
+        openURL(url, "", false);
 }
 
 void SimpleUI::openURL(const std::string& url, const std::string& title, bool desktopMode)
@@ -915,9 +1215,12 @@ void SimpleUI::openURL(const std::string& url, const std::string& title, bool de
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (m_webPageUI) {
         popStackTo(m_webPageUI);
-        if (tabsCount() == 0 || m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+        if (tabsCount() == 0 ||
+            (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS) && m_webPageUI->shouldOpenNewTab())) {
             openNewTab(url, title, boost::none, desktopMode, basic_webengine::TabOrigin::QUICKACCESS);
-        else {
+        } else {
+            if (m_webEngine->isSuspended())
+                m_webEngine->resume();
             m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), url, false);
             m_webEngine->setURI(url);
             m_webPageUI->getURIEntry().clearFocus();
@@ -931,24 +1234,7 @@ void SimpleUI::onClearHistoryAllClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_historyService->clearAllHistory();
-}
-
-void SimpleUI::onDeleteHistoryItems(int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_historyService->deleteHistoryItem(id);
-}
-
-void SimpleUI::onMostVisitedClicked()
-{
-   BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-   m_quickAccess->setMostVisitedItems(getMostVisitedItems());
-}
-
-void SimpleUI::onQuickAccessClicked()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_quickAccess->setQuickAccessItems(m_storageService->getQuickAccessStorage().getQuickAccessList());
+    m_storageService->getPWAStorage().deletePWAItems();
 }
 
 void SimpleUI::onBookmarkClicked(services::SharedBookmarkItem bookmarkItem)
@@ -969,18 +1255,21 @@ void SimpleUI::onBookmarkEdit(services::SharedBookmarkItem bookmarkItem)
         InputPopup *inputPopup =
             InputPopup::createPopup(
                 m_viewManager.getContent(),
-                "Edit Folder name",
-                "Edit folder name?",
+                "IDS_BR_OPT_RENAME_FOLDER",
+                "",
                 bookmarkItem->getTitle(),
-                _("IDS_BR_SK_DONE"),
-                _("IDS_BR_SK_CANCEL_ABB"));
+                "IDS_BR_OPT_RENAME",
+                "IDS_BR_SK_CANCEL_ABB");
         services::SharedBookmarkItemList badWords =
             m_favoriteService->getFolders(bookmarkItem->getParent());
         for (auto it = badWords.begin(); it != badWords.end(); ++it)
             inputPopup->addBadWord((*it)->getTitle());
-        inputPopup->button_clicked.connect(boost::bind(&SimpleUI::onEditFolderPopupClicked, this, _1, bookmarkItem));
-        inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-        inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+        inputPopup->button_clicked.connect(
+            [=](const auto& name) mutable { this->onEditFolderPopupClicked(name, bookmarkItem); });
+        inputPopup->popupShown.connect(
+            [this](const auto& popup){ this->showPopup(popup); });
+        inputPopup->popupDismissed.connect(
+            [this](const auto& popup){ this->dismissPopup(popup); });
         inputPopup->show();
     } else {
         m_bookmarkFlowUI->setURL(bookmarkItem->getAddress());
@@ -991,18 +1280,6 @@ void SimpleUI::onBookmarkEdit(services::SharedBookmarkItem bookmarkItem)
     }
 }
 
-void SimpleUI::onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_favoriteService->editBookmark(bookmarkItem->getId(), "", "", -1, bookmarkItem->getOrder());
-}
-
-void SimpleUI::onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_favoriteService->deleteBookmark(bookmarkItem->getId());
-}
-
 void SimpleUI::onNewFolderClicked(int parent)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1018,9 +1295,12 @@ void SimpleUI::onNewFolderClicked(int parent)
     services::SharedBookmarkItemList badWords = m_favoriteService->getFolders(parent);
     for (auto it = badWords.begin(); it != badWords.end(); ++it)
         inputPopup->addBadWord((*it)->getTitle());
-    inputPopup->button_clicked.connect(boost::bind(&SimpleUI::onNewFolderPopupClick, this, _1, parent));
-    inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    inputPopup->button_clicked.connect(
+        [=](const auto& name) mutable { this->onNewFolderPopupClick(name, parent); });
+    inputPopup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    inputPopup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     inputPopup->show();
 }
 
@@ -1048,60 +1328,79 @@ void SimpleUI::onNewQuickAccessClicked()
         _("IDS_BR_SK_CANCEL_ABB"));
     // TODO Add missing translations
     inputPopup->setTip(_("Enter web address"));
-    inputPopup->button_clicked.connect(boost::bind(&SimpleUI::addQuickAccessItem, this, _1, ""));
-    inputPopup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    inputPopup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    inputPopup->button_clicked.connect(
+        [this](const auto& url){ this->addQuickAccessItem(url, ""); });
+    inputPopup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    inputPopup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     inputPopup->show();
 }
 
-void SimpleUI::addQuickAccessItem(const string &urlArg, const string &titleArg)
+void SimpleUI::addQuickAccessItem(const std::string &urlArg, const std::string &titleArg)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_storageService->getQuickAccessStorage().getQuickAccessCount() < m_qaLimit) {
 
-    bool showQA = false;
-    std::string url = urlArg;
-    std::string title = titleArg;
+        bool refreshQAGengrid = false;
+        std::string url = urlArg;
+        std::string title = titleArg;
+        unsigned addedItemID;
 
-    if(!tools::checkIfProtocolExist(url))
-        url = std::string(tools::PROTOCOL_HTTP) + url;
+        if (!tools::checkIfProtocolExist(url))
+            url = std::string(tools::PROTOCOL_HTTP) + url;
 
-    if (titleArg.empty()) {
-        title = urlArg;
-        showQA = true;
-    }
+        if (!m_storageService->getQuickAccessStorage().quickAccessItemExist(url)) {
+
+            if (titleArg.empty()) {
+                title = urlArg;
+                refreshQAGengrid = true;
+            }
+
+            if (!title.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
+                title = title.substr(tools::PROTOCOL_HTTP.length(), std::string::npos);
+            else if (!title.compare(0, tools::PROTOCOL_HTTPS.length(), tools::PROTOCOL_HTTPS))
+                title = title.substr(tools::PROTOCOL_HTTPS.length(), std::string::npos);
+            else if (!title.compare(0, tools::PROTOCOL_FTP.length(), tools::PROTOCOL_FTP))
+                title = title.substr(tools::PROTOCOL_FTP.length(), std::string::npos);
+
+            //TODO: add support for reorder and color
+            if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE)) {
+                tools::BrowserImagePtr favicon = m_webEngine->getFavicon();
+                if (favicon) {
+                    addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+                        url, title, 0, 0, true, favicon, favicon->getWidth(), favicon->getHeight());
+                } else {
+                    addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+                        url, title, 0, 0, false, nullptr, 0, 0);
+                }
+            } else {
+                addedItemID = m_storageService->getQuickAccessStorage().addQuickAccessItem(
+                    url, title, 0, 0, false, nullptr, 0, 0);
+            }
+
+            if (refreshQAGengrid)
+                m_quickAccess->addQuickAccessItemBeforeADDButton(
+                    m_storageService->getQuickAccessStorage().getQuickAccessItem(addedItemID));
+
+            tools::EflTools::createToastPopup(_("IDS_BR_TPOP_WEBPAGE_ADDED_TO_QUICK_ACCESS_LIST"));
 
-    if (!title.compare(0, tools::PROTOCOL_HTTP.length(), tools::PROTOCOL_HTTP))
-        title = title.substr(tools::PROTOCOL_HTTP.length(), std::string::npos);
-    else if (!title.compare(0, tools::PROTOCOL_HTTPS.length(), tools::PROTOCOL_HTTPS))
-        title = title.substr(tools::PROTOCOL_HTTPS.length(), std::string::npos);
-    else if (!title.compare(0, tools::PROTOCOL_FTP.length(), tools::PROTOCOL_FTP))
-        title = title.substr(tools::PROTOCOL_FTP.length(), std::string::npos);
-
-    //TODO: add support for reorder and color
-    if (m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE)) {
-        tools::BrowserImagePtr favicon = m_webEngine->getFavicon();
-        if (favicon) {
-            m_storageService->getQuickAccessStorage().addQuickAccessItem(
-                url, title, 0, 0, true, favicon, favicon->getWidth(), favicon->getHeight());
         } else {
-            m_storageService->getQuickAccessStorage().addQuickAccessItem(
-                url, title, 0, 0, false, nullptr, 0, 0);
+            BROWSER_LOGI("[%s:%d] Quick access item already exist!", __PRETTY_FUNCTION__, __LINE__);
         }
+
     } else {
-        m_storageService->getQuickAccessStorage().addQuickAccessItem(
-            url, title, 0, 0, false, nullptr, 0, 0);
+        TextPopup *popup = TextPopup::createPopup(m_viewManager.getContent());
+        popup->addButton(OK);
+        popup->setTitle("Couldn't add shortcut");  //TODO: missing translation
+        popup->setMessage("The maximum number of Quick access shortcuts has been reached. "
+                          "Delete some shortcuts and try again.");  //TODO: Missing translation
+        popup->popupShown.connect(
+            [this](const auto& popup){ this->showPopup(popup); });
+        popup->popupDismissed.connect(
+            [this](const auto& popup){ this->dismissPopup(popup); });
+        popup->show();
     }
-
-    if (showQA)
-        showQuickAccess();
-
-    //TODO: display toast message
-}
-
-void SimpleUI::onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_storageService->getQuickAccessStorage().deleteQuickAccessItem(quickaccessItem->getId());
 }
 
 void SimpleUI::editQuickAccess()
@@ -1118,31 +1417,6 @@ void SimpleUI::deleteMostVisited()
     pushViewToStack(m_webPageUI->getQuickAccessEditUI());
 }
 
-void SimpleUI::onDeleteFolderClicked(const std::string& folder_name)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
-    popup->addButton(DELETE);
-    popup->addButton(CANCEL);
-    popup->setTitle(_("IDS_BR_SK_DELETE"));
-    popup->setMessage("<b>Delete '" + folder_name + "'?</b><br>If you delete this Folder, All Bookmarks in the folder will also be deleted.");
-    popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteFolderPopupClicked, this, _1));
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
-    m_folder_name = folder_name;
-    popup->show();
-}
-
-void SimpleUI::onRemoveFoldersClicked(services::SharedBookmarkItemList items)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    for (auto it = items.begin(); it != items.end(); ++it) {
-        m_storageService->getFoldersStorage().removeNumberInFolder((*it)->getParent());
-        m_favoriteService->deleteBookmark((*it)->getAddress());
-    }
-    items.clear();
-}
-
 void SimpleUI::onEditFolderPopupClicked(const std::string& newName, services::SharedBookmarkItem item)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1150,32 +1424,37 @@ void SimpleUI::onEditFolderPopupClicked(const std::string& newName, services::Sh
     services::SharedBookmarkItem parentItem = m_favoriteService->getBookmarkItem(item->getParent());
     if (m_viewManager.topOfStack() == m_bookmarkManagerUI)
         m_bookmarkManagerUI->addBookmarkItems(nullptr, m_favoriteService->getAllBookmarkItems(parentItem->getId()));
+
+    tools::EflTools::createToastPopup(_("IDS_BR_TPOP_FOLDER_RENAMED"));
 }
 
-void SimpleUI::onDeleteFolderPopupClicked(PopupButtons button)
+void SimpleUI::hideBottomBar(const bool& state)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (button == DELETE && m_storageService->getFoldersStorage().ifFolderExists(m_folder_name)) {
-        unsigned int id = m_storageService->getFoldersStorage().getFolderId(m_folder_name);
-        onRemoveFoldersClicked(m_favoriteService->getBookmarks(id));
-        m_storageService->getFoldersStorage().deleteFolder(id);
-    }
+    if (m_pwa.isActive())
+        return;
+
+    if (m_webEngine->getLayout() && !m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
+        m_webEngine->setIMEState(state);
+    else
+        m_webPageUI->bottombarOffsetSet(
+            -boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT)) * (state ? 2 : 1));
 }
 
 void SimpleUI::onUrlIMEOpened(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SimpleUI* self = reinterpret_cast<SimpleUI*>(data);
-    self->m_webPageUI->showBottomBar(false);
+    SimpleUI* self = static_cast<SimpleUI*>(data);
     self->setwvIMEStatus(true);
+    self->hideBottomBar(true);
 }
 
 void SimpleUI::onUrlIMEClosed(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    SimpleUI* self = reinterpret_cast<SimpleUI*>(data);
-    self->m_webPageUI->showBottomBar(true);
+    SimpleUI* self = static_cast<SimpleUI*>(data);
     self->setwvIMEStatus(false);
+    self->hideBottomBar(false);
 }
 
 void SimpleUI::onSnapshotCaptured(std::shared_ptr<tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type)
@@ -1208,43 +1487,18 @@ void SimpleUI::onGenerateThumb(basic_webengine::TabId tabId)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     const int THUMB_WIDTH = boost::any_cast<int>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH));
+            Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH));
     const int THUMB_HEIGHT = boost::any_cast<int>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT));
+            Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT));
     tools::BrowserImagePtr snapshotImage = m_webEngine->getSnapshotData(tabId, THUMB_WIDTH, THUMB_HEIGHT, false, tools::SnapshotType::SYNC);
     m_tabService->updateTabItemSnapshot(tabId, snapshotImage);
 }
 
-void SimpleUI::onGenerateFavicon(basic_webengine::TabId tabId)
+void SimpleUI::onXF86MenuPressed()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    m_tabService->updateTabItemFavicon(tabId, m_webEngine->getFavicon());
-}
-
-void SimpleUI::onCreateTabId()
-{
-    int id = m_tabService->createTabId();
-    m_webEngine->onTabIdCreated(id);
-}
-
-void SimpleUI::onHistoryRemoved(const std::string& uri)
-{
-    BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
-}
-
-void SimpleUI::onReturnPressed(MenuButton *m)
-{
-    BROWSER_LOGD("[%s]", __func__);
-    m_platformInputManager->returnPressed.disconnect_all_slots();
-    m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
-    m->hidePopup();
-}
-
-void SimpleUI::setwvIMEStatus(bool status)
-{
-    BROWSER_LOGD("[%s]", __func__);
-    m_wvIMEStatus = status;
+    if (m_viewManager.topOfStack() == m_webPageUI)
+        m_webPageUI->returnFocusAfterHideContextMenu();
 }
 
 void SimpleUI::onXF86BackPressed()
@@ -1270,6 +1524,7 @@ void SimpleUI::onBackPressed()
         m_webPageUI->getQuickAccessEditUI()->backPressed();
     } else if (m_viewManager.topOfStack() == nullptr) {
         switchViewToQuickAccess();
+        m_webPageUI->setShouldOpenNewTab(true);
     } else if ((m_viewManager.topOfStack() == m_webPageUI)) {
         if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
             if (m_quickAccess->canBeBacked(m_webEngine->tabsCount())) {
@@ -1279,16 +1534,28 @@ void SimpleUI::onBackPressed()
             }
         } else {
             m_webEngine->backButtonClicked();
+            m_webPageUI->setShouldOpenNewTab(true);
         }
     } else {
         popTheStack();
     }
+#if DUMMY_BUTTON
+    if (m_viewManager.topOfStack() == m_webPageUI && m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE))
+        m_webPageUI->setDummyButtonFocus();
+#endif
 }
 
-void SimpleUI::showPopup(interfaces::AbstractPopup* popup)
+void SimpleUI::onPWABackPressed()
 {
-    BROWSER_LOGD("[%s]", __func__);
-    m_popupVector.push_back(popup);
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (m_wvIMEStatus) {    // if IME opened
+        return;
+    } else if (m_webEngine->isBackEnabled()) {
+        m_webEngine->backButtonClicked();
+    } else {
+        minimizeBrowser();
+    }
 }
 
 void SimpleUI::dismissPopup(interfaces::AbstractPopup* popup)
@@ -1312,6 +1579,16 @@ void SimpleUI::dismissPopup(interfaces::AbstractPopup* popup)
 void SimpleUI::onMenuButtonPressed()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!m_popupVector.empty())     // do not show contex menu when popup is opened
+        return;
+    if (m_viewManager.topOfStack() == m_webPageUI &&
+        m_webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE) &&
+        m_webEngine->isFullScreenMode())
+        return;
+
+    if (m_findOnPageUI->isVisible()) {
+        closeFindOnPageUI();
+    }
     auto view = dynamic_cast<interfaces::AbstractContextMenu*>(m_viewManager.topOfStack().get());
     if (view)
         view->showContextMenu();
@@ -1319,24 +1596,31 @@ void SimpleUI::onMenuButtonPressed()
 
 bool SimpleUI::isManualRotation(const sAUI& view)
 {
-    WebPageUI *webPageUI = dynamic_cast<WebPageUI*>(view.get());
-    return (webPageUI && webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE));
+    if (m_splash_screen.isVisible())
+        return false;
+    if (m_pwa.isActive()) {
+        return dynamic_cast<WebPageMin*>(view.get());
+    } else {
+        WebPageUI *webPageUI = dynamic_cast<WebPageUI*>(view.get());
+        return (webPageUI && webPageUI->stateEquals(WPUState::MAIN_WEB_PAGE));
+    }
 }
 
 void SimpleUI::enableManualRotation(bool enable)
 {
     m_manualRotation = enable;
     BROWSER_LOGD("[%s:%d]: %d", __PRETTY_FUNCTION__, __LINE__, m_manualRotation);
-    elm_win_wm_rotation_manual_rotation_done_set(main_window,
+    elm_win_wm_rotation_manual_rotation_done_set(m_main_window,
         m_manualRotation ? EINA_TRUE : EINA_FALSE);
 }
 
 void SimpleUI::rotatePrepared()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (m_manualRotation && elm_win_wm_rotation_manual_rotation_done_get(main_window)) {
-        elm_win_wm_rotation_manual_rotation_done(main_window);
-        m_webPageUI->orientationChanged();
+    if (m_manualRotation && elm_win_wm_rotation_manual_rotation_done_get(m_main_window)) {
+        elm_win_wm_rotation_manual_rotation_done(m_main_window);
+        if (m_webPageUI)
+            m_webPageUI->orientationChanged();
     }
 }
 
@@ -1345,7 +1629,8 @@ void SimpleUI::onRotation()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     m_current_angle = m_temp_angle;
-    m_webEngine->orientationChanged();
+    if (m_webEngine)
+        m_webEngine->orientationChanged();
     if (!m_manualRotation) {
         if (m_bookmarkFlowUI)
             m_bookmarkFlowUI->orientationChanged();
@@ -1366,25 +1651,20 @@ void SimpleUI::onRotation()
 void SimpleUI::__orientation_changed(void* data, Evas_Object*, void*)
 {
     SimpleUI* simpleUI = static_cast<SimpleUI*>(data);
-    int event_angle = elm_win_rotation_get(simpleUI->main_window);
+    int event_angle = elm_win_rotation_get(simpleUI->m_main_window);
+
     if (simpleUI->m_current_angle != event_angle) {
         simpleUI->m_temp_angle = event_angle;
         BROWSER_LOGD("[%s:%d] previous angle: [%d] event angle: [%d]", __PRETTY_FUNCTION__, __LINE__,
-                        simpleUI->m_current_angle, simpleUI->m_temp_angle);
+            simpleUI->m_current_angle, simpleUI->m_temp_angle);
+        if (simpleUI->m_splash_screen.isVisible()) {
+            simpleUI->m_splash_screen.hide();
+            simpleUI->m_splash_screen.show(simpleUI->m_pwa);
+        }
         simpleUI->onRotation();
     }
 }
 
-bool SimpleUI::isLandscape()
-{
-    return elm_win_rotation_get(main_window) % 180;
-}
-
-int SimpleUI::getRotation()
-{
-    return elm_win_rotation_get(main_window);
-}
-
 void SimpleUI::rotationType(rotationLock lock)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1392,17 +1672,17 @@ void SimpleUI::rotationType(rotationLock lock)
     switch (lock) {
         case rotationLock::portrait: {
             const int rots[] = {0};
-            elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+            elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
             break;
         }
         case rotationLock::landscape: {
             const int rots[] = {90};
-            elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+            elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
             break;
         }
         case rotationLock::noLock: {
             const int rots[] = {0, 90, 180, 270};
-            elm_win_wm_rotation_available_rotations_set(main_window, rots, sizeof(rots)/sizeof(int));
+            elm_win_wm_rotation_available_rotations_set(m_main_window, rots, sizeof(rots)/sizeof(int));
             break;
         }
         default:
@@ -1410,11 +1690,6 @@ void SimpleUI::rotationType(rotationLock lock)
     }
 }
 
-Evas_Object* SimpleUI::getMainWindow()
-{
-    return main_window;
-}
-
 void SimpleUI::downloadStarted(int status)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1426,29 +1701,29 @@ void SimpleUI::downloadStarted(int status)
             popup->show(_("IDS_BR_HEADER_UNABLE_TO_DOWNLOAD_ABB"), false);
             break;
         case DOWNLOAD_STARTING_DOWNLOAD:
-               connection_type_e connection_type;
-               connection_h handle;
-
-               if (connection_create(&handle) < 0) {
-                       BROWSER_LOGD("Fail to create network handle");
-               }
-               if (connection_get_type(handle, &connection_type) < 0) {
-                       BROWSER_LOGD("Fail to get download type");
-                       if (connection_destroy(handle) < 0) {
-                               BROWSER_LOGD("Fail to get download type");
-                       }
-               }
-
-               if (connection_type == CONNECTION_TYPE_BT){
+            connection_type_e connection_type;
+            connection_h handle;
+
+            if (connection_create(&handle) < 0) {
+                BROWSER_LOGD("Fail to create network handle");
+            }
+            if (connection_get_type(handle, &connection_type) < 0) {
+                BROWSER_LOGD("Fail to get download type");
+                if (connection_destroy(handle) < 0) {
+                    BROWSER_LOGD("Fail to get download type");
+                }
+            }
+
+            if (connection_type == CONNECTION_TYPE_BT){
                 popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), _("Unable to use tethering."), false);
-               }
-               else{
-                       popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), false);
-               }
-
-               if (connection_destroy(handle) < 0) {
-                       BROWSER_LOGD("Fail to destroy network handle");
-               }
+            }
+            else{
+                popup->show(_("IDS_BR_POP_STARTING_DOWNLOAD_ING"), false);
+            }
+
+            if (connection_destroy(handle) < 0) {
+                BROWSER_LOGD("Fail to destroy network handle");
+            }
             break;
         case DOWNLOAD_SAVEDPAGES:
             popup->show(_("IDS_BR_OPT_SAVEDPAGES"), false);
@@ -1471,11 +1746,8 @@ void SimpleUI::loadStarted()
     m_webPageUI->loadStarted();
     if (m_findOnPageUI->isVisible())
         closeFindOnPageUI();
-}
-
-void SimpleUI::progressChanged(double progress)
-{
-    m_webPageUI->progressChanged(progress);
+    if (!m_pwa.isActive())
+        m_splash_screen.hide();
 }
 
 void SimpleUI::loadFinished()
@@ -1508,45 +1780,22 @@ void SimpleUI::filterURL(const std::string& url)
     m_webPageUI->getURIEntry().clearFocus();
 }
 
-void SimpleUI::onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr)
-{
-    string editedUrl(*editedUrlPtr);
-    int historyItemsVisibleMax =
-            m_webPageUI->getUrlHistoryList()->getItemsNumberMax();
-    int minKeywordLength =
-            m_webPageUI->getUrlHistoryList()->getKeywordLengthMin();
-    std::shared_ptr<services::HistoryItemVector> result =
-            m_historyService->getHistoryItemsByKeywordsString(editedUrl,
-                    historyItemsVisibleMax, minKeywordLength, true);
-    m_webPageUI->getUrlHistoryList()->onURLEntryEditedByUser(editedUrl, result);
-}
-
-void SimpleUI::scrollView(const int& dx, const int& dy)
-{
-    m_webEngine->scrollView(dx, dy);
-}
-
 void SimpleUI::showFindOnPageUI(const std::string& str)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_findOnPageUI);
+    assert(m_findOnPageUI.get());
     m_findOnPageUI->show();
-    if (!str.empty())
-        m_findOnPageUI->set_text(str.c_str());
-}
-
-void SimpleUI::findWord(const struct FindData& fdata)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_webEngine->findWord(fdata.input_str, fdata.forward, fdata.func, fdata.data);
+    m_findOnPageUI->set_text(str.c_str());
 }
 
 void SimpleUI::closeFindOnPageUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_findOnPageUI);
+    assert(m_findOnPageUI.get());
+    assert(m_webEngine.get());
     if (m_findOnPageUI)
         m_findOnPageUI->hideUI();
+    m_webEngine->setBarsShown(true);
 }
 
 void SimpleUI::showTabUI()
@@ -1570,9 +1819,8 @@ void SimpleUI::refetchTabUIData() {
 void SimpleUI::newTabClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (!checkIfCreate())
-        return;
     showHomePage();
+    m_webPageUI->setShouldOpenNewTab(true);
 }
 
 void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
@@ -1582,48 +1830,47 @@ void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
     popStackTo(m_webPageUI);
 }
 
-void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_webEngine->closeTab(tabId);
-}
-
-int SimpleUI::tabsCount()
-{
-    return m_webEngine->tabsCount();
-}
-
-#if PWA
 void SimpleUI::pwaPopupRequest()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
     popup->addButton(OK);
     popup->addButton(CANCEL);
-    popup->buttonClicked.connect(boost::bind(&SimpleUI::pwaPopupButtonClicked, this, _1));
+    popup->addButton(NEVER);
+    popup->buttonClicked.connect(
+        [this](const auto& button){ this->pwaPopupButtonClicked(button); });
     popup->setTitle(m_webEngine->getTitle());
     popup->setMessage(_("IDS_BR_OPT_ADD_TO_HOME_SCREEN_ABB"));
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    popup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    popup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
 void SimpleUI::pwaPopupButtonClicked(const PopupButtons& button)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto uri = m_webEngine->getURI();
+
     switch (button) {
         case OK:
-            BROWSER_LOGD("[%s:%d] pwaPopup create !", __PRETTY_FUNCTION__, __LINE__);
-            m_webEngine->requestManifest();
+            BROWSER_LOGD("[%s:%d] pwaPopup OK !", __PRETTY_FUNCTION__, __LINE__);
+            m_webEngine->setPWAData();
+            m_storageService->getPWAStorage().addPWAItem(uri, 1, 0);
             break;
         case CANCEL:
-            BROWSER_LOGD("[%s:%d] pwaPopup deny !", __PRETTY_FUNCTION__, __LINE__);
+            BROWSER_LOGD("[%s:%d] pwaPopup DENY !", __PRETTY_FUNCTION__, __LINE__);
+            m_storageService->getPWAStorage().addPWAItem(uri, 0, 0);
+            break;
+        case NEVER:
+            BROWSER_LOGD("[%s:%d] pwaPopup NEVER !", __PRETTY_FUNCTION__, __LINE__);
+            m_storageService->getPWAStorage().addPWAItem(uri, 0, 1);
             break;
         default:
             BROWSER_LOGW("[%s:%d] Unknown button type!", __PRETTY_FUNCTION__, __LINE__);
     }
 }
-#endif
 
 void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
 {
@@ -1644,11 +1891,16 @@ void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr web
                 popup->addButton(CONTINUE);
                 auto popupData = std::make_shared<CertificatePopupData>();
                 popupData->cert = cert;
-                popup->buttonClicked.connect(boost::bind(&SimpleUI::certPopupButtonClicked, this, _1, popupData));
+                popup->buttonClicked.connect(
+                    [=](const auto& button) mutable {
+                        this->certPopupButtonClicked(button, popupData);
+                });
                 popup->setTitle(_("IDS_BR_HEADER_SITE_NOT_TRUSTED_ABB"));
                 popup->setMessage(_("IDS_BR_BODY_SECURITY_CERTIFICATE_PROBLEM_MSG"));
-                popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-                popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+                popup->popupShown.connect(
+                    [this](const auto& popup){ this->showPopup(popup); });
+                popup->popupDismissed.connect(
+                    [this](const auto& popup){ this->dismissPopup(popup); });
                 popup->show();
             }
         }
@@ -1674,8 +1926,10 @@ void SimpleUI::showUnsecureConnectionPopup()
     popup->addButton(OK);
     popup->setTitle("Unsecure connection!");
     popup->setMessage("The page which you're trying to open cannot be displayed, unsecure connection detected.");
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    popup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    popup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
@@ -1683,14 +1937,17 @@ void SimpleUI::showCertificatePopup(const std::string& host, const std::string&
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     auto popup = ContentPopup::createPopup(m_viewManager.getContent());
-    popup->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this));
+    popup->isLandscape.connect(
+        [this]{ return this->isLandscape(); });
     m_certificateContents->initUI(popup->getMainLayout());
     m_certificateContents->setCurrentTabCertData(host, pem, type);
     popup->setContent(m_certificateContents->getContent());
     popup->addButton(OK);
     popup->setTitle(_("IDS_BR_HEADER_SECURITY_CERTIFICATE"));
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    popup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    popup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
@@ -1755,17 +2012,17 @@ void SimpleUI::onDefSearchEngineClicked()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     auto popup = RadioPopup::createPopup(m_viewManager.getContent());
-    popup->setTitle(_(Translations::SettingsDefaultSearchEngineTitle.c_str()));
+    popup->setTitle(_(Translations::instance().SettingsDefaultSearchEngineTitle.c_str()));
     popup->addRadio(RadioButtons::GOOGLE);
     popup->addRadio(RadioButtons::YAHOO);
     popup->addRadio(RadioButtons::BING);
-    auto stateString = []() -> std::string {
+    auto stateString = [] {
         auto sig =
             SPSC.getWebEngineSettingsParamString(
                 basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
         return (sig && !sig->empty()) ?
             *sig :
-            Translations::Google;
+            Translations::instance().Google;
     }();
     auto state = RadioPopup::translateButtonState(stateString);
     popup->setState(state);
@@ -1775,9 +2032,9 @@ void SimpleUI::onDefSearchEngineClicked()
             static_cast<int>(button));
         dismissPopup(popup);
     });
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+    popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
     popup->popupDismissed.connect(
-        boost::bind(&SimpleUI::dismissPopup, this, _1));
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
@@ -1787,7 +2044,7 @@ void SimpleUI::onSaveContentToClicked()
 
     auto popup = RadioPopup::createPopup(m_viewManager.getContent());
     SPSC.settingsSaveContentRadioPopupPtr(popup);
-    popup->setTitle(_(Translations::SettingsAdvancedSaveContentTitle.c_str()));
+    popup->setTitle(_(Translations::instance().SettingsAdvancedSaveContentTitle.c_str()));
     popup->addRadio(RadioButtons::DEVICE);
     popup->addRadio(RadioButtons::SD_CARD);
     auto stateString = []() -> std::string {
@@ -1796,7 +2053,7 @@ void SimpleUI::onSaveContentToClicked()
                 basic_webengine::WebEngineSettings::SAVE_CONTENT_LOCATION);
         return (sig && !sig->empty()) ?
             *sig :
-            Translations::Device;
+            Translations::instance().Device;
     }();
     auto state = RadioPopup::translateButtonState(stateString);
     popup->setState(state);
@@ -1806,18 +2063,12 @@ void SimpleUI::onSaveContentToClicked()
         dismissPopup(popup);
         SPSC.settingsSaveContentRadioPopupPtr(nullptr);
     });
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+    popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
     popup->popupDismissed.connect(
-        boost::bind(&SimpleUI::dismissPopup, this, _1));
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
-std::string SimpleUI::requestSettingsCurrentPage()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    return m_webEngine->getURI();
-}
-
 void SimpleUI::selectSettingsOtherPageChange()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1835,7 +2086,7 @@ void SimpleUI::selectSettingsOtherPageChange()
             m_settingsUI->updateButtonMap();
         }
     });
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
+    popup->popupShown.connect([this](const auto& popup){ this->showPopup(popup); });
     popup->popupDismissed.connect(
         [this](interfaces::AbstractPopup* popup){
             dismissPopup(popup);
@@ -1852,8 +2103,6 @@ void SimpleUI::switchToMobileMode()
         m_webEngine->switchToMobileMode();
         popStackTo(m_webPageUI);
         m_webEngine->reload();
-    } else {
-        m_quickAccess->setDesktopMode(false);
     }
 }
 
@@ -1863,8 +2112,6 @@ void SimpleUI::switchToDesktopMode()
     if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
         m_webEngine->switchToDesktopMode();
         m_webEngine->reload();
-    } else {
-        m_quickAccess->setDesktopMode(true);
     }
 }
 
@@ -1876,6 +2123,7 @@ void SimpleUI::showBookmarkFlowUI()
 
     bool state = m_favoriteService->bookmarkExists(uri);
     m_bookmarkFlowUI->setState(state);
+    m_bookmarkFlowUI->setQaState(quickAccessExist(uri));
 
     if (state) {
         tizen_browser::services::BookmarkItem bookmarkItem;
@@ -1903,43 +2151,36 @@ void SimpleUI::showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> par
 void SimpleUI::showHomePage()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto stateString = []() -> std::string {
-        auto sig =
-            SettingsPrettySignalConnector::Instance().
-                getWebEngineSettingsParamString(
-                    basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
-        return (sig && !sig->empty()) ?
-            *sig :
-            SettingsHomePage::DEF_HOME_PAGE;
-    }();
-    auto it = stateString.find(Translations::CurrentPage);
-    if (!stateString.compare(SettingsHomePage::QUICK_PAGE)) {
+
+    auto sig =
+        SettingsPrettySignalConnector::Instance().
+            getWebEngineSettingsParamString(
+                basic_webengine::WebEngineSettings::CURRENT_HOME_PAGE);
+    auto stateString = (sig && !sig->empty()) ?
+        *sig :
+        SettingsHomePage::DEF_HOME_PAGE;
+
+    auto it = stateString.find(Translations::instance().CurrentPage);
+    if (!stateString.compare(Translations::instance().QuickPage.c_str())) {
         switchViewToQuickAccess();
         m_quickAccess->showQuickAccess();
         return;
-    } else if (!stateString.compare(SettingsHomePage::MOST_VISITED_PAGE)) {
+    } else if (!stateString.compare(Translations::instance().MostVisitedPage.c_str())) {
         switchViewToQuickAccess();
         m_quickAccess->showMostVisited();
         return;
     } else if (it != std::string::npos) {
-        stateString.erase(it, Translations::CurrentPage.length());
+        stateString.erase(it, Translations::instance().CurrentPage.length());
     }
     auto url = m_webPageUI->getURIEntry().rewriteURI(stateString);
     popStackTo(m_webPageUI);
     openNewTab(url);
 }
 
-void SimpleUI::redirectedWebPage(const std::string& oldUrl, const std::string& newUrl)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    BROWSER_LOGD("Redirect from %s to %s", oldUrl.c_str(), newUrl.c_str());
-    m_historyService->clearURLHistory(oldUrl);
-}
-
 void SimpleUI::settingsDeleteSelectedData(const std::map<int, bool>& options)
 {
     BROWSER_LOGD("[%s]: Deleting selected data", __func__);
-    M_ASSERT(m_viewManager);
+    assert(m_viewManager.get());
     bool isSelected = false;
     for (auto& it : options) {
         if (it.second) {
@@ -1951,11 +2192,14 @@ void SimpleUI::settingsDeleteSelectedData(const std::map<int, bool>& options)
         TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
         popup->addButton(OK);
         popup->addButton(CANCEL);
-        popup->buttonClicked.connect(boost::bind(&SimpleUI::onDeleteSelectedDataButton, this, _1, options));
+        popup->buttonClicked.connect(
+            [&, this](const auto& button){ this->onDeleteSelectedDataButton(button, options); });
         popup->setTitle("Delete");
         popup->setMessage("The selected web browsing data will be deleted.");
-        popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-        popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+        popup->popupShown.connect(
+            [this](const auto& popup){ this->showPopup(popup); });
+        popup->popupDismissed.connect(
+            [this](const auto& popup){ this->dismissPopup(popup); });
         popup->show();
     }
 }
@@ -1971,6 +2215,7 @@ void SimpleUI::onDeleteSelectedDataButton(const PopupButtons& button, const std:
             if (it.first == BROWSING_HISTORY && it.second) {
                 BROWSER_LOGD("clear history" );
                 m_historyService->clearAllHistory();
+                m_storageService->getPWAStorage().deletePWAItems();
             } else if (it.first == CACHE && it.second) {
                 BROWSER_LOGD("clear cache");
                 m_webEngine->clearCache();
@@ -1982,8 +2227,8 @@ void SimpleUI::onDeleteSelectedDataButton(const PopupButtons& button, const std:
                 m_webEngine->clearPasswordData();
             } else if (it.first == DEL_PERS_AUTO_FILL && it.second) {
                 BROWSER_LOGD("clear autofill forms");
-                m_webEngine->clearFormData();
                 SPSC.autoFillCleared();
+                m_webEngine->clearFormData();
             } else if (it.first == LOCATION && it.second) {
                 BROWSER_LOGD("clear location");
             }
@@ -1996,40 +2241,57 @@ void SimpleUI::onDeleteSelectedDataButton(const PopupButtons& button, const std:
 
 void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button)
 {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    if (button == CLOSE_TAB) {
-        BROWSER_LOGD("[%s]: CLOSE TAB", __func__);
-        closeTab();
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    if (button == OK) {
+        BROWSER_LOGD("[%s:%d] Closing oldest tab and opening requested", __PRETTY_FUNCTION__, __LINE__);
+        if (m_tabUI->getPopupDecision())
+            m_storageService->getSettingsStorage().setSettingsBool(TAB_LIMIT_DECISION, true);
+        closeOldestTab();
+        switchToTab(m_webEngine->openRequestedPage());
     }
+    while (m_popupVector.size() > 1)
+        m_popupVector.front()->onBackPressed();
 }
 
-void SimpleUI::tabCreated()
+std::string SimpleUI::createSearchQuery(const std::string& text)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    const std::string searchEngine  = [this] {
+        auto sig =
+            SPSC.getWebEngineSettingsParamString(
+                basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
+        return (sig && !sig->empty()) ?
+            *sig :
+            Translations::instance().Google;
+    }();
 
-    int tabs = m_webEngine->tabsCount();
-    m_webPageUI->setTabsNumber(tabs);
+    return SearchEngineTranslation::createSearchQuery(text, searchEngine);
 }
 
 bool SimpleUI::checkIfCreate()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    int tabs = m_webEngine->tabsCount();
+    if (m_webEngine->tabsCount() >= m_tabLimit) {
+        if (m_storageService->getSettingsStorage().getSettingsBool(TAB_LIMIT_DECISION, false)) {
+            closeOldestTab();
+            return true;
+        }
 
-    if (tabs >= m_tabLimit) {
-        TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
+        ContentPopup* popup = ContentPopup::createPopup(m_viewManager.getContent());
+        popup->addButton(CANCEL);
         popup->addButton(OK);
-        popup->buttonClicked.connect(boost::bind(&SimpleUI::tabLimitPopupButtonClicked, this, _1));
-        popup->setTitle(_("Maximum tab count reached"));
-        popup->setMessage("Close other tabs to open another new tab");
-        popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-        popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+        popup->buttonClicked.connect(
+            [this](const auto& button){ this->tabLimitPopupButtonClicked(button); });
+        popup->setTitle("IDS_BR_HEADER_COULDNT_OPEN_NEW_TAB_ABB");
+        popup->setContent(m_tabUI->getPopupContent(popup->getMainLayout()));
+        popup->popupShown.connect(
+            [this](const auto& popup){ this->showPopup(popup); });
+        popup->popupDismissed.connect(
+            [this](const auto& popup){ this->dismissPopup(popup); });
         popup->show();
         return false;
-    }
-    else
+    } else
         return true;
 }
 
@@ -2054,24 +2316,8 @@ void SimpleUI::changeEngineState()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     m_webEngine->changeState();
-#if PWA
-    if (!m_alreadyOpenedPWA)
-#endif
-        m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
+    m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
     updateView();
-
-}
-
-void SimpleUI::windowCreated()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    switchViewToWebPage();
-}
-
-void SimpleUI::minimizeBrowser()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_win_lower(main_window);
 }
 
 void SimpleUI::engineTabClosed(const basic_webengine::TabId& id)
@@ -2087,29 +2333,19 @@ void SimpleUI::engineTabClosed(const basic_webengine::TabId& id)
         switchViewToWebPage();
 }
 
-void SimpleUI::searchWebPage(std::string &text, int flags)
-{
-    m_webEngine->searchOnWebsite(text, flags);
-}
-
-void SimpleUI::showPasswordUI()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    pushViewToStack(m_tabUI->getPasswordUI());
-}
-
 void SimpleUI::onFirstSecretMode()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     TextPopup* popup = TextPopup::createPopup(m_viewManager.getContent());
     popup->addButton(OK);
     popup->setTitle(_("IDS_BR_HEADER_DONT_USE_PASSWORD_ABB"));
-    popup->setMessage("To protect your Secret mode data, create a password. "
-        "If you Use Secret mode without creating a password, you will not be able to "
-        "prevent others from viewing your browser and search history, bookmarks, And saved pages.");
-    popup->buttonClicked.connect(boost::bind(&TabUI::switchToSecretFirstTime, m_tabUI.get()));
-    popup->popupShown.connect(boost::bind(&SimpleUI::showPopup, this, _1));
-    popup->popupDismissed.connect(boost::bind(&SimpleUI::dismissPopup, this, _1));
+    popup->setMessage(_("IDS_BR_POP_TO_PROTECT_YOUR_SECRET_MODE_DATA_CREATE_A_PASSWORD_IF_YOU_USE_SECRET_MODE_WITHOUT_CREATING_A_PASSWORD_MSG"));
+    popup->buttonClicked.connect(
+        [this](const auto&){ m_tabUI->switchToSecretFirstTime(); });
+    popup->popupShown.connect(
+        [this](const auto& popup){ this->showPopup(popup); });
+    popup->popupDismissed.connect(
+        [this](const auto& popup){ this->dismissPopup(popup); });
     popup->show();
 }
 
@@ -2119,9 +2355,9 @@ void SimpleUI::addBookmark(BookmarkUpdate bookmark_update)
     if (m_favoriteService) {
         if (m_webEngine && !m_webEngine->getURI().empty()) {
             const int THUMB_HEIGHT = boost::any_cast<int>(
-                tizen_browser::config::Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT));
+                Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_HEIGHT));
             const int THUMB_WIDTH = boost::any_cast<int>(
-                tizen_browser::config::Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH));
+                Config::getInstance().get(CONFIG_KEY::FAVORITESERVICE_THUMB_WIDTH));
             m_favoriteService->addBookmark(m_webEngine->getURI(), bookmark_update.title, std::string(),
                 m_webEngine->getSnapshotData(THUMB_WIDTH, THUMB_HEIGHT, tools::SnapshotType::ASYNC_BOOKMARK),
                 m_webEngine->getFavicon(), bookmark_update.folder_id);
@@ -2155,11 +2391,7 @@ void SimpleUI::deleteBookmark()
         ret ?
         "Bookmark deletion has failed!" :
         "Bookmark has been deleted successfully.");
-    auto toast(tools::EflTools::createToastPopup(
-        m_viewManager.getContent(),
-        3.0,
-        text));
-    evas_object_show(toast);
+    tools::EflTools::createToastPopup(text);
 }
 
 void SimpleUI::settingsOverrideUseragent(const std::string& userAgent)
@@ -2182,11 +2414,11 @@ void SimpleUI::settingsOverrideUseragent(const std::string& userAgent)
             _("IDS_BR_SK_DONE"),
             _("IDS_BR_SK_CANCEL_ABB"));
         inputPopup->button_clicked.connect(
-            boost::bind(&SimpleUI::onOverrideUseragentButton, this, _1));
+            [this](const auto& ua){ this->onOverrideUseragentButton(ua); });
         inputPopup->popupShown.connect(
-            boost::bind(&SimpleUI::showPopup, this, _1));
+            [this](const auto& popup){ this->showPopup(popup); });
         inputPopup->popupDismissed.connect(
-            boost::bind(&SimpleUI::dismissPopup, this, _1));
+            [this](const auto& popup){ this->dismissPopup(popup); });
         inputPopup->show();
     }
     else {
index c05684f..3b3831b 100755 (executable)
 #include "AbstractContextMenu.h"
 #include "AbstractMainWindow.h"
 #include "AbstractService.h"
-#include "AbstractFavoriteService.h"
-#include "ServiceFactory.h"
 #include "service_macros.h"
-
-// components
-#include "WebPageUI.h"
-#include "AbstractWebEngine.h"
-#include "TabOrigin.h"
-#include "HistoryUI.h"
-#include "FindOnPageUI.h"
-#include "SettingsUI.h"
-#include "SettingsMain.h"
-#include "SettingsHomePage.h"
-#include "SettingsPrivacy.h"
-#include "SettingsManager.h"
-#include "TextPopup_mob.h"
-#include "QuickAccess.h"
-#include "TabUI.h"
-#include "TabId.h"
-#include "HistoryService.h"
 #include "TabServiceTypedef.h"
-#include "BookmarkFlowUI.h"
-#include "BookmarkManagerUI.h"
-#include "PlatformInputManager.h"
-#include "StorageService.h"
-#include "CertificateContents.h"
 
 // other
-#include "Action.h"
-#include "InputPopup.h"
-#include "SimplePopup.h"
-#include "ContentPopup_mob.h"
-#include "WebConfirmation.h"
-#include "ViewManager.h"
-#include "MenuButton.h"
-#include "NaviframeWrapper.h"
-#if PWA
-#include "ProgressiveWebApp.h"
-#endif
 #include <functional>
 #include <future>
 
-#define CONNECT_COUNT 2
+const int CONNECT_COUNT = 2;
 
 namespace tizen_browser{
+
+namespace basic_webengine {
+class AbstractWebEngine;
+class TabOrigin;
+class TabId;
+class WebConfirmation;
+}
+
+namespace services {
+class HistoryService;
+class PlatformInputManager;
+class StorageService;
+class CertificateContents;
+class BookmarkService;
+}
+
 namespace base_ui{
+class WebPageUI;
+class WebPageMin;
+class HistoryUI;
+class FindOnPageUI;
+class SettingsUI;
+class SettingsManager;
+class QuickAccess;
+class TabUI;
+class BookmarkFlowUI;
+class BookmarkManagerUI;
+class Action;
+class InputPopup;
+class ContentPopup;
+class ViewManager;
+class MenuButton;
+class NaviframeWrapper;
+class ProgressiveWebApp;
+class SplashScreen;
 
 template <>
 void AbstractMainWindow<Evas_Object>::setMainWindow(Evas_Object * rawPtr)
@@ -86,15 +85,16 @@ class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
 {
 public:
     SimpleUI(/*Evas_Object *window*/);
-    virtual ~SimpleUI();
-    virtual int exec(
+    virtual ~SimpleUI() { evas_object_del(m_window.get()); };
+    int exec(
         const std::string& _url,
         const std::string& _caller,
         const std::string& _operation) final override;
-    virtual std::string getName() final override;
-    void suspend();
-    void resume();
-    void destroyUI();
+    std::string getName() final override;
+    void suspend() final override { m_webEngine->suspend(); };
+    void resume() final override;
+    void languageChanged() final override { m_languageChanged = true; };
+    void destroyUI() final override { m_webEngine->destroyTabs(); };
 
     enum class rotationLock {
         noLock = 0,
@@ -103,14 +103,15 @@ public:
     };
 
 private:
+    void showSplashScreen();
+    void hideSplashScreen();
     // setup functions
     void prepareServices();
-#if PWA
-    std::string preparePWA(const std::string& url);
+    void preparePWAServices();
     void countCheckUrl();
-#endif
     void loadUIServices();
     void connectUISignals();
+    void connectPWASignals();
     void loadModelServices();
     void initModelServices();
     void initUIServices();
@@ -118,30 +119,17 @@ private:
     void pushViewToStack(const sAUI& view);
     void popTheStack();
     void popStackTo(const sAUI& view);
-    void faviconChanged(tools::BrowserImagePtr favicon);
     void restoreLastSession();
-    Evas_Object* createWebLayout(Evas_Object* parent);
-    Evas_Object* createErrorLayout(Evas_Object* parent);
-
-    void forwardEnable(bool enable);
 
     void downloadStarted(int status);
     void loadFinished();
-    void progressChanged(double progress);
     void loadStarted();
 
-    void setErrorButtons();
-
-    void bookmarkAdded();
-    void bookmarkDeleted();
-
-    void showQuickAccess();
     void switchViewToQuickAccess();
     void switchViewToWebPage();
     void updateView();
     void changeEngineState();
-    void windowCreated();
-    void minimizeBrowser();
+    void minimizeBrowser() { elm_win_lower(m_main_window); };
     void openNewTab(const std::string &uri, const std::string& title =
             std::string(), const boost::optional<int> adaptorId = boost::none,
             bool desktopMode = false,
@@ -149,70 +137,39 @@ private:
     void switchToTab(const tizen_browser::basic_webengine::TabId& tabId);
     void newTabClicked();
     void tabClicked(const tizen_browser::basic_webengine::TabId& tabId);
-    void closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId);
-    void tabCreated();
     bool checkIfCreate();
     void engineTabClosed(const basic_webengine::TabId& id);
 
-    std::shared_ptr<services::HistoryItemVector> getHistory();
-    std::shared_ptr<services::HistoryItemVector> getMostVisitedItems();
-    void setMostVisitedFrequencyValue(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem,
-        int visitFrequency);
-
     void onBookmarkClicked(services::SharedBookmarkItem bookmarkItem);
     void onNewQuickAccessClicked();
     void addQuickAccessItem(const std::string &urlArg, const std::string &titleArg);
-    void onQuickAccessDeleted(services::SharedQuickAccessItem quickaccessItem);
     void editQuickAccess();
     void deleteMostVisited();
     void onBookmarkEdit(services::SharedBookmarkItem bookmarkItem);
-    void onBookmarkOrderEdited(services::SharedBookmarkItem bookmarkItem);
-    void onBookmarkDeleted(services::SharedBookmarkItem bookmarkItem);
     void onNewFolderClicked(int parent);
     void onNewFolderPopupClick(const std::string& folder_name, int parent);
-    void onDeleteFolderClicked(const std::string& folder_name);
-    void onRemoveFoldersClicked(services::SharedBookmarkItemList items);
     void onEditFolderPopupClicked(const std::string& newName, services::SharedBookmarkItem item);
-    void onDeleteFolderPopupClicked(PopupButtons button);
+    void hideBottomBar(const bool& state);
     static void onUrlIMEOpened(void* data, Evas_Object*, void*);
     static void onUrlIMEClosed(void* data, Evas_Object*, void*);
 
-    void onHistoryRemoved(const std::string& uri);
-    void openURLhistory(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
-    void openURLquickaccess(services::SharedQuickAccessItem quickaccessItem, bool desktopMode);
-    /**
-     * @brief Handles 'openUrlInNewTab' signals. Uses QuickAccess to indicate
-     * desktop/mobile mode.
-     * TODO: desktop mode should be checked in WebView or QuickAcces (depends
-     * on which view is active)
-     */
     void openURL(const std::string& url);
     void openURL(const std::string& url, const std::string& title, bool desktopMode);
     void onClearHistoryAllClicked();
-    void onDeleteHistoryItems(int id);
-
-    void onMostVisitedClicked();
-    void onQuickAccessClicked();
 
     /**
      * @brief Handles 'generateThumb' signals.
      */
     void onGenerateThumb(basic_webengine::TabId tabId);
-    void onGenerateFavicon(basic_webengine::TabId tabId);
     void onSnapshotCaptured(std::shared_ptr<tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type);
-    void onCreateTabId();
 
-    void authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
     void certPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData);
 
-    void onActionTriggered(const Action& action);
     void onMenuButtonPressed();
     void handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation);
-    void setwvIMEStatus(bool status);
-#if PWA
+    void setwvIMEStatus(bool status) { m_wvIMEStatus = status; };
     void pwaPopupRequest();
     void pwaPopupButtonClicked(const PopupButtons& button);
-#endif
 
     sharedAction m_showBookmarkManagerUI;
 
@@ -225,14 +182,6 @@ private:
      */
     void filterURL(const std::string& url);
 
-    // on uri entry widget "changed,user" signal
-    void onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr);
-    // on uri entry widget "changed" signal
-    void onURLEntryEdited();
-
-    void onmostHistoryvisitedClicked();
-    void onBookmarkvisitedClicked();
-
     /**
      * @brief Check if the current page exists as a bookmark.
      *
@@ -240,10 +189,12 @@ private:
     bool checkBookmark();
 
     /**
-     * @brief Check if the current page exists as a quick access.
-     *
+     * @brief Check if the page exists as a quick access.
+     * @return True if page exist in QuickAccess database otherwise false.
      */
-    bool checkQuickAccess();
+    bool quickAccessExist(const std::string& url) const {
+        return m_storageService->getQuickAccessStorage().quickAccessItemExist(url);
+    };
 
     /**
      * @brief Adds current page to bookmarks.
@@ -259,17 +210,12 @@ private:
 
     /**
      * @brief Remove current page from bookmarks
-     *
-     * @param  ...
-     * @return void
      */
     void deleteBookmark(void);
 
     void settingsOverrideUseragent(const std::string& userAgent);
     void onOverrideUseragentButton(const std::string& newUA);
 
-    void scrollView(const int& dx, const int& dy);
-
     void showTabUI();
     void refetchTabUIData();
     void switchToMobileMode();
@@ -278,28 +224,23 @@ private:
     void showSettings(unsigned);
     void onDefSearchEngineClicked();
     void onSaveContentToClicked();
-    std::string requestSettingsCurrentPage();
+    std::string requestSettingsCurrentPage() { return m_webEngine->getURI(); };
     void selectSettingsOtherPageChange();
 
-    void onEditOtherPagePopupClicked(const std::string& newName);
     void showBookmarkFlowUI();
     void showFindOnPageUI(const std::string& str);
     void showCertificatePopup();
     void showCertificatePopup(const std::string& host, const std::string& pem, services::CertificateContents::HOST_TYPE type);
     void showUnsecureConnectionPopup();
 
-    void findWord(const struct FindData& fdata);
     void closeFindOnPageUI();
 
-    void registerHWKeyCallback();
-    void unregisterHWKeyCallback();
-
     bool isManualRotation(const sAUI& view);
     void enableManualRotation(bool enable);
     void rotatePrepared();
     void onRotation();
-    bool isLandscape();
-    int getRotation();
+    bool isLandscape() const { return elm_win_rotation_get(m_main_window) % 180; };
+    int getRotation() const { return elm_win_rotation_get(m_main_window); };
     void rotationType(rotationLock lock);
     void connectWebPageSignals();
     void connectQuickAccessSignals();
@@ -310,52 +251,47 @@ private:
     void connectBookmarkManagerSignals();
     void connectFindOnPageSignals();
     void connectWebEngineSignals();
-    void connectHistoryServiceSignals();
     void connectTabServiceSignals();
     void connectPlatformInputSignals();
     void connectCertificateSignals();
     void connectStorageSignals();
 
+    std::string handlePushSignal(const char *sender_id, const char* push_data);
+    void createPWANotification(const unsigned& id, const std::string& body);
+
     static void __orientation_changed(void* data, Evas_Object*, void*);
-    Evas_Object* getMainWindow();
+    Evas_Object* getMainWindow() const { return m_main_window; };
     void showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
                                BookmarkManagerState state);
     void showHomePage();
-    void redirectedWebPage(const std::string& oldUrl, const std::string& newUrl);
 
-    void showPopup(interfaces::AbstractPopup* popup);
+    void showPopup(interfaces::AbstractPopup* popup) { m_popupVector.push_back(popup); };
     void dismissPopup(interfaces::AbstractPopup* popup);
 
-    void closeTab();
+    void closeOldestTab() { closeTab(m_webEngine->oldestTabId()); };
+    void closeTab() { closeTab(m_webEngine->currentTabId()); };
     void closeTab(const tizen_browser::basic_webengine::TabId& id);
 
     void settingsDeleteSelectedData(const std::map<int, bool>& option);
-    void settingsResetMostVisited();
-    void settingsResetBrowser();
     void onDeleteSelectedDataButton(const PopupButtons& button, const std::map<int, bool>& options);
-    void onDeleteMostVisitedButton(std::shared_ptr<PopupData> popupData);
-    void onResetBrowserButton(PopupButtons button, std::shared_ptr<PopupData> popupData);
     void tabLimitPopupButtonClicked(PopupButtons button);
-    int tabsCount();
+    int tabsCount() const { return m_webEngine->tabsCount(); };
+    std::string createSearchQuery(const std::string& text);
 
-    void onReturnPressed(MenuButton *m);
+    void onXF86MenuPressed();
     void onXF86BackPressed();
     void onBackPressed();
+    void onPWABackPressed();
 
-    void searchWebPage(std::string &text, int flags);
-    void showPasswordUI();
     void onFirstSecretMode();
 
-    std::string edjePath(const std::string &);
-
     std::vector<interfaces::AbstractPopup*> m_popupVector;
-
     std::shared_ptr<WebPageUI> m_webPageUI;
+    std::shared_ptr<WebPageMin> m_webPageMin;
     std::shared_ptr<basic_webengine::AbstractWebEngine>  m_webEngine;
-    std::shared_ptr<interfaces::AbstractFavoriteService> m_favoriteService;
+    std::shared_ptr<services::BookmarkService> m_favoriteService;
     std::shared_ptr<services::HistoryService> m_historyService;
     services::TabServicePtr m_tabService;
-
     std::shared_ptr<BookmarkFlowUI> m_bookmarkFlowUI;
     std::shared_ptr<FindOnPageUI> m_findOnPageUI;
     std::shared_ptr<services::CertificateContents> m_certificateContents;
@@ -368,27 +304,25 @@ private:
     std::shared_ptr<services::PlatformInputManager> m_platformInputManager;
     std::shared_ptr<services::StorageService> m_storageService;
     bool m_initialised;
-    std::string m_caller;
     int m_tabLimit;
-    int m_favoritesLimit;
+    unsigned m_qaLimit;
     bool m_wvIMEStatus;
     std::string m_folder_name;
 
     //helper object used to view management
     ViewManager m_viewManager;
-    Evas_Object *main_window;
-#if PWA
+    Evas_Object *m_main_window;
+    SplashScreen m_splash_screen;
     ProgressiveWebApp m_pwa;
-    bool m_alreadyOpenedPWA;
-#endif
-    SharedNaviframeWrapper m_QAEditNaviframe;
-    Evas_Object *m_conformant;
     bool m_manualRotation;
     int m_current_angle;
     int m_temp_angle;
     std::function<void()> m_functionViewPrepare;
-    std::future<void> m_futureView;
     bool m_alreadyOpenedExecURL;
+    bool m_languageChanged;
+    std::string m_last_noti_sender;
+
+    static const std::string TAB_LIMIT_DECISION;
 };
 
 }
diff --git a/services/SimpleUI/SplashScreen.cpp b/services/SimpleUI/SplashScreen.cpp
new file mode 100755 (executable)
index 0000000..c39dab6
--- /dev/null
@@ -0,0 +1,107 @@
+#include "BrowserLogger.h"
+#include "ProgressiveWebApp.h"
+#include "SplashScreen.h"
+#include "app_common.h"
+
+namespace tizen_browser{
+namespace base_ui{
+
+SplashScreen::SplashScreen()
+    : m_main_window(nullptr)
+    , m_background(nullptr)
+    , m_image(nullptr)
+    , m_label(nullptr)
+    , m_visible(false)
+{}
+
+SplashScreen::~SplashScreen()
+{
+    if (m_label)
+        evas_object_del(m_label);
+    if (m_image)
+        evas_object_del(m_image);
+    if (m_background)
+        evas_object_del(m_background);
+}
+
+void SplashScreen::show(const ProgressiveWebApp& pwa)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_visible = true;
+    int width, height;
+    auto landscape = isLandscape();
+    if (!landscape) {
+        BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+
+    if (*landscape)
+        elm_win_screen_size_get(m_main_window, nullptr, nullptr, &height, &width);
+    else
+        elm_win_screen_size_get(m_main_window, nullptr, nullptr, &width, &height);
+
+    m_background = elm_bg_add(m_main_window);
+    evas_object_resize(m_background, width, height);
+    if (pwa.isActive() && pwa.getPWAinfo().backgroundColor > 0)
+        elm_bg_color_set(
+            m_background,
+            pwa.getPWAinfo().backgroundR,
+            pwa.getPWAinfo().backgroundG,
+            pwa.getPWAinfo().backgroundB);
+    else
+        elm_bg_color_set(m_background, 255, 255, 255);
+    evas_object_show(m_background);
+
+    m_label = elm_label_add(m_background);
+    if (pwa.isActive()) {
+        elm_object_text_set(m_label,
+            (std::string("<align=center><font=Tizen:style=Bold font_size=35>") +
+            pwa.getPWAinfo().name +
+            std::string("</font></align>")).c_str());
+        evas_object_resize(m_label, width, 60);
+        evas_object_move(m_label, 0, height * 0.75);
+        evas_object_show(m_label);
+    }
+
+    m_image = elm_image_add(m_background);
+    std::string image_path;
+    if (pwa.isActive()) {
+        evas_object_move(m_image, 0.5 * width - 128., 0.5 * height - 128.);
+        width = height = 256;
+        image_path = std::string(app_get_shared_data_path());
+        image_path += pwa.getPWAinfo().icon.substr(
+            pwa.getPWAinfo().icon.find_last_of("/"), pwa.getPWAinfo().icon.length());
+    } else {
+        image_path = std::string(ICONDIR);
+        image_path += std::string(*landscape ? "/landscape.png" : "/portrait.png");
+    }
+    elm_image_file_set(m_image, image_path.c_str(), nullptr);
+    evas_object_resize(m_image, width, height);
+    evas_object_show(m_image);
+
+    updateManualRotation();
+}
+
+void SplashScreen::hide()
+{
+    if (!m_visible)
+        return;
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_visible = false;
+    if (m_image) {
+        evas_object_del(m_image);
+        m_image = nullptr;
+    }
+    if (m_label) {
+        evas_object_del(m_label);
+        m_label = nullptr;
+    }
+    if (m_background) {
+        evas_object_del(m_background);
+        m_background = nullptr;
+    }
+    updateManualRotation();
+}
+
+}
+}
diff --git a/services/SimpleUI/SplashScreen.h b/services/SimpleUI/SplashScreen.h
new file mode 100755 (executable)
index 0000000..6dea43b
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * NaviframeLWrapper.h
+ *
+ *  Created on: Jan 12, 2017
+ *      Author: m.kawonczyk@samsung.com
+ */
+
+#ifndef SPLASHSCREEN_H
+#define SPLASHSCREEN_H
+
+#include "AbstractRotatable.h"
+#include <Elementary.h>
+#include <Evas.h>
+
+namespace tizen_browser{
+namespace base_ui{
+class ProgressiveWebApp;
+
+class SplashScreen
+    : public interfaces::AbstractRotatable
+{
+public:
+    SplashScreen();
+    ~SplashScreen();
+
+    void init(Evas_Object * parent) { m_main_window = parent; }
+    bool isVisible() const { return m_visible; }
+    void hide();
+    void show(const tizen_browser::base_ui::ProgressiveWebApp &pwa);
+    void orientationChanged() override {};
+
+    boost::signals2::signal<void ()> updateManualRotation;
+private:
+    Evas_Object * m_main_window;
+    Evas_Object * m_background;
+    Evas_Object * m_image;
+    Evas_Object * m_label;
+    bool m_visible;
+};
+
+}
+}
+
+#endif // SPLASHSCREEN_H
similarity index 85%
rename from services/SimpleUI/TextPopup_mob.cpp
rename to services/SimpleUI/TextPopup.cpp
index 7e402dc..ac8ee22 100755 (executable)
@@ -1,4 +1,4 @@
-#include "TextPopup_mob.h"
+#include "TextPopup.h"
 #include "ServiceManager.h"
 #include "AbstractMainWindow.h"
 #include <stdio.h>
@@ -38,9 +38,9 @@ TextPopup::~TextPopup()
 TextPopup::TextPopup(Evas_Object* parent)
     : m_parent(parent)
     , m_popup(nullptr)
+    , m_edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/TextPopup.edj"))
+    , m_defaultBackButton(NONE)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("SimpleUI/TextPopup.edj");
     elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
 }
 
@@ -52,15 +52,16 @@ TextPopup::TextPopup(
     , m_popup(nullptr)
     , m_title(title)
     , m_message(message)
+    , m_edjFilePath(std::string(EDJE_DIR) + std::string("SimpleUI/TextPopup.edj"))
+    , m_defaultBackButton(NONE)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("SimpleUI/TextPopup.edj");
     elm_theme_extension_add(nullptr, m_edjFilePath.c_str());
 }
 
 void TextPopup::show()
 {
-    createLayout();
+    if (!m_popup)
+        createLayout();
     popupShown(this);
 }
 
@@ -101,6 +102,12 @@ void TextPopup::_response_cb(
         BROWSER_LOGD("data is null ");
 }
 
+void TextPopup::_dismiss_cb(void* data, Evas_Object*, void*)
+{
+    auto self = static_cast<TextPopup*>(data);
+    self->dismiss();
+}
+
 void TextPopup::setTitle(const std::string& title)
 {
     m_title = title;
@@ -137,12 +144,13 @@ void TextPopup::createLayout()
 
     elm_object_translatable_part_text_set(m_popup, "default", m_message.c_str());
     elm_object_translatable_part_text_set(m_popup, "title,text", m_title.c_str());
+    evas_object_smart_callback_add(m_popup, "block,clicked", _dismiss_cb, this);
 
     for (size_t i = 0; i < m_buttons.size(); ++i) {
         auto buttonString = std::string("button") + std::to_string(i+1);
         auto btn = elm_button_add(m_popup);
         tools::EflTools::setExpandHints(btn);
-        elm_object_text_set(btn, _(buttonsTranslations[m_buttons[i].m_type].c_str()));
+        elm_object_translatable_text_set(btn, buttonsTranslations[m_buttons[i].m_type].c_str());
         evas_object_smart_callback_add(btn, "clicked", _response_cb, (void*) this);
         elm_object_part_content_set(m_popup, buttonString.c_str(), btn);
         evas_object_show(btn);
similarity index 90%
rename from services/SimpleUI/TextPopup_mob.h
rename to services/SimpleUI/TextPopup.h
index f1c301b..b4fbc1c 100755 (executable)
@@ -51,15 +51,16 @@ public:
     void setContent(Evas_Object* content);
     void addButton(const PopupButtons& button, bool dismissOnClick = true, bool defaultBackButton = false);
     void createLayout();
-    boost::signals2::signal<void (PopupButtons)> buttonClicked;
+    boost::signals2::signal<void (const PopupButtons&)> buttonClicked;
 
     ~TextPopup();
 
 private:
-    TextPopup(Evas_Object* parent);
+    explicit TextPopup(Evas_Object* parent);
     TextPopup(Evas_Object* parent, const std::string& title, const std::string& message);
 
     static void _response_cb(void* data, Evas_Object* obj, void* event_info);
+    static void _dismiss_cb(void* data, Evas_Object* obj, void*);
 
     struct Button {
         Button(PopupButtons type, bool dismissOnClick)
@@ -78,7 +79,7 @@ private:
     std::string m_title;
     std::string m_message;
     std::string m_edjFilePath;
-    PopupButtons m_defaultBackButton = NONE;
+    PopupButtons m_defaultBackButton;
 };
 
 }
diff --git a/services/SimpleUI/edc/ContentPopup_mob.edc b/services/SimpleUI/edc/ContentPopup_mob.edc
deleted file mode 100755 (executable)
index 7175dbb..0000000
+++ /dev/null
@@ -1,446 +0,0 @@
-#define DEVELOPMENT 0
-
-#define BUTTON_HEIGHT 120
-#define TITLE_HEIGHT 127
-#define TITLE_TEXT_OFFSET_X 0
-#define TITLE_TEXT_OFFSET_Y 44
-#define TITLE_TEXT_HEIGHT 45
-#define MESSAGE_OFFSET_X 44
-#define MESSAGE_OFFSET_TOP 26
-#define MESSAGE_OFFSET_BOT 52
-#define BUTTON_TEXT_OFFSET_X 50
-#define BUTTON_TEXT_OFFSET_Y 40
-#define BUTTON_TEXT_WIDTH 260
-#define BUTTON_TEXT_HEIGHT 40
-
-collections { base_scale: 2.6;
-
-    group {
-        name: "text_popup_layout";
-        data.item: "contents" "ok_button_click cancel_button_click";
-        styles {
-            style {
-                name: "title_text_style";
-                base: "font=Tizen:style=Regular font_size=45 wrap=none color=#389ae9 align=0.5 ellipsis=1";
-            }
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 0 0 102.4;
-                    align: 0.5 1.0;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1.relative: 0.0 0.2;
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "title_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0 0;
-                    min: 0 TITLE_HEIGHT;
-                    max: -1 TITLE_HEIGHT;
-                    align: 0 0;
-                    rel1 {
-                        relative: 0 0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "bg";
-                    }
-                }
-            }
-            rect {
-                name: "title_text_spacer";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    fixed: 1 1;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_bg";
-                    }
-                 }
-            }
-            rect {
-                name: "title_text_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 182 193 255; //lightpink
-                    align: 0.0 0.0;
-                    min: 0 TITLE_TEXT_HEIGHT;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 1 1;
-                        to: "title_text_spacer";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "title_bg";
-                    }
-                }
-            }
-            part {
-                name: "title_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_text_bg";
-                    }
-                    text {
-                        style: "title_text_style";
-                        align: 0 0;
-                    }
-                }
-            }
-
-            rect {
-                name: "buttons_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 255 255 255;
-                    align: 0.5 1;
-                    min: 0 BUTTON_HEIGHT;
-                    max: -1 BUTTON_HEIGHT;
-                    fixed: 0 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "buttons_swallow";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    fixed: 0 0;
-                    align: 0.0 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "buttons_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "buttons_bg";
-                    }
-                }
-            }
-            rect {
-                name: "popup_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    align: 0 0;
-                    rel1 {
-                        relative: 0 1;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1 0;
-                        to: "buttons_bg";
-                    }
-                }
-            }
-            rect {
-                name: "text_spacer_0";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 0 0 70 255;
-                    min: MESSAGE_OFFSET_X 0;
-                    max: MESSAGE_OFFSET_X 0;
-                    fixed: 1 1;
-                    align: 0 0;
-                    rel1 {
-                        relative: 0 0;
-                        to: "popup_bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "popup_bg";
-                    }
-                }
-            }
-            rect {
-                name: "text_spacer_1";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    color: 50 0 50 255;
-                    visible: DEVELOPMENT;
-                    min: MESSAGE_OFFSET_X MESSAGE_OFFSET_BOT;
-                    max: MESSAGE_OFFSET_X MESSAGE_OFFSET_BOT;
-                    fixed: 1 1;
-                    align: 1 1;
-                    rel1 {
-                        relative: 0 0;
-                        to: "popup_bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "popup_bg";
-                    }
-                }
-            }
-            part {
-                name: "content_swallow";
-                scale: 1;
-                type: SWALLOW;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    min: 0 38;
-                    max: -1 -1;
-                    align: 0 0;
-                    rel1 {
-                        relative: 1 1;
-                        to: "text_spacer_0";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "text_spacer_1";
-                    }
-                }
-            }
-        }
-    }
-    group {
-        name: "elm/button/base/text-popup-button";
-        styles {
-            style {
-                name: "button_text_style";
-                base: "font=Tizen:style=Regular font_size=40 wrap=word color=#141414 align=0.5";
-            }
-            style {
-                name: "button_text_style_dissabled";
-                base: "font=Tizen:style=Regular font_size=40 wrap=word color=#C0C0C0 align=0.5";
-            }
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 244 244 244 255;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                }
-                description {
-                    state: "pressed" 0.0;
-                    inherit: "default" 0.0;
-                    color: 224 237 251 255;
-                }
-            }
-            rect {
-                name: "divider_horizontal";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.5 0.0;
-                    color: 0 0 0 38.4;
-                    min: 0 1;
-                    max: -1 1;
-                    fixed: 0 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            rect {
-                name: "divider_vertical";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 0;
-                    align: 0.0 0.0;
-                    color: 0 0 0 38.4;
-                    min: 1 0;
-                    max: 1 -1;
-                    fixed: 1 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-                description {
-                    state: "visible" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            rect {
-                name: "text_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    align: 0.0 0.0;
-                    color: 255 0 255 255; //magenta
-                    min: 0 BUTTON_TEXT_HEIGHT;
-                    max: -1 -1;
-                    rel1 {
-                        relative: 0 0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "elm.text";
-                type: TEXTBLOCK;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "text_bg";
-                    }
-                    text {
-                        style: "button_text_style";
-                        align: 0.5 0.5;
-                    }
-                }
-                description {
-                    state: "dissabled" 0.0;
-                    inherit: "default";
-                    text.style: "button_text_style_dissabled";
-                }
-            }
-            rect {
-                name: "over";
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                    color: 0 0 0 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "visible";
-                source: "ui";
-                signal: "visible";
-                action: STATE_SET "visible" 0.0;
-                target: "divider_vertical";
-            }
-            program {
-                name: "dissabled";
-                source: "ui";
-                signal: "dissabled";
-                action: STATE_SET "dissabled" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "enabled";
-                source: "ui";
-                signal: "enabled";
-                action: STATE_SET "default" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "down";
-                source: "over";
-                signal: "mouse,down,*";
-                action: STATE_SET "pressed" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "up";
-                source: "over";
-                signal: "mouse,up,*";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "mouse_click";
-                signal: "mouse,clicked,1";
-                source: "over";
-                script {
-                    emit("elm,action,click", "");
-                }
-            }
-        }
-    }
-}
diff --git a/services/SimpleUI/edc/CustomPopup.edc b/services/SimpleUI/edc/CustomPopup.edc
deleted file mode 100755 (executable)
index cd91fc7..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-#define CONTENT_HEIGHT 99;
-#define CONTENT_BG_HEIGHT (CONTENT_HEIGHT+294);
-#define DEBUG_RECT_OVER(over_part, r, g, b)                         \
-    part { name: __CONCAT("dbg_rect_at_", __stringify(__LINE__));   \
-                                                                    \
-scale:1;                                                            \
-        type : RECT;                                                \
-        repeat_events: 1;                                           \
-        description {                                               \
-            state: "default" 0.0;                                   \
-            visible: 1;                                             \
-            color: r g b 128;                                       \
-            rel1 { to: over_part; relative: 0 0; }                  \
-            rel2 { to: over_part; relative: 1 1; }                  \
-        }                                                           \
-    }
-collections{
-
-#if PROFILE_MOBILE
-    base_scale: 2.6;
-#else
-    base_scale: 2.0;
-#endif
-
-    group { name: "own_popup";
-        images{
-            image: "modal_dialogs_bg.png" COMP;
-            image: "modal_dialogs_title_bg.png" COMP;
-        }
-        parts{
-part{ name: "content_bg";
-            type: IMAGE;
-            scale: 1;
-            description{
-        state: "default" 0.0;
-                visible: 1;
-        fixed: 1 1;
-                color: 255 255 255 255;
-                align: 0 0;
-                min: 688 0;
-                max: 688 1000;
-                rel1 {relative: 0.0 0.0; to: "content"; offset: -79 -148;}
-                rel2 {relative: 1.0 1.0; to: "content"; offset: 0 146;}
-                image.normal: "modal_dialogs_bg.png";
-                image.border: 18 18 15 21;
-                image.border_scale: 1;
-                image.middle: 1;
-        fill {
-                        type: SCALE;
-                        smooth: 0;
-                        origin {
-                            relative: 0 0;
-                            offset: 0 0;
-                        }
-                        size {
-                            relative: 1 1;
-                            offset: 0 0;
-                        }
-                    }
-                }
-            }
-            part{ name: "title_bg";
-                type: IMAGE;
-                scale: 1;
-                description{
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 42 76 130 255;
-                    min: 670 84;
-                    max: 670 84;
-                    align: 0.5 0;
-                    rel1 {relative: 0.0 0.0; to: "content_bg"; offset: 0 0;}
-                    rel2 {relative: 1.0 1.0; to:"content_bg";}
-                    image.normal: "modal_dialogs_title_bg.png";
-                    image.border: 9 9 9 0 ;
-                    image.border_scale: 0;
-                    image.middle: 1;
-            fill {
-                        type: SCALE;
-                        smooth: 0;
-                        origin {
-                            relative: 0 0;
-                            offset: 0 0;
-                        }
-                        size {
-                            relative: 1 1;
-                            offset: 0 0;
-                        }
-                    }
-                }
-            }
-            part{ name: "title_text";
-                type: TEXT;
-                scale: 1;
-                description{
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    rel1 {relative: 0.0 0.0; to: "title_bg"; offset: 64 0;}
-                    rel2 {relative: 1.0 1.0; to: "title_bg";}
-                    align: 0 0;
-                    min: 542 84;
-                    max: 542 84;
-                    text{
-                        text: "";
-                        size: 30;
-                        align: 0.5 0.5;
-                    }
-                }
-            }
-            part{ name: "content";
-                type: SWALLOW;
-                scale: 1;
-                description{
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 {relative: 0.0 0.0;}
-                    rel2 {relative: 1.0 1.0;}
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-                    min: 542 0;
-                    max: 542 100;
-                }
-            }
-            part {
-                name: "elm.text";
-                type: TEXT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 {relative: 0.0 0.0;}
-                    rel2 {relative: 1.0 1.0;}
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-                    min: 542 0;
-                    max: 542 150;
-                    color: 0 0 0 255;
-                    text {
-                        size: 30;
-                    }
-                }
-            }
-            part{
-                name: "buttons";
-                type: SWALLOW;
-                scale: 1;
-                description{
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 {relative: 0.0 1.0; to: "content_bg";offset: 30 -100;}
-                    rel2 {relative: 1.0 1.0; to: "content_bg"; offset: -30 -100;}
-                    align: 0.5 0.0;
-                    min: 650 70;
-                    max: 650 70;
-                }
-            }
-        }
-    }
-
-    group {
-        name: "own_popup_long";
-        inherit: "own_popup";
-        parts {
-                        part{ name: "content";
-            type: SWALLOW;
-            scale: 1;
-            description{
-                state: "default" 0.0;
-                visible: 1;
-                rel1 {relative: 0.0 0.0;}
-                rel2 {relative: 1.0 1.0;}
-        fixed: 1 1;
-                align: 0.5 0.5;
-        min: 542 0;
-        max: 542 450;
-                }
-            }
-        }
-    }
-    /*****************************************************************/
-    group {
-        name: "elm/button/base/standard_button";
-        parts {
-            part {
-                name: "bg";
-                type: RECT;
-                scale: 1;
-                description { state: "default" 0.0;
-                    visible: 1;
-                    align: 0.5 0.5;
-                    fixed: 1 1;
-                    color: 225 225 225 255;
-                    min: 270 70;
-            max: -1 70;
-                }
-                description { state: "focus" 0.0;
-                    inherit: "default" 0.0;
-                    color: 69 143 255 255;
-                }
-                description { state: "dim" 0.0;
-                    inherit: "default" 0.0;
-                    color: 225 225 225 102;
-                }
-            }
-            part {
-                name: "elm.text";
-                type: TEXT;
-                scale: 1;
-                description { state: "default" 0.0;
-                    visible: 1;
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-            min: 250 70;
-                    rel1 { relative: 0.0 0.0; to: "bg"; offset: 30 0;}
-                    rel2 { relative: 1.0 1.0; to: "bg"; offset: -30 0;}
-                    color: 89 89 89 255;
-                    text {
-                        text: "dshfj";
-                        font: "font_name";
-                        size: 30;
-                        align: 0.5 0.5;
-            min: 1 1;
-                        }
-                }
-                description { state: "focus" 0.0;
-                    inherit: "default" 0.0;
-                    color: 255 255 255 255;
-                    text.font: "Tizen:style=Bold";
-                }
-                description { state: "dim" 0.0;
-                    inherit: "default" 0.0;
-                    color: 89 89 89 102;
-                }
-            }
-            part {
-                name: "over";
-                scale:1;
-                mouse_events: 1;
-                type: RECT;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 { relative: 0.0 0.0; to: "bg";}
-                    rel2 { relative: 1.0 1.0; to: "bg";}
-                    color: 0 0 0 0;
-                }
-            }
-        }
-        programs{
-            program {
-                name: "mouse_in";
-                signal: "mouse,in";
-                source: "over";
-                action: STATE_SET "focus" 0.0;
-                target: "elm.text";
-                target: "bg";
-                script {
-                    new st[31];
-                    new Float:vl;
-                    get_state(PART:"elm.text",  st,  30,  vl);
-                    if(!strcmp(st,  "default")) {
-                        set_state(PART:"bg",  "focus",  0.0);
-                        set_state(PART:"elm.text",  "focus",  0.0);
-                    }
-                }
-            }
-            program {
-                name: "mouse_out";
-                signal: "mouse,out";
-                source: "over";
-                action: STATE_SET "default" 0.0;
-                target: "elm.text";
-                target: "bg";
-                script {
-                    new st[31];
-                    new Float:vl;
-                    get_state(PART:"elm.text",  st,  30,  vl);
-                    if(!strcmp(st,  "focus")) {
-                        set_state(PART:"bg",  "visible",  0.0);
-                        set_state(PART:"elm.text",  "visible",  0.0);
-                    }
-                }
-            }
-            program {
-                name: "mouse_click";
-                signal: "mouse,clicked,1";
-                source: "over";
-                script {
-                    emit("elm,action,click", "");
-                }
-            }
-            program {
-                name: "disable";
-                signal: "elm,state,disabled";
-                source: "elm";
-                action: STATE_SET "dim" 0.0;
-                target: "elm.text";
-                target: "bg";
-            }
-            program {
-                name: "enable";
-                signal: "elm,state,enabled";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "elm.text";
-                target: "bg";
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/services/SimpleUI/edc/InputPopup.edc b/services/SimpleUI/edc/InputPopup.edc
deleted file mode 100755 (executable)
index 01e181e..0000000
+++ /dev/null
@@ -1,779 +0,0 @@
-#include "../../../core/Tools/edc/InvisibleButton.edc"
-
-#define DEVELOPMENT 0
-
-#define WIDTH 1920
-#define HEIGHT 1080
-#define POPUP_WIDTH 740
-#define POPUP_HEIGHT 388
-#define TITLE_HEIGHT 88
-#define INPUT_HEIGHT 210
-#define BUTTON_HEIGHT 90
-#define BUTTON_WIDTH 370
-#define TITLE_TEXT_OFFSET_X 40
-#define TITLE_TEXT_OFFSET_Y 46
-#define TITLE_TEXT_WIDTH 660
-#define TITLE_TEXT_HEIGHT 42
-#define BUTTON_TEXT_OFFSET_X 30
-#define BUTTON_TEXT_OFFSET_Y 0
-#define BUTTON_TEXT_WIDTH 310
-#define BUTTON_TEXT_HEIGHT 36
-#define MESSAGE_TEXT_OFFSET_X 40
-#define MESSAGE_TEXT_OFFSET_Y 24
-#define MESSAGE_TEXT_WIDTH 660
-#define MESSAGE_TEXT_HEIGHT 32
-#define INPUT_OFFSET_Y 88
-#define INPUT_AREA_HEIGHT 122
-#define INPUT_TEXT_WIDTH 488
-#define INPUT_TEXT_HEIGHT 68
-
-collections{
-
-#if PROFILE_MOBILE
-    base_scale: 2.6;
-#else
-    base_scale: 2.0;
-#endif
-
-    group {
-        name: "elm/entry/selection/browser_entry";
-        parts {
-            part {
-                name: "bg";
-                scale: 1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 255 255 255 255;
-                }
-            }
-        }
-    }
-    group {
-        name: "elm/entry/cursor/browser_entry";
-        parts {
-            part {
-                name: "bg";
-                scale: 1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 10 132 229 255;
-                    min: 3 60;
-                    max: 3 60;
-                    visible: 0;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 1;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focused";
-                signal: "elm,action,focus";
-                source: "elm";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "unfocused";
-                signal: "elm,action,unfocus";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-        }
-    }
-    group {
-        name: "elm/entry/base-single/popup-input-entry";
-        styles {
-            style {
-                name: "input_text_style";
-                base: "font=BreezeSans:style=Light font_size=50 wrap=none color=#333333 align=0.0 valign=0.5 ellipsis=1.0"; //68
-                tag:  "br" "";
-            }
-            style {
-                name: "guide_text_style";
-                base: "font=BreezeSans:style=Light font_size=50 wrap=none color=#969696 align=0.0 valign=0.5 ellipsis=1.0"; //68
-                tag:  "br" "";
-            }
-        }
-        data {
-            item: focus_highlight "off";
-        }
-        parts {
-            part {
-                name: "bg";
-                scale: 1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 244 244 244 255;
-                }
-                description {
-                    state: "focused" 0.0;
-                    color: 224 237 251 255;
-                }
-            }
-            part {
-                name: "label.text.clip";
-                scale: 1;
-                type: RECT;
-                description {
-                    state: "default" 0.0;
-                }
-            }
-            part {
-                name: "elm.text";
-                scale: 1;
-                multiline: 0;
-                entry_mode: EDITABLE;
-                select_mode: DEFAULT;
-                cursor_mode: BEFORE;
-                type: TEXTBLOCK;
-                clip_to: "label.text.clip";
-                source: "elm/entry/selection/browser_entry";
-                source4: "elm/entry/cursor/browser_entry";
-                description {
-                    state: "default" 0.0;
-                    min: 0 INPUT_TEXT_HEIGHT;
-                    max: -1 INPUT_TEXT_HEIGHT;
-                    rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
-                    }
-                    rel2.relative: 1.0 1.0;
-                    align: 0.0 0.0;
-                    text.style: "input_text_style";
-                }
-            }
-            part {
-                name: "elm.guide";
-                scale: 1;
-                type: TEXTBLOCK;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    rel1 {
-                        to: "bg";
-                        relative: 0.0 0.0;
-                    }
-                    rel2.relative: 1.0 1.0;
-                    min: 0 INPUT_TEXT_HEIGHT;
-                    max: -1 INPUT_TEXT_HEIGHT;
-                    text {
-                        text: "Input folder name";
-                        style: "guide_text_style";
-                    }
-                }
-                description {
-                    state: "hidden" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focus";
-                signal: "load";
-                source: "";
-                action: FOCUS_SET;
-                target: "elm.text";
-            }
-            program {
-                name: "focused";
-                signal: "focused";
-                source: "ui";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "unfocused";
-                signal: "unfocused";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "gdisabled";
-                signal: "elm,guide,disabled";
-                source: "elm";
-                action: STATE_SET "hidden" 0.0;
-                target: "elm.guide";
-            }
-            program {
-                name: "genabled";
-                signal: "elm,guide,enabled";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "elm.guide";
-            }
-        }
-    }
-    group {
-        name: "input-popup-layout";
-        styles {
-            style {
-                name: "title_text_style";
-                base: "font=BreezeSans:style=Light font_size=34 wrap=none color=#333333 align=0.5 valign=1.0 ellipsis=1.0";
-            }
-        }
-        parts {
-            part {
-                name: "dimmed-bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 0 0 102;
-                    align: 0.0 0.0;
-                    min: WIDTH HEIGHT;
-                    max: WIDTH HEIGHT;
-                    fixed: 1 1;
-                    rel1.relative: 0.0 0.0;
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 198 113 113 255; //salmon
-                    align: 0.5 0.0; //TODO: 0.5 0.5
-                    min: POPUP_WIDTH POPUP_HEIGHT;
-                    max: POPUP_WIDTH POPUP_HEIGHT;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "dimmed-bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "dimmed-bg";
-                    }
-                }
-            }
-            part {
-                name: "title_bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0.5 0.0;
-                    min: POPUP_WIDTH TITLE_HEIGHT;
-                    max: POPUP_WIDTH TITLE_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "title_text_spacer";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "title_text_bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 182 193 255; //lightpink
-                    align: 0.0 0.0;
-                    min: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
-                    max: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "title_text_spacer";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "title_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    min: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
-                    max: TITLE_TEXT_WIDTH TITLE_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_text_bg";
-                    }
-                    text.style: "title_text_style";
-                }
-            }
-            part {
-                name: "input_swallow";
-                type: SWALLOW;
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 1;
-                description {
-                    state: "default" 0.0;
-                    min: POPUP_WIDTH INPUT_HEIGHT;
-                    max: POPUP_WIDTH INPUT_HEIGHT;
-                    align: 0.0 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 0.0 1.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "buttons_bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 255 255 255;
-                    align: 0.0 0.0;
-                    min: POPUP_WIDTH BUTTON_HEIGHT;
-                    max: POPUP_WIDTH BUTTON_HEIGHT;
-                    rel1 {
-                        relative: 0.0 1.0;
-                        to: "input_swallow";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "buttons_swallow";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    min: POPUP_WIDTH BUTTON_HEIGHT;
-                    max: POPUP_WIDTH BUTTON_HEIGHT;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "buttons_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "buttons_bg";
-                    }
-                }
-            }
-        }
-    }
-    group {
-        name: "input-area-layout";
-        styles {
-            style {
-                name: "message_text_normal_style";
-                base: "font=Tizen:style=Regular font_size=25 wrap=none color=#686868 align=0.5 valign=1.0 ellipsis=1.0";
-            }
-            style {
-                name: "message_text_highlight_style";
-                base: "font=Tizen:style=Regular font_size=25 wrap=none color=#686868 align=0.5 valign=1.0 ellipsis=1.0";
-            }
-        }
-        parts {
-            part {
-                name: "bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0.0 0.0;
-                    min: POPUP_WIDTH INPUT_HEIGHT;
-                    max: POPUP_WIDTH INPUT_HEIGHT;
-                    rel1.relative: 0.0 0.0;
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "input_message_spacer";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 0 0 127;
-                    align: 0.0 0.0;
-                    min: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
-                    max: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "input_message_bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 202 225 255 255; //lightsteelblue
-                    align: 0.0 0.0;
-                    min: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
-                    max: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "input_message_spacer";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "input_message_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default";
-                    visible: 1;
-                    align: 0.0 0.0;
-                    min: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
-                    max: MESSAGE_TEXT_WIDTH MESSAGE_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_message_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_message_bg";
-                    }
-                    text.style: "message_text_normal_style";
-                }
-                description {
-                    state: "highlighted" 0.0;
-                    inherit: "default";
-                    text.style: "message_text_highlight_style";
-                }
-            }
-            part {
-                name: "input_area_spacer";
-                type: RECT;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_OFFSET_Y;
-                    max: 0 INPUT_OFFSET_Y;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "input_area_bg";
-                type: RECT;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: POPUP_WIDTH INPUT_AREA_HEIGHT;
-                    max: POPUP_WIDTH INPUT_AREA_HEIGHT;
-                    visible: 0;
-                    color: 224 237 251 255;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "input_area_spacer";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "input_text_bg";
-                type: RECT;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.5 0.0;
-                    min: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
-                    max: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
-                    visible: DEVELOPMENT;
-                    color: 238 229 222 255; //seashell
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            part {
-                name: "input_text_swallow";
-                type: SWALLOW;
-                scale: 1;
-                mouse_events: 1;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
-                    max: INPUT_TEXT_WIDTH INPUT_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_text_bg";
-                    }
-                }
-            }
-        }
-    }
-    group {
-        name: "elm/button/base/input-popup-button";
-        styles {
-            style {
-                name: "button_text_style_normal";
-                base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#575757 align=0.5 valign=0.5 ellipsis=1.0"; //36
-            }
-            style {
-                name: "button_text_style_focused";
-                base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#ffffff align=0.5 valign=0.5 ellipsis=1.0"; //36
-            }
-            style {
-                name: "button_text_style_dissabled";
-                base: "font=BreezeSans:style=Light font_size=29 wrap=none color=#ababab align=0.5 valign=0.5"; //36
-            }
-        }
-        parts {
-            part {
-                name: "bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.5 0.5;
-                    fixed: 1 1;
-                    color: 246 246 246 255;
-                    min: BUTTON_WIDTH BUTTON_HEIGHT;
-                    max: BUTTON_WIDTH BUTTON_HEIGHT;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default" 0.0;
-                    color: 0 119 246 255;
-                }
-            }
-            part {
-                name: "divider_horizontal";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.5 0.0;
-                    color: 227 227 227 255;
-                    min: BUTTON_WIDTH 1;
-                    max: BUTTON_WIDTH 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            part {
-                name: "divider_vertical";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 0;
-                    align: 0.0 0.0;
-                    color: 227 227 227 255;
-                    min: 1 BUTTON_HEIGHT;
-                    max: 1 BUTTON_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-                description {
-                    state: "visible" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            part {
-                name: "text_bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    align: 0.5 0.5;
-                    color: 255 0 255 255; //magenta
-                    min: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
-                    max: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            part {
-                name: "elm.text";
-                type: TEXTBLOCK;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    min: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
-                    max: BUTTON_TEXT_WIDTH BUTTON_TEXT_HEIGHT;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "text_bg";
-                    }
-                    text.style: "button_text_style_normal";
-                }
-                description {
-                    state: "dissabled" 0.0;
-                    inherit: "default";
-                    text.style: "button_text_style_dissabled";
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default";
-                    text.style: "button_text_style_focused";
-                }
-            }
-            part {
-                name: "over";
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 0;
-                type: RECT;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 { relative: 0.0 0.0; to: "bg";}
-                    rel2 { relative: 1.0 1.0; to: "bg";}
-                    color: 0 0 0 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "visible";
-                source: "ui";
-                signal: "visible";
-                action: STATE_SET "visible" 0.0;
-                target: "divider_vertical";
-            }
-            program {
-                name: "dissabled";
-                source: "ui";
-                signal: "dissabled";
-                action: STATE_SET "dissabled" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "enabled";
-                source: "ui";
-                signal: "enabled";
-                action: STATE_SET "default" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "down";
-                source: "over";
-                signal: "mouse,down,*";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-                target: "elm.text";
-            }
-            program {
-                name: "up";
-                source: "over";
-                signal: "mouse,up,*";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-                target: "elm.text";
-            }
-            program {
-                name: "mouse_click";
-                signal: "mouse,clicked,1";
-                source: "over";
-                script {
-                    emit("elm,action,click", "");
-                }
-            }
-        }
-    }
-}
diff --git a/services/SimpleUI/edc/InputPopup_mob.edc b/services/SimpleUI/edc/InputPopup_mob.edc
deleted file mode 100755 (executable)
index 175d8c8..0000000
+++ /dev/null
@@ -1,1172 +0,0 @@
-#include "../../../core/Tools/edc/InvisibleButton.edc"
-
-#define DEVELOPMENT 0
-#define WIDTH 720
-#define HEIGHT 426
-
-#define TITLE_HEIGHT 101
-#define INPUT_HEIGHT 205
-#define BUTTON_HEIGHT 120
-#define BUTTON_WIDTH 360
-#define TITLE_TEXT_OFFSET_X 100
-#define TITLE_TEXT_OFFSET_Y 44
-#define TITLE_TEXT_WIDTH 520
-#define TITLE_TEXT_HEIGHT 45
-#define BUTTON_TEXT_OFFSET_X 50
-#define BUTTON_TEXT_OFFSET_Y 40
-#define BUTTON_TEXT_WIDTH 260
-#define BUTTON_TEXT_HEIGHT 40
-#define MESSAGE_TEXT_OFFSET_X 44
-#define MESSAGE_TEXT_OFFSET_Y 30
-#define MESSAGE_TEXT_WIDTH 632
-#define MESSAGE_TEXT_HEIGHT 38
-#define INPUT_OFFSET_Y 78
-#define INPUT_AREA_HEIGHT 106
-#define INPUT_TEXT_OFFSET_X 44
-#define INPUT_TEXT_OFFSET_Y 26
-#define INPUT_TEXT_WIDTH 632
-#define INPUT_TEXT_SELECTED_WIDTH 578
-#define INPUT_TEXT_HEIGHT 40
-#define INPUT_DIVIDER_OFFSET_X 32
-#define INPUT_DIVIDER_OFFSET_Y 82
-#define INPUT_DIVIDER_HEIGHT 2
-#define INPUT_DIVIDER_WIDTH 656
-#define INPUT_CANCEL_OFFSET_X 34
-#define INPUT_CANCEL_OFFSET_Y 41
-#define CANCEL_BUTTON_WIDTH 98
-
-collections{
-    base_scale: 2.6;
-    group {
-        name: "elm/entry/selection/browser_entry";
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 255 255 255 255;
-                }
-            }
-        }
-    }
-    group {
-        name: "elm/entry/cursor/browser_entry";
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 10 132 229 255;
-                    min: 3 INPUT_TEXT_HEIGHT;
-                    max: 3 INPUT_TEXT_HEIGHT;
-                    visible: 0;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 1;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focused";
-                signal: "elm,action,focus";
-                source: "elm";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "unfocused";
-                signal: "elm,action,unfocus";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-        }
-    }
-    group {
-        name: "elm/entry/base-single/popup-input-entry";
-        styles {
-            style {
-                name: "input_text_style";
-                base: "font=Tizen:style=Regular font_size=40 wrap=none color=#333333 align=0.0";
-                tag:  "br" "";
-            }
-            style {
-                name: "guide_text_style";
-                base: "font=Tizen:style=Regular font_size=40 wrap=none color=#969696 align=0.0 ellipsis=1";
-                tag:  "br" "";
-            }
-        }
-        data {
-            item: focus_highlight "off";
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0 0;
-                    min: 0 0;
-                    max: -1 INPUT_TEXT_HEIGHT+10;
-                    fixed: 0 0;
-                    rel1.relative: 0 0;
-                    rel2.relative: 1 1;
-                    visible: 1;
-                    color: 244 244 244 255;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default";
-                    color: 224 237 251 255;
-                }
-            }
-            rect {
-                name: "label.text.clip";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                }
-            }
-            part {
-                name: "elm.text";
-                scale: 1;
-                multiline: 0;
-                entry_mode: EDITABLE;
-                select_mode: DEFAULT;
-                cursor_mode: BEFORE;
-                type: TEXTBLOCK;
-                clip_to: "label.text.clip";
-                source: "elm/entry/selection/browser_entry";
-                source4: "elm/entry/cursor/browser_entry";
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_TEXT_HEIGHT+20;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                    text {
-                        style: "input_text_style";
-                        align: 0 0;
-                    }
-                }
-            }
-            part {
-                name: "elm.guide";
-                scale: 1;
-                type: TEXTBLOCK;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_TEXT_HEIGHT+20;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                    text {
-                        style: "guide_text_style";
-                        align: 0 0;
-                        text: "Input folder name";
-                    }
-                }
-                description {
-                    state: "hidden" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focus";
-                signal: "load";
-                source: "";
-                action: FOCUS_SET;
-                target: "elm.text";
-            }
-            program {
-                name: "focused";
-                signal: "focused";
-                source: "ui";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "unfocused";
-                signal: "unfocused";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "gdisabled";
-                signal: "elm,guide,disabled";
-                source: "elm";
-                action: STATE_SET "hidden" 0.0;
-                target: "elm.guide";
-            }
-            program {
-                name: "genabled";
-                signal: "elm,guide,enabled";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "elm.guide";
-            }
-        }
-    }
-    group {
-        name: "input-popup-layout";
-        styles {
-            style {
-                name: "title_text_style";
-                base: "font=Tizen:style=Regular font_size=45 wrap=none color=#389ae9 align=0.5 ellipsis=1";
-            }
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 0 0 102.4;
-                    align: 0.5 0.5;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1.relative: 0.0 0.0;
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "popup_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 0;
-                    align: 0.5 1;
-                    fixed: 0 1;
-                    min: 0 HEIGHT;
-                    max: -1 HEIGHT;
-                    rel1 {
-                        relative: 0 0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "bg";
-                    }
-                 }
-            }
-            rect {
-                name: "title_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0.0 0.0;
-                    min: 0 TITLE_HEIGHT;
-                    max: -1 TITLE_HEIGHT;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "popup_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "popup_bg";
-                    }
-                }
-            }
-            rect {
-                name: "title_text_spacer_0";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    min: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    max: TITLE_TEXT_OFFSET_X TITLE_TEXT_OFFSET_Y;
-                    fixed: 1 1;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_bg";
-                    }
-                 }
-            }
-            rect {
-                name: "title_text_spacer_1";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    min: TITLE_TEXT_OFFSET_X 0;
-                    max: TITLE_TEXT_OFFSET_X 0;
-                    fixed: 1 1;
-                    align: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_bg";
-                    }
-                }
-            }
-            rect {
-                name: "title_text_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 182 193 255; //lightpink
-                    align: 0.0 0.0;
-                    min: 0 TITLE_TEXT_HEIGHT;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 1 1;
-                        to: "title_text_spacer_0";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "title_text_spacer_1";
-                         }
-                }
-            }
-            part {
-                name: "title_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "title_text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "title_text_bg";
-                    }
-                    text {
-                        style: "title_text_style";
-                        align: 0 0;
-                    }
-                }
-            }
-            part {
-                name: "input_swallow";
-                type: SWALLOW;
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 1;
-                description {
-                    state: "default" 0.0;
-                    min: 0 INPUT_HEIGHT;
-                    max: -1 INPUT_HEIGHT;
-                    fixed: 0 1;
-                    align: 0.0 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 0.0 1.0;
-                        to: "title_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "popup_bg";
-                    }
-                }
-            }
-            rect {
-                name: "buttons_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 0 255 255 255;
-                    align: 0.0 0.0;
-                    min: 0 BUTTON_HEIGHT;
-                    max: -1 BUTTON_HEIGHT;
-                    fixed: 0 1;
-                    rel1 {
-                        relative: 0.0 1.0;
-                        to: "input_swallow";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "popup_bg";
-                    }
-                }
-            }
-            part {
-                name: "buttons_swallow";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    fixed: 0 0;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "buttons_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "buttons_bg";
-                    }
-                }
-            }
-        }
-    }
-    group {
-        name: "input-area-layout";
-        styles {
-            style {
-                name: "message_text_style";
-                base: "font=Tizen:style=Regular font_size=40 wrap=none color=#141414 align=0.0 ellipsis=1.0";
-            }
-        }
-        images {
-            image: "input_ic_cancel.png" COMP;
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_HEIGHT;
-                    max: -1 INPUT_HEIGHT;
-                    fixed: 0 1;
-                    rel1.relative: 0.0 0.0;
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "input_message_spacer_0";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    align: 0.0 0.0;
-                    min: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
-                    max: MESSAGE_TEXT_OFFSET_X MESSAGE_TEXT_OFFSET_Y;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "input_message_spacer_1";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: INPUT_TEXT_OFFSET_X 0;
-                    max: INPUT_TEXT_OFFSET_X 0;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0 0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1 0;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            rect {
-                name: "input_message_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    color: 202 225 255 255; //lightsteelblue
-                    align: 0.0 0.0;
-                    min: 0 MESSAGE_TEXT_HEIGHT;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 1 1;
-                        to: "input_message_spacer_0";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "input_message_spacer_1";
-                    }
-                }
-            }
-            part {
-                name: "input_message_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default";
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_message_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_message_bg";
-                    }
-                    text {
-                        style: "message_text_style";
-                        align: 0 0;
-                    }
-                }
-            }
-            rect {
-                name: "input_area_spacer";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_OFFSET_Y;
-                    max: 0 INPUT_OFFSET_Y;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "input_area_bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_AREA_HEIGHT;
-                    max: -1 INPUT_AREA_HEIGHT;
-                    fixed: 0 1;
-                    visible: 0;
-                    color: 224 237 251 255;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "input_area_spacer";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            rect {
-                name: "input_spacer_0";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: INPUT_TEXT_OFFSET_X INPUT_TEXT_OFFSET_Y;
-                    max: INPUT_TEXT_OFFSET_X INPUT_TEXT_OFFSET_Y;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "input_spacer_1";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: INPUT_TEXT_OFFSET_X 0;
-                    max: INPUT_TEXT_OFFSET_X 0;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0 0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            rect {
-                name: "title_input_spacer_2";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: CANCEL_BUTTON_WIDTH 0;
-                    max: CANCEL_BUTTON_WIDTH 0;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            rect {
-                name: "input_text_bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_TEXT_HEIGHT;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    visible: DEVELOPMENT;
-                    color: 238 229 222 255; //seashell
-                    rel1 {
-                        relative: 1 1;
-                        to: "input_spacer_0";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "input_spacer_1";
-                    }
-                }
-                description {
-                    state: "show" 0.0;
-                    inherit: "default";
-                    rel2 {
-                        relative: 0 0;
-                        to: "title_input_spacer_2";
-                    }
-                }
-            }
-            part {
-                name: "input_text_swallow";
-                type: SWALLOW;
-                scale: 1;
-                mouse_events: 1;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_TEXT_HEIGHT;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_text_bg";
-                    }
-                }
-            }
-            rect {
-                name: "input_cancel_spacer";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: INPUT_CANCEL_OFFSET_X INPUT_CANCEL_OFFSET_Y-10;
-                    max: INPUT_CANCEL_OFFSET_X INPUT_CANCEL_OFFSET_Y-10;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            rect {
-                name: "input_cancel_bg";
-                mouse_events: 0;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    min: INPUT_TEXT_HEIGHT+10 INPUT_TEXT_HEIGHT+10;
-                    max: INPUT_TEXT_HEIGHT+10 INPUT_TEXT_HEIGHT+10;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    align: 1 1;
-                    color: 224 237 251 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 0.0 0.0;
-                        to: "input_cancel_spacer";
-                    }
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default";
-                    color: 224 237 251 255;
-                    visible: 1;
-                }
-            }
-            part {
-                name: "input_cancel_icon";
-                type: IMAGE;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.5 0.5;
-                    min: INPUT_TEXT_HEIGHT INPUT_TEXT_HEIGHT;
-                    max: INPUT_TEXT_HEIGHT INPUT_TEXT_HEIGHT;
-                    fixed: 1 1;
-                    visible: 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_cancel_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_cancel_bg";
-                    }
-                    image {
-                        normal: "input_ic_cancel.png";
-                        border: 0 0 0 0;
-                    }
-                }
-                description {
-                    state: "show" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            part {
-                name: "input_cancel_click";
-                type: SWALLOW;
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: CANCEL_BUTTON_WIDTH INPUT_AREA_HEIGHT;
-                    max: CANCEL_BUTTON_WIDTH INPUT_AREA_HEIGHT;
-                    fixed: 1 1;
-                    visible: 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "input_area_bg";
-                    }
-                }
-                description {
-                    state: "show" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            rect {
-                name: "input_divider_spacer_0";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: INPUT_DIVIDER_OFFSET_X INPUT_DIVIDER_OFFSET_Y;
-                    max: INPUT_DIVIDER_OFFSET_X INPUT_DIVIDER_OFFSET_Y;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "input_area_bg";
-                    }
-                    rel2.relative: 1.0 1.0;
-                }
-            }
-            rect {
-                name: "input_divider_spacer_1";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 1 1;
-                    min: INPUT_DIVIDER_OFFSET_X 0;
-                    max: INPUT_DIVIDER_OFFSET_X 0;
-                    fixed: 1 1;
-                    visible: DEVELOPMENT;
-                    color: 255 255 255 127;
-                    rel1 {
-                        relative: 0 0;
-                        to: "input_area_bg";
-                    }
-                    rel2 {
-                        relative: 1 1;
-                        to: "input_area_bg";
-                    }
-                }
-            }
-            rect {
-                name: "input_divider_bg";
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    min: 0 INPUT_DIVIDER_HEIGHT;
-                    max: 1 INPUT_DIVIDER_HEIGHT;
-                    visible: 1;
-                    color: 10 132 229 255;
-                    rel1 {
-                        relative: 1 1;
-                        to: "input_divider_spacer_0";
-                    }
-                    rel2 { relative: 0 0;
-                           to: "input_divider_spacer_1";
-                         }
-                }
-            }
-        }
-        programs {
-            program {
-                name: "entry_swallow_down";
-                source: "input_text_swallow";
-                signal: "mouse,down,*";
-                action: STATE_SET "focused" 0.0;
-                target: "input_area_bg";
-            }
-            program {
-                name: "entry_swallow_up";
-                source: "input_text_swallow";
-                signal: "mouse,up,*";
-                action: STATE_SET "default" 0.0;
-                target: "input_area_bg";
-            }
-            program {
-                name: "close_icon_show";
-                signal: "close_icon_show";
-                source: "ui";
-                action: STATE_SET "show" 0.0;
-                target: "input_text_bg";
-                target: "input_cancel_icon";
-                target: "input_cancel_click";
-            }
-            program {
-                name: "close_icon_hide";
-                signal: "close_icon_hide";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "input_text_bg";
-                target: "input_cancel_icon";
-                target: "input_cancel_click";
-            }
-            program {
-                name: "input_cancel_down";
-                source: "input_cancel_click";
-                signal: "mouse,down,*";
-                action: STATE_SET "focused" 0.0;
-                target: "input_cancel_bg";
-            }
-            program {
-                name: "input_cancel_up";
-                source: "input_cancel_click";
-                signal: "mouse,up,*";
-                action: STATE_SET "default" 0.0;
-                target: "input_cancel_bg";
-            }
-        }
-    }
-    group {
-        name: "elm/button/base/input-popup-button";
-        styles {
-            style {
-                name: "button_text_style";
-                base: "font=Tizen:style=Regular font_size=40 wrap=none color=#141414 align=0.5 ellipsis=1.0";
-            }
-            style {
-                name: "button_text_style_dissabled";
-                base: "font=Tizen:style=Regular font_size=40 wrap=none color=#C0C0C0 align=0.5 ellipsis=1.0";
-            }
-        }
-        parts {
-            rect {
-                name: "bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    color: 244 244 244 255;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                }
-                description {
-                    state: "pressed" 0.0;
-                    inherit: "default" 0.0;
-                    color: 224 237 251 255;
-                }
-            }
-            rect {
-                name: "divider_horizontal";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.5 0.0;
-                    color: 0 0 0 38.4;
-                    min: 0 1;
-                    max: -1 1;
-                    fixed: 0 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            rect {
-                name: "divider_vertical";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 0;
-                    align: 0.0 0.0;
-                    color: 0 0 0 38.4;
-                    min: 1 0;
-                    max: 1 -1;
-                    fixed: 1 0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-                description {
-                    state: "visible" 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            rect {
-                name: "text_spacer_0";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    align: 0.0 0.0;
-                    color: 255 255 255 127;
-                    min: BUTTON_TEXT_OFFSET_X BUTTON_TEXT_OFFSET_Y;
-                    max: BUTTON_TEXT_OFFSET_X BUTTON_TEXT_OFFSET_Y;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            rect {
-                name: "text_spacer_1";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    align: 1 1;
-                    color: 255 255 255 127;
-                    min: BUTTON_TEXT_OFFSET_X 0;
-                    max: BUTTON_TEXT_OFFSET_X 0;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                }
-            }
-            rect {
-                name: "text_bg";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: DEVELOPMENT;
-                    align: 0.0 0.0;
-                    color: 255 0 255 255; //magenta
-                    min: 0 BUTTON_TEXT_HEIGHT;
-                    max: -1 -1;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "text_spacer_0";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "text_spacer_1";
-                    }
-                }
-            }
-            part {
-                name: "elm.text";
-                type: TEXTBLOCK;
-                scale: 1;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "text_bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "text_bg";
-                    }
-                    text {
-                        style: "button_text_style";
-                        align: 0 0;
-                    }
-                }
-                description {
-                    state: "dissabled" 0.0;
-                    inherit: "default";
-                    text.style: "button_text_style_dissabled";
-                }
-            }
-            rect {
-                name: "over";
-                scale: 1;
-                mouse_events: 1;
-                repeat_events: 0;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "bg";
-                    }
-                    rel2 {
-                        relative: 1.0 1.0;
-                        to: "bg";
-                    }
-                    color: 0 0 0 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "visible";
-                source: "ui";
-                signal: "visible";
-                action: STATE_SET "visible" 0.0;
-                target: "divider_vertical";
-            }
-            program {
-                name: "dissabled";
-                source: "ui";
-                signal: "dissabled";
-                action: STATE_SET "dissabled" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "enabled";
-                source: "ui";
-                signal: "enabled";
-                action: STATE_SET "default" 0.0;
-                target: "elm.text";
-            }
-            program {
-                name: "down";
-                source: "over";
-                signal: "mouse,down,*";
-                action: STATE_SET "pressed" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "up";
-                source: "over";
-                signal: "mouse,up,*";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "mouse_click";
-                signal: "mouse,clicked,1";
-                source: "over";
-                script {
-                    emit("elm,action,click", "");
-                }
-            }
-        }
-    }
-}
index 6e6703c..7240d6a 100755 (executable)
@@ -1,7 +1,4 @@
-collections { base_scale: 2.0;
-
-#define WIDTH 1920
-#define HEIGHT 976
+collections { base_scale: 2.6;
 
    styles {
       style {
@@ -14,34 +11,37 @@ collections { base_scale: 2.0;
       name: "notification_popup_layout";
       parts {
 
-            part { name: "bg";
+            part {
+                name: "bg";
                 type: RECT;
                 mouse_events: 1;
-                description { state: "default" 0.0;
-                    color: 0 0 0 120;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    color: 0 0 0 102;
                     visible: 1;
-                    min: WIDTH HEIGHT;
-                    max: WIDTH HEIGHT;
+                    fixed: 0 0;
+                    min: 0 0;
+                    max: -1 -1;
                     align: 0.0 0.0;
-                    rel1 {relative: 0.0 0.0; offset: 0 104;}
+                    rel1 {relative: 0.0 0.0;}
                     rel2 {relative: 1.0 1.0;}
                 }
             }
 
-            part { name: "popup_rect";
+            part {
+                name: "popup_rect";
                 type: RECT;
                 mouse_events: 1;
-                description { state: "default" 0.0;
-                    color: 230 230 230 255;
-                    min: 600 150;
-                    max: 600 150;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    color: 255 255 255 255;
                     visible: 1;
-                    align: 0.5 0.5;
-                    rel1 {
-                        to: "bg";
-                        offset: 0 0;
-                        relative: 0.0 0.0;
-                    }
+                    fixed: 0 0;
+                    min: 720 150;
+                    max: -1 150;
+                    align: 0.5 1.0;
                     rel2 {
                         to: "bg";
                         relative: 1.0 1.0;
@@ -49,17 +49,18 @@ collections { base_scale: 2.0;
                 }
             }
 
-            part { name: "progress_swallow";
+            part {
+                name: "progress_swallow";
                 type: SWALLOW;
+                scale: 1;
                 description {
                     min: 150 150;
                     max: 150 150;
                     visible: 1;
-                    fixed: 1 1;
+                    fixed: 0 0;
                     align: 0.0 0.0;
                     rel1 {
                         relative: 0.0 0.0;
-                        offset: 20 0;
                         to: "popup_rect";
                     }
                     rel2 {
@@ -69,18 +70,19 @@ collections { base_scale: 2.0;
                 }
             }
 
-            part { name: "popup_text";
+            part {
+                name: "popup_text";
                 type: TEXTBLOCK;
+                scale: 1;
                 description {
                     visible: 1;
                     min: 400 190;
                     max: 400 190;
-                    align: 1.0 0.5;
+                    align: 0.5 0.5;
                     fixed: 1 1;
                     rel1 {
                         to: "popup_rect";
                         relative: 0.0 0.0;
-                        offset: 0 0;
                     }
                     rel2 {
                         to: "popup_rect";
diff --git a/services/SimpleUI/edc/NotificationPopup_mob.edc b/services/SimpleUI/edc/NotificationPopup_mob.edc
deleted file mode 100755 (executable)
index 7240d6a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-collections { base_scale: 2.6;
-
-   styles {
-      style {
-         name: "text_style";
-         base: "font=Sans:style=Bold font_size=30 color=#000000 wrap=word align=0.5 ellipsis=1.0";
-      }
-   }
-
-   group {
-      name: "notification_popup_layout";
-      parts {
-
-            part {
-                name: "bg";
-                type: RECT;
-                mouse_events: 1;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    color: 0 0 0 102;
-                    visible: 1;
-                    fixed: 0 0;
-                    min: 0 0;
-                    max: -1 -1;
-                    align: 0.0 0.0;
-                    rel1 {relative: 0.0 0.0;}
-                    rel2 {relative: 1.0 1.0;}
-                }
-            }
-
-            part {
-                name: "popup_rect";
-                type: RECT;
-                mouse_events: 1;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    color: 255 255 255 255;
-                    visible: 1;
-                    fixed: 0 0;
-                    min: 720 150;
-                    max: -1 150;
-                    align: 0.5 1.0;
-                    rel2 {
-                        to: "bg";
-                        relative: 1.0 1.0;
-                    }
-                }
-            }
-
-            part {
-                name: "progress_swallow";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    min: 150 150;
-                    max: 150 150;
-                    visible: 1;
-                    fixed: 0 0;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 0.0 0.0;
-                        to: "popup_rect";
-                    }
-                    rel2 {
-                        relative: 0.0 1.0;
-                        to: "popup_rect";
-                   }
-                }
-            }
-
-            part {
-                name: "popup_text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    visible: 1;
-                    min: 400 190;
-                    max: 400 190;
-                    align: 0.5 0.5;
-                    fixed: 1 1;
-                    rel1 {
-                        to: "popup_rect";
-                        relative: 0.0 0.0;
-                    }
-                    rel2 {
-                        to: "popup_rect";
-                        relative: 1.0 1.0;
-                    }
-                    text {
-                        style: "text_style";
-                    }
-                }
-            }
-
-      }
-   }
-}
diff --git a/services/SimpleUI/edc/Tooltip.edc b/services/SimpleUI/edc/Tooltip.edc
deleted file mode 100755 (executable)
index 0c9adae..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-collections { base_scale: 2.0;
-    group { name: "elm/label/base/tooltip";
-        styles {
-            style { name: "tooltip_style";
-                //base: "font="SVD_Medium" font_size=22 color=#1d1d1d wrap=word text_class=bubble";
-                base: "font="SVD_Medium" font_size=22 color=#1d1d1d wrap=word text_class=bubble ellipsis=1.0";
-                tag:  "br" "\n";
-                tag: "hilight" "+ font="SVD_Medium" text_class=bubble";
-                tag: "b" "+ font="SVD_Medium" text_class=bubble";
-                tag:  "tab" "\t";
-            }
-        }
-        parts {
-            part { name: "elm.text"; type: TEXTBLOCK; mouse_events: 0;
-                scale: 1;
-                description { state: "default" 0.0;
-                    text {
-                    style: "tooltip_style";
-                    min: 1 1;
-                    }
-                }
-            }
-        }
-    }
-}
-
index eb49dbf..2fa9a10 100755 (executable)
@@ -43,9 +43,9 @@
 #define INDICATOR_ROTATION_PORTRAIT 0
 #define INDICATOR_ROTATION_LANDSCAPE 1
 
-#define LAYOUT_INDICATOR_HEIGHT_INC 42
+#define LAYOUT_INDICATOR_HEIGHT_INC 40
 
-collections { base_scale: 2.0;
+collections { base_scale: 2.6;
 
     group { name: "elm/conformant/custom_conformant";
        script {
diff --git a/services/SimpleUI/images_mob/input_ic_cancel.png b/services/SimpleUI/images_mob/input_ic_cancel.png
deleted file mode 100755 (executable)
index 9506772..0000000
Binary files a/services/SimpleUI/images_mob/input_ic_cancel.png and /dev/null differ
index ce169f4..9774258 100755 (executable)
@@ -5,7 +5,6 @@ set(StorageServiceSOURCES
     StorageExceptionInitialization.cpp
     DriverManager.cpp
     Field.cpp
-    FoldersStorage.cpp
     QuickAccessStorage.cpp
     CertificateStorage.cpp
     SQLTransactionScope.cpp
@@ -13,6 +12,7 @@ set(StorageServiceSOURCES
     SQLDatabase.cpp
     SettingsStorage.cpp
     StorageService.cpp
+    PWAStorage.cpp
 )
 
 include(Coreheaders)
index 8f45f7f..6b4334c 100755 (executable)
@@ -186,21 +186,5 @@ std::string CertificateStorage::getPemForURI(const std::string& uri)
     return std::string();
 }
 
-void CertificateStorage::deleteAllEntries()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format deleteCertificateString("DELETE FROM %1%;");
-    deleteCertificateString % TABLE_CERTIFICATE;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_CERTIFICATE));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
-        storage::SQLQuery deleteCertificatesQuery(connection->prepare(deleteCertificateString.str()));
-        deleteCertificatesQuery.exec();
-    } catch( storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
 }//end namespace storage
 }//end namespace tizen_browser
index 54c4cd2..a570df8 100755 (executable)
@@ -70,11 +70,6 @@ public:
      */
     std::string getPemForURI(const std::string& uri);
 
-    /**
-     * Delete all entries in cert db.
-     */
-    void deleteAllEntries();
-
 private:
     void initDatabaseCertificate(const std::string& db_str);
     bool m_isInitialized;
index 912235c..cff02ef 100755 (executable)
@@ -35,8 +35,13 @@ Field::Field()
     , sqlDouble(f.getDouble())
 {
 }
-/*private*/Field & Field::operator=(const Field &)
+/*private*/Field & Field::operator=(const Field & f)
 {
+    this->type = f.type;
+    this->sqlInt = f.sqlInt;
+    this->sqlDouble = f.sqlDouble;
+    this->sqlText = f.sqlText;
+    this->blob = f.blob;
     return *this;
 }
 
@@ -55,15 +60,19 @@ Field::Field(double sqlDouble)
 }
 
 Field::Field(const std::string & sqlText)
+    : type(SQLITE3_TEXT)
+    , sqlInt(0)
+    , sqlDouble(0)
+    , sqlText(sqlText)
 {
-    this->sqlText = sqlText;
-    this->type = SQLITE3_TEXT;
 }
 
-Field::Field(std::shared_ptr<tizen_browser::tools::Blob> blob)
+Field::Field(const std::shared_ptr<tizen_browser::tools::Blob>& blob)
+    : type(SQLITE_BLOB)
+    , sqlInt(0)
+    , sqlDouble(0)
+    , blob(blob)
 {
-    this->blob = blob;
-    this->type = SQLITE_BLOB;
 }
 
 Field::~Field()
index 81b73ac..c3107d3 100755 (executable)
@@ -38,7 +38,7 @@ public:
     explicit Field(int sqlInt);
     explicit Field(double sqlDouble);
     explicit Field(const std::string & sqlText);
-    explicit Field(std::shared_ptr<tizen_browser::tools::Blob> blob);
+    explicit Field(const std::shared_ptr<tizen_browser::tools::Blob>& blob);
 
     ~Field();
 
diff --git a/services/StorageService/FoldersStorage.cpp b/services/StorageService/FoldersStorage.cpp
deleted file mode 100755 (executable)
index e84ec7b..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-/*
- * FoldersStorage.cpp
- *
- *  Created on: Dec 14, 2015
- *      Author: m.kawonczyk@samsung.com
- */
-
-#include <boost/format.hpp>
-#include <BrowserAssert.h>
-#include <string>
-#include "Config.h"
-#include "FoldersStorage.h"
-#include "Field.h"
-#include "SQLTransactionScope.h"
-#include "DBTools.h"
-#include "SQLDatabase.h"
-#include "SQLDatabaseImpl.h"
-#include "DriverManager.h"
-#include "StorageException.h"
-#include "StorageExceptionInitialization.h"
-
-namespace {
-    const std::string TABLE_FOLDER = "FOLDER_TABLE";
-    const std::string COL_FOLDER_ID = "folder_id";
-    const std::string COL_FOLDER_NAME = "name";
-    const std::string COL_FOLDER_NUMBER = "number";
-    const std::string CONSTRAINT_TABLE_PK = TABLE_FOLDER + "_PK";
-    const std::string DDL_CREATE_TABLE_FOLDER
-                            = " CREATE TABLE " + TABLE_FOLDER
-                            + " ( " + COL_FOLDER_ID + " INTEGER, "
-                            + "   " + COL_FOLDER_NAME + " TEXT,"
-                            + "   " + COL_FOLDER_NUMBER + " INTEGER,"
-                            + " CONSTRAINT " + CONSTRAINT_TABLE_PK
-                            + "      PRIMARY KEY ( " + COL_FOLDER_ID + " ) "
-                            + "      ON CONFLICT REPLACE "
-                            + " ); ";
-
-}
-
-namespace tizen_browser {
-namespace storage {
-
-FoldersStorage::FoldersStorage()
-    : m_isInitialized(false)
-    , m_dbFoldersInitialised(false)
-{
-    init();
-}
-
-FoldersStorage::~FoldersStorage()
-{
-}
-
-
-void FoldersStorage::init()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if(m_isInitialized)
-        return;
-
-    std::string resourceDbDir(boost::any_cast < std::string > (tizen_browser::config::Config::getInstance().get("resourcedb/dir")));
-    std::string sessionDb(boost::any_cast < std::string > (tizen_browser::config::Config::getInstance().get("DB_FOLDERS")));
-
-    DB_FOLDERS = resourceDbDir + sessionDb;
-
-    BROWSER_LOGD("[%s:%d] DB_FOLDERS=%s", __PRETTY_FUNCTION__, __LINE__, DB_FOLDERS.c_str());
-
-    try {
-        initDatabaseFolders(DB_FOLDERS);
-    } catch (storage::StorageExceptionInitialization & e) {
-        BROWSER_LOGE("[%s:%d] Cannot initialize database %s!", __PRETTY_FUNCTION__, __LINE__, DB_FOLDERS.c_str());
-    }
-
-    m_isInitialized = true;
-}
-
-void FoldersStorage::initDatabaseFolders(const std::string& db_str)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    if (!m_dbFoldersInitialised) {
-        try {
-            dbtools::checkAndCreateTable(db_str, TABLE_FOLDER, DDL_CREATE_TABLE_FOLDER);
-            const std::string all = "All";
-            if (ifFolderExists(all))
-                AllFolder = getFolderId(all);
-            else
-                AllFolder = addFolder(all);
-
-#if PROFILE_MOBILE
-            const std::string special = "Mobile"; //TODO: missing translation
-#else
-            const std::string special = "Bookmark Bar"; //TODO: missing translation
-#endif
-            if (ifFolderExists(special))
-                SpecialFolder = getFolderId(special);
-            else
-                SpecialFolder = addFolder(special);
-        } catch (storage::StorageException & e) {
-            throw storage::StorageExceptionInitialization(e.getMessage(),
-                                                          e.getErrorCode());
-        }
-
-        m_dbFoldersInitialised = true;
-    }
-
-    M_ASSERT(m_dbFoldersInitialised);
-}
-
-services::SharedBookmarkFolder FoldersStorage::getFolder(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::string name = getFolderName(id);
-    unsigned int count = getFolderNumber(id);
-    services::SharedBookmarkFolder folder;
-    if (name != "")
-        folder = std::make_shared<services::BookmarkFolder>(id, name, count);
-    return folder;
-}
-
-services::SharedBookmarkFolderList FoldersStorage::getFolders()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    services::SharedBookmarkFolderList folders;
-    int foldersCount = getFoldersCount();
-    if (foldersCount != 0) {
-        boost::format getFoldersString("SELECT %1%, %2%, %3% FROM %4% ;");
-        getFoldersString % COL_FOLDER_ID % COL_FOLDER_NAME % COL_FOLDER_NUMBER % TABLE_FOLDER;
-        try {
-            storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-            std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-            storage::SQLQuery getFoldersQuery(connection->prepare(getFoldersString.str()));
-            getFoldersQuery.exec();
-            for (int i = 0; i < foldersCount; ++i) {
-                services::SharedBookmarkFolder bookmark = std::make_shared<services::BookmarkFolder>(
-                            getFoldersQuery.getInt(0), getFoldersQuery.getString(1), getFoldersQuery.getInt(2));
-                folders.push_back(bookmark);
-                getFoldersQuery.next();
-            }
-        } catch (storage::StorageException& e) {
-            BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-        }
-    }
-    return folders;
-}
-
-unsigned int FoldersStorage::getFoldersCount()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format getCountString("SELECT COUNT (*) FROM %1% ;");
-    getCountString % TABLE_FOLDER;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-        storage::SQLQuery getCountQuery(connection->prepare(getCountString.str()));
-        getCountQuery.exec();
-        return getCountQuery.getInt(0);
-    } catch (storage::StorageException& e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return 0;
-}
-
-unsigned int FoldersStorage::addFolder(const std::string& name)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format addFolderQueryString("INSERT OR REPLACE INTO %1% ( %2% ) VALUES ( ? );");
-    addFolderQueryString % TABLE_FOLDER % COL_FOLDER_NAME;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> db = scope.database();
-        storage::SQLQuery addFolderQuery(db->prepare(addFolderQueryString.str()));
-        addFolderQuery.bindText(1, name);
-        addFolderQuery.exec();
-        return db->lastInsertId();
-    } catch (storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return 0;
-}
-
-void FoldersStorage::updateFolderName(unsigned int id, const std::string& newName)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (id == AllFolder)
-        return;
-    boost::format updateFolderNameString("UPDATE %1%  SET %2% = ? WHERE %3% = ?" );
-    updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NAME % COL_FOLDER_ID;
-    storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-    std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-    try {
-        storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
-        updateFolderNameQuery.bindText(1, newName);
-        updateFolderNameQuery.bindInt(2, id);
-        updateFolderNameQuery.exec();
-    } catch (storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
-void FoldersStorage::addNumberInFolder(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (id != AllFolder)
-        addNumberInFolder(AllFolder);
-    boost::format updateFolderNameString("UPDATE %1% SET %2% = ? WHERE %3% = ?" );
-    updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID;
-    int count = getFolderNumber(id);
-    storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-    std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-    try {
-        storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
-        updateFolderNameQuery.bindInt(1, count+1);
-        updateFolderNameQuery.bindInt(2, id);
-        updateFolderNameQuery.exec();
-    } catch (storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
-void FoldersStorage::removeNumberInFolder(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (id != AllFolder)
-        removeNumberInFolder(AllFolder);
-    boost::format updateFolderNameString("UPDATE %1% SET %2% = ? WHERE %3% = ?" );
-    updateFolderNameString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID;
-    int count = getFolderNumber(id);
-    storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-    std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-    try {
-        storage::SQLQuery updateFolderNameQuery(connection->prepare(updateFolderNameString.str()));
-        updateFolderNameQuery.bindInt(1, count-1);
-        updateFolderNameQuery.bindInt(2, id);
-        updateFolderNameQuery.exec();
-    } catch (storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
-void FoldersStorage::deleteAllFolders()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format deleteFoldersString("DELETE FROM %1% WHERE %2% != ? AND %3% != ? ;");
-    deleteFoldersString % TABLE_FOLDER % COL_FOLDER_ID % COL_FOLDER_ID;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
-        storage::SQLQuery deleteFoldersQuery(connection->prepare(deleteFoldersString.str()));
-        deleteFoldersQuery.bindInt(1, AllFolder);
-        deleteFoldersQuery.bindInt(2, SpecialFolder);
-        deleteFoldersQuery.exec();
-    } catch( storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-
-    boost::format updateFoldersCountString("UPDATE %1% SET %2% = ? WHERE %3% = ? OR %4% = ?");
-    updateFoldersCountString % TABLE_FOLDER % COL_FOLDER_NUMBER % COL_FOLDER_ID % COL_FOLDER_ID;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-
-        storage::SQLQuery updateFoldersCountQuery(connection->prepare(updateFoldersCountString.str()));
-        updateFoldersCountQuery.bindInt(1, 0);
-        updateFoldersCountQuery.bindInt(2, AllFolder);
-        updateFoldersCountQuery.bindInt(3, SpecialFolder);
-        updateFoldersCountQuery.exec();
-    } catch( storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
-void FoldersStorage::deleteFolder(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (id == AllFolder || id == SpecialFolder)
-        return;
-    boost::format deleteFolderString("DELETE FROM %1% WHERE %2% = ?;");
-    deleteFolderString % TABLE_FOLDER % COL_FOLDER_ID;
-
-    storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-    std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-    try {
-        storage::SQLQuery deleteFolderQurey(connection->prepare(deleteFolderString.str()));
-        deleteFolderQurey.bindInt(1, id);
-        deleteFolderQurey.exec();
-    } catch (storage::StorageException &e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-}
-
-bool FoldersStorage::ifFolderExists(const std::string& name)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format getCountString("SELECT COUNT (*) FROM %1% WHERE %2% = ?;");
-    getCountString % TABLE_FOLDER % COL_FOLDER_NAME;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-        storage::SQLQuery getCountQuery(connection->prepare(getCountString.str()));
-        getCountQuery.bindText(1, name);
-        getCountQuery.exec();
-        int number = getCountQuery.getInt(0);
-        return number != 0;
-    } catch (storage::StorageException& e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return true;
-}
-
-unsigned int FoldersStorage::getFolderId(const std::string& name)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format getIdString("SELECT %1% FROM %2% WHERE %3% = ?;");
-    getIdString % COL_FOLDER_ID % TABLE_FOLDER % COL_FOLDER_NAME;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-        storage::SQLQuery getIdQuery(connection->prepare(getIdString.str()));
-        getIdQuery.bindText(1, name);
-        getIdQuery.exec();
-        return getIdQuery.getInt(0);
-    } catch (storage::StorageException& e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return 0;
-}
-
-std::string FoldersStorage::getFolderName(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format getNameString("SELECT %1% FROM %2% WHERE %3% = ?;");
-    getNameString % COL_FOLDER_NAME % TABLE_FOLDER % COL_FOLDER_ID;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-        storage::SQLQuery getNameQuery(connection->prepare(getNameString.str()));
-        getNameQuery.bindInt(1, id);
-        getNameQuery.exec();
-
-        return getNameQuery.getString(0);
-    } catch (storage::StorageException& e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return std::string();
-}
-
-unsigned int FoldersStorage::getFolderNumber(unsigned int id)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::format getNameString("SELECT %1% FROM %2% WHERE %3% = ?;");
-    getNameString % COL_FOLDER_NUMBER % TABLE_FOLDER % COL_FOLDER_ID;
-    try {
-        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_FOLDERS));
-        std::shared_ptr<storage::SQLDatabase> connection = scope.database();
-        storage::SQLQuery getNameQuery(connection->prepare(getNameString.str()));
-        getNameQuery.bindInt(1, id);
-        getNameQuery.exec();
-
-        return getNameQuery.getInt(0);
-    } catch (storage::StorageException& e) {
-        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
-    }
-    return 0;
-}
-
-}//end namespace storage
-}//end namespace tizen_browser
diff --git a/services/StorageService/FoldersStorage.h b/services/StorageService/FoldersStorage.h
deleted file mode 100755 (executable)
index 72b8061..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-
-/*
- * FoldersStorage.h
- *
- *  Created on: Dec 14, 2015
- *      Author: m.kawonczyk@samsung.com
- */
-
-
-#ifndef FOLDERSSTORAGE_H
-#define FOLDERSSTORAGE_H
-
-#include <memory>
-#include <boost/signals2/signal.hpp>
-
-#include "SQLDatabase.h"
-#include "WebEngineSettings.h"
-#include "BookmarkFolder.h"
-#include "app_i18n.h"
-
-namespace tizen_browser {
-namespace storage {
-
-
-class  FoldersStorage
-{
-public:
-    /**
-     * Singleton, protect against being created in wrong place.
-     */
-    FoldersStorage();
-
-    /**
-     * Initialise FoldersStorage.
-     *
-     * Checks if all needed tables are created and if not creates them.
-     *
-     * Returns true if there is no error.
-     */
-    void init();
-
-    unsigned int AllFolder;
-    unsigned int SpecialFolder;
-
-    ~FoldersStorage();
-
-    /**
-     * Returns created custom folder.
-     */
-    services::SharedBookmarkFolder getFolder(unsigned int id);
-
-    /**
-     * Returns all created custom folders.
-     */
-    services::SharedBookmarkFolderList getFolders();
-
-    /**
-     * Returns all created custom folders.
-     */
-    unsigned int getFoldersCount();
-
-    /**
-     * Adds folder with a specified name.
-     * Returns created folder id.
-     */
-    unsigned int addFolder(const std::string& name);
-
-    /**
-     * Updates folder with a specified name.
-     */
-    void updateFolderName(unsigned int id, const std::string& newName);
-
-    /**
-     * Add additional bookmark to a folder.
-     */
-    void addNumberInFolder(unsigned int id);
-
-    /**
-     * Remove additional bookmark to a folder.
-     */
-    void removeNumberInFolder(unsigned int id);
-
-    /**
-     * Delete all folders.
-     */
-    void deleteAllFolders();
-
-    /**
-     * Delete folder with a specified id.
-     */
-    void deleteFolder(unsigned int id);
-
-    /**
-     * Answers if folder of a specified name exists.
-     */
-    bool ifFolderExists(const std::string& name);
-    /**
-     * Get id of a folder.
-     */
-    unsigned int getFolderId(const std::string &name);
-
-    /**
-     * Get name of a folder.
-     */
-    std::string getFolderName(unsigned int id);
-
-    /**
-     * Get number of bookmarks in a folder.
-     */
-    unsigned int getFolderNumber(unsigned int id);
-
-private:
-    void initDatabaseFolders(const std::string& db_str);
-    bool m_isInitialized;
-    bool m_dbFoldersInitialised;
-
-    std::string DB_FOLDERS;
-};
-
-}//end namespace storage
-}//end namespace tizen_browser
-
-#endif // FOLDERSSTORAGE_H
diff --git a/services/StorageService/PWAStorage.cpp b/services/StorageService/PWAStorage.cpp
new file mode 100755 (executable)
index 0000000..7e29424
--- /dev/null
@@ -0,0 +1,449 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <string>
+#include <BrowserAssert.h>
+#include <boost/any.hpp>
+#include <boost/format.hpp>
+#include "EflTools.h"
+
+#include "Field.h"
+#include "BrowserLogger.h"
+#include "DriverManager.h"
+#include "DBTools.h"
+#include "Config.h"
+#include "StorageExceptionInitialization.h"
+#include "SQLTransactionScope.h"
+
+#include "PWAStorage.h"
+
+namespace {
+// ------ Database PWA ------
+const std::string TABLE_PWA = "PWA";
+const std::string COL_ID = "ID";
+const std::string COL_URL = "URL";
+const std::string COL_EXIST = "EXIST";
+const std::string COL_NEVER = "NEVER";
+
+const std::string CREATE_TABLE_PWA
+        = "CREATE TABLE " + TABLE_PWA
+        +   " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+        +   COL_URL + " TEXT UNIQUE, "
+        +   COL_EXIST + " INTEGER, "
+        +   COL_NEVER + " INTEGER "
+        + " );";
+
+const std::string TABLE_INSTALLED_PWA = "INSTALLED";
+const std::string COL_NAME = "NAME";
+const std::string COL_SHORTNAME = "SHORTNAME";
+const std::string COL_PUSH_ID = "PUSH_ID";
+const std::string COL_SHORTCUT = "PWA_SHORTCUT";
+
+const std::string CREATE_TABLE_INSTALLED_PWA
+        = "CREATE TABLE " + TABLE_INSTALLED_PWA
+        +   " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+        +   COL_PUSH_ID + " TEXT, "
+        +   COL_NAME + " TEXT, "
+        +   COL_SHORTNAME + " TEXT, "
+        +   COL_SHORTCUT + " TEXT "
+        + " );";
+
+const std::string TABLE_PERMISSION = "PERMISSION";
+const std::string COL_ORIGIN = "ORIGIN";
+const std::string COL_PERM_STATE = "PERM_STATE";
+
+const std::string CREATE_TABLE_PERMISSION
+        = "CREATE TABLE " + TABLE_PERMISSION
+        +   " ( " + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+        +   COL_ORIGIN + " TEXT, "
+        +   COL_PERM_STATE + " INTEGER "
+        + " );";
+
+// ------ (end) Database PWA ------
+}
+
+namespace tizen_browser {
+namespace storage {
+
+PWAStorage::PWAStorage()
+    : m_isInitialized(false)
+    , m_dbPWAInitialized(false)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    init();
+}
+
+void PWAStorage::init()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_isInitialized)
+        return;
+
+    std::string resourceDbDir(boost::any_cast<std::string>(config::Config::getInstance().get("resourcedb/dir")));
+    std::string pwaDb(boost::any_cast<std::string>(config::Config::getInstance().get("DB_PWA")));
+    DB_PWA = resourceDbDir + pwaDb;
+    BROWSER_LOGD("[%s:%d] DB_PWA=%s", __PRETTY_FUNCTION__, __LINE__, DB_PWA.c_str());
+    try {
+        initDatabasePWA(DB_PWA);
+    } catch (StorageExceptionInitialization & e) {
+        BROWSER_LOGE("[%s:%d] Cannot initialize database %s!", __PRETTY_FUNCTION__, __LINE__, DB_PWA.c_str());
+    }
+    m_isInitialized = true;
+}
+
+void PWAStorage::addPWAItem(const std::string & url, const int & exist, const int & never)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format addPWAItemQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%, %4%) VALUES (?, ?, ?);");
+    addPWAItemQueryString % TABLE_PWA % COL_URL % COL_EXIST % COL_NEVER;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery addPWAItemQuery(db->prepare(addPWAItemQueryString.str()));
+        addPWAItemQuery.bindText(1, url);
+        addPWAItemQuery.bindInt(2, exist);
+        addPWAItemQuery.bindInt(3, never);
+        addPWAItemQuery.exec();
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
+unsigned PWAStorage::installPWAItem(const std::string & name, const std::string & push_id, const std::string & shortName)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format installPWAItemQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%, %4%) VALUES (?, ?, ?);");
+
+    installPWAItemQueryString % TABLE_INSTALLED_PWA % COL_PUSH_ID % COL_NAME % COL_SHORTNAME;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery addPWAItemQuery(db->prepare(installPWAItemQueryString.str()));
+        addPWAItemQuery.bindText(1, push_id);
+        addPWAItemQuery.bindText(2, name);
+        addPWAItemQuery.bindText(3, shortName);
+        addPWAItemQuery.exec();
+
+        return static_cast<unsigned>(db->lastInsertId());
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+unsigned PWAStorage::addPermission(const std::string& origin, const bool& state)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format addPermissionQueryString("INSERT OR REPLACE INTO %1% (%2%, %3%) VALUES (?, ?);");
+
+    addPermissionQueryString % TABLE_PERMISSION % COL_ORIGIN % COL_PERM_STATE;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery addPermissionQuery(db->prepare(addPermissionQueryString.str()));
+        addPermissionQuery.bindText(1, origin);
+        addPermissionQuery.bindInt(2, state);
+        addPermissionQuery.exec();
+
+        return static_cast<unsigned>(db->lastInsertId());
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+unsigned PWAStorage::getPermissionState(const std::string& url)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getPermissionStateString(
+        "SELECT " + COL_PERM_STATE +" FROM " + TABLE_PERMISSION + " WHERE " + COL_ORIGIN + "='" + url + "';");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getPermStateQuery(db->prepare(getPermissionStateString.str()));
+        getPermStateQuery.exec();
+        return getPermStateQuery.getInt(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+unsigned PWAStorage::getPermissionId(const std::string& url)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getPermissionIdString("SELECT " + COL_ID + " FROM " + TABLE_PERMISSION + " WHERE " + COL_ORIGIN + "='" + url + "';");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getPermissionIdQuery(db->prepare(getPermissionIdString.str()));
+        getPermissionIdQuery.exec();
+        return getPermissionIdQuery.getInt(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+unsigned PWAStorage::getPermissionCount()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getCountString("SELECT COUNT (*) FROM " + TABLE_PERMISSION + " ;");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getCountQuery(db->prepare(getCountString.str()));
+        getCountQuery.exec();
+        unsigned count = getCountQuery.getInt(0);
+        BROWSER_LOGD("[%s:%d] count = %d", __PRETTY_FUNCTION__, __LINE__,  count);
+        return count;
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+bool PWAStorage::updatePermissionState(const int& id, const bool& state)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format updatePermissionStateString("UPDATE %1% SET %2%=(?) WHERE %3%=(?);");
+    updatePermissionStateString % TABLE_PERMISSION % COL_PERM_STATE % COL_ID;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery updateQuery(db->prepare(updatePermissionStateString.str()));
+        updateQuery.bindInt(1, state);
+        updateQuery.bindInt(2, id);
+        updateQuery.exec();
+        return true;
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return false;
+}
+
+std::map<std::string, bool> PWAStorage::getPermissionsMap()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    std::map<std::string, bool> permList;
+
+    int count = getPermissionCount();
+    if (count > 0) {
+        boost::format getListString("SELECT %2%, %3% FROM %1%");
+        getListString % TABLE_PERMISSION % COL_ORIGIN % COL_PERM_STATE;
+
+        try {
+            storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_PWA));
+            std::shared_ptr<storage::SQLDatabase> db = scope.database();
+            storage::SQLQuery getListQuery(db->prepare(getListString.str()));
+            getListQuery.exec();
+
+            for (int i = 0; i < count; ++i) {
+                auto origin = getListQuery.getString(0);
+                auto state = getListQuery.getInt(1);
+                BROWSER_LOGD("[%s:%d] insert to permList origin %s value %d", __PRETTY_FUNCTION__, __LINE__, origin.c_str(), state);
+                permList.insert({origin.c_str(), state});
+                getListQuery.next();
+            }
+        } catch (storage::StorageException& e){
+            BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+        }
+    }
+    BROWSER_LOGD("[%s:%d] permList size: %d", __PRETTY_FUNCTION__, __LINE__, permList.size());
+    return permList;
+}
+
+void PWAStorage::storePWAShortcut(const unsigned& id, const std::string& shortcut)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format storePWAShortcutString("UPDATE %1% SET %2%=(?) WHERE %3%=(?);");
+    storePWAShortcutString % TABLE_INSTALLED_PWA % COL_SHORTCUT % COL_ID;
+
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery addPWAItemQuery(db->prepare(storePWAShortcutString.str()));
+        addPWAItemQuery.bindText(1, shortcut);
+        addPWAItemQuery.bindInt(2, id);
+        addPWAItemQuery.exec();
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
+std::string PWAStorage::getPWAShortcut(const unsigned& id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getShortcutString(
+        "SELECT " + COL_SHORTCUT +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getIdQuery(db->prepare(getShortcutString.str()));
+        getIdQuery.exec();
+        return getIdQuery.getString(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return std::string();
+}
+
+std::string PWAStorage::getPWAName(const unsigned& id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getNameString(
+        "SELECT " + COL_NAME +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getIdQuery(db->prepare(getNameString.str()));
+        getIdQuery.exec();
+        return getIdQuery.getString(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return std::string();
+}
+
+std::string PWAStorage::getPWAShortName(const unsigned& id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getShortNameString(
+        "SELECT " + COL_SHORTNAME +" FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_ID + "=" + std::to_string(id) + ";");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getIdQuery(db->prepare(getShortNameString.str()));
+        getIdQuery.exec();
+        BROWSER_LOGD("[%s:%d][ldh.test] shortName : %s", __PRETTY_FUNCTION__, __LINE__, (getIdQuery.getString(0)).c_str());
+        return getIdQuery.getString(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return std::string();
+}
+
+void PWAStorage::deletePWAItems()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format deletePWAItemQueryString("DELETE FROM %1% ;");
+    deletePWAItemQueryString % TABLE_PWA;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery deletePWAItemQuery(db->prepare(deletePWAItemQueryString.str()));
+        deletePWAItemQuery.exec();
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
+int PWAStorage::getPWAIdFromPushId(const std::string& pushId)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getIdString("SELECT ID FROM " + TABLE_INSTALLED_PWA + " WHERE " + COL_PUSH_ID + "='" + pushId + "';");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getIdQuery(db->prepare(getIdString.str()));
+        getIdQuery.exec();
+        return getIdQuery.getInt(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+std::string PWAStorage::getUrlFromId(const int& id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getUrlString("SELECT URL FROM " + TABLE_PWA + " WHERE " + COL_ID + "='" + std::to_string(id) + "';");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getUrlQuery(db->prepare(getUrlString.str()));
+        getUrlQuery.exec();
+        return getUrlQuery.getString(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return std::string();
+}
+
+unsigned int PWAStorage::getPWACount()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format getCountString("SELECT COUNT (*) FROM " + TABLE_PWA + " ;");
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getCountQuery(db->prepare(getCountString.str()));
+        getCountQuery.exec();
+        return getCountQuery.getInt(0);
+    } catch (const StorageException& e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return 0;
+}
+
+int PWAStorage::getPWACheck(const std::string & url)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    int pwaCount = getPWACount();
+
+    if (pwaCount) {
+        boost::format getPWAListString("SELECT %1%, %2%, %3% FROM %4% ;");
+        getPWAListString % COL_URL % COL_EXIST % COL_NEVER % TABLE_PWA;
+        try {
+            SQLTransactionScope scope(DriverManager::getDatabase(DB_PWA));
+            std::shared_ptr<SQLDatabase> db = scope.database();
+            SQLQuery getPWAListQuery(db->prepare(getPWAListString.str()));
+            getPWAListQuery.exec();
+
+            for (int i = 0; i < pwaCount; ++i) {
+                if (!strcmp(url.c_str(), getPWAListQuery.getString(0).c_str())) {
+                    if (getPWAListQuery.getInt(2))
+                        return getPWAListQuery.getInt(2);
+                    else
+                        return getPWAListQuery.getInt(1);
+                }
+                getPWAListQuery.next();
+            }
+        } catch (const StorageException& e) {
+            BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+        }
+    }
+    BROWSER_LOGD("[%s:%d] pwaCount is 0 or string not equal !", __PRETTY_FUNCTION__, __LINE__);
+    return 0;
+}
+
+void PWAStorage::initDatabasePWA(const std::string &db_str)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!m_dbPWAInitialized) {
+        try {
+            dbtools::checkAndCreateTable(db_str, TABLE_PWA, CREATE_TABLE_PWA);
+            dbtools::checkAndCreateTable(db_str, TABLE_INSTALLED_PWA, CREATE_TABLE_INSTALLED_PWA);
+            dbtools::checkAndCreateTable(db_str, TABLE_PERMISSION, CREATE_TABLE_PERMISSION);
+        } catch (const StorageException& e) {
+            throw StorageExceptionInitialization(e.getMessage(), e.getErrorCode());
+        }
+        m_dbPWAInitialized = true;
+    }
+}
+
+}//end namespace storage
+}//end namespace tizen_browser
diff --git a/services/StorageService/PWAStorage.h b/services/StorageService/PWAStorage.h
new file mode 100755 (executable)
index 0000000..2fd57ea
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PWASTORAGE_H
+#define PWASTORAGE_H
+
+#include "SQLDatabase.h"
+#include <map>
+
+namespace tizen_browser {
+namespace storage {
+
+class PWAStorage
+{
+public:
+
+    PWAStorage();
+    void init();
+    void addPWAItem(const std::string & url, const int & exist, const int & never);
+    unsigned installPWAItem(const std::string & name, const std::string & push_id, const std::string & shortName);
+    void deletePWAItems();
+    unsigned int getPWACount();
+    int getPWAIdFromPushId(const std::string& pushId);
+    std::string getUrlFromId(const int& id);
+    int getPWACheck(const std::string & url);
+    unsigned addPermission(const std::string& origin, const bool& state);
+    unsigned getPermissionState(const std::string& url);
+    unsigned getPermissionId(const std::string& url);
+    unsigned getPermissionCount();
+    bool updatePermissionState(const int& id, const bool& state);
+    std::map<std::string, bool> getPermissionsMap();
+    void storePWAShortcut(const unsigned& id, const std::string& shortcut);
+    std::string getPWAShortcut(const unsigned& id);
+    std::string getPWAName(const unsigned& id);
+    std::string getPWAShortName(const unsigned& id);
+
+private:
+
+    void initDatabasePWA(const std::string & db_str);
+    bool m_isInitialized;
+    bool m_dbPWAInitialized;
+    std::string DB_PWA;
+};
+
+}//end namespace storage
+}//end namespace tizen_browser
+
+#endif // PWASTORAGE_H
index 69039df..7ac73e1 100755 (executable)
@@ -89,7 +89,7 @@ void QuickAccessStorage::init()
     m_isInitialized = true;
 }
 
-void QuickAccessStorage::addQuickAccessItem(
+unsigned QuickAccessStorage::addQuickAccessItem(
     const std::string &url,
     const std::string &title,
     int color,
@@ -120,12 +120,15 @@ void QuickAccessStorage::addQuickAccessItem(
         addQuickAccessItemQuery.bindInt(7, width);
         addQuickAccessItemQuery.bindInt(8, height);
         addQuickAccessItemQuery.exec();
-    } catch (storage::StorageException &e) {
+
+        return static_cast<unsigned>(db->lastInsertId());
+    } catch (const storage::StorageException &e) {
         BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
     }
+    return 0;
 }
 
-void QuickAccessStorage::deleteQuickAccessItem(unsigned int id)
+void QuickAccessStorage::deleteQuickAccessItem(const unsigned &id)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     boost::format deleteQuickAccessItemQueryString("DELETE FROM %1% WHERE %2% = ?;");
@@ -141,6 +144,23 @@ void QuickAccessStorage::deleteQuickAccessItem(unsigned int id)
     }
 }
 
+void QuickAccessStorage::updateItemOrder(const unsigned &id, const unsigned &order)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::format updateOrderQuickAccessItemQueryString("UPDATE %1% SET %2% = ? WHERE %3% = ?;");
+    updateOrderQuickAccessItemQueryString % TABLE_QUICKACCESS % COL_ORDER % COL_ID;
+    try {
+        storage::SQLTransactionScope scope(storage::DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<storage::SQLDatabase> db = scope.database();
+        storage::SQLQuery updateOrderQuickAccessItemQuery(db->prepare(updateOrderQuickAccessItemQueryString.str()));
+        updateOrderQuickAccessItemQuery.bindInt(1, order);
+        updateOrderQuickAccessItemQuery.bindInt(2, id);
+        updateOrderQuickAccessItemQuery.exec();
+    } catch (storage::StorageException &e) {
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+}
+
 unsigned int QuickAccessStorage::getQuickAccessCount()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -175,13 +195,52 @@ bool QuickAccessStorage::quickAccessItemExist(const std::string &url)
     return false;
 }
 
+services::SharedQuickAccessItem QuickAccessStorage::getQuickAccessItem(const unsigned& id)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    services::SharedQuickAccessItem QAItem;
+    boost::format getQuickAccessItemString("SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8% FROM %9% WHERE %10% = ?;");
+    getQuickAccessItemString % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER % COL_HAS_FAVICON %
+        COL_FAVICON % COL_WIDTH % COL_HEIGHT % TABLE_QUICKACCESS % COL_ID;
+    try {
+        SQLTransactionScope scope(DriverManager::getDatabase(DB_QUICKACCESS));
+        std::shared_ptr<SQLDatabase> db = scope.database();
+        SQLQuery getQuickAccesItemQuery(db->prepare(getQuickAccessItemString.str()));
+        getQuickAccesItemQuery.bindInt(1, static_cast<int>(id));
+        getQuickAccesItemQuery.exec();
+
+        QAItem = std::make_shared<services::QuickAccessItem>(
+            id,
+            getQuickAccesItemQuery.getString(0),
+            getQuickAccesItemQuery.getString(1),
+            getQuickAccesItemQuery.getInt(2),
+            getQuickAccesItemQuery.getInt(3),
+            static_cast<bool>(getQuickAccesItemQuery.getInt(4)));
+
+        if (static_cast<bool>(getQuickAccesItemQuery.getInt(4))) {
+            auto blob = getQuickAccesItemQuery.getBlob(5);
+            tools::BrowserImagePtr favicon = std::make_shared<tools::BrowserImage>(
+                getQuickAccesItemQuery.getInt(6),
+                getQuickAccesItemQuery.getInt(7),
+                blob->getLength());
+            favicon->setData(const_cast<void *>(blob->getData()),
+                false, tools::ImageType::ImageTypePNG);
+            QAItem->setFavicon(favicon);
+        }
+    } catch (const StorageException& e){
+        BROWSER_LOGD("[%s:%d] SQLException (%d): %s ", __PRETTY_FUNCTION__, __LINE__, e.getErrorCode(), e.getMessage());
+    }
+    return QAItem;
+}
+
 services::SharedQuickAccessItemVector QuickAccessStorage::getQuickAccessList()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     services::SharedQuickAccessItemVector QAList;
     int QACount = getQuickAccessCount();
     if (QACount > 0) {
-        boost::format getQuickAccessListString("SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8%, %9% FROM %10% ;");
+        boost::format getQuickAccessListString(
+            "SELECT %1%, %2%, %3%, %4%, %5%, %6%, %7%, %8%, %9% FROM %10% ORDER BY %5% ASC;");
         getQuickAccessListString % COL_ID % COL_URL % COL_TITLE % COL_COLOR % COL_ORDER %
             COL_HAS_FAVICON % COL_FAVICON % COL_WIDTH % COL_HEIGHT % TABLE_QUICKACCESS;
         try {
index 84545ff..233b833 100755 (executable)
@@ -29,7 +29,7 @@ public:
 
     QuickAccessStorage();
     void init();
-    void addQuickAccessItem(
+    unsigned addQuickAccessItem(
         const std::string &url,
         const std::string &title,
         int color,
@@ -38,9 +38,11 @@ public:
         tools::BrowserImagePtr favicon,
         int widht,
         int height);
-    void deleteQuickAccessItem(unsigned int id);
+    void deleteQuickAccessItem(const unsigned &id);
+    void updateItemOrder(const unsigned &id, const unsigned &order);
     unsigned int getQuickAccessCount();
     bool quickAccessItemExist(const std::string &url);
+    services::SharedQuickAccessItem getQuickAccessItem(const unsigned &id);
     services::SharedQuickAccessItemVector getQuickAccessList();
 
 private:
index 7c04dc0..f614239 100755 (executable)
@@ -146,7 +146,7 @@ static inline bool sql_rollback(sqlite3 * db)
     return true;
 }
 
-SQLQueryPrivate::SQLQueryPrivate(std::shared_ptr<SQLDatabase> db_ref,
+SQLQueryPrivate::SQLQueryPrivate(const std::shared_ptr<SQLDatabase>& db_ref,
         sqlite3 * db,
         sqlite3_stmt * stmt,
         const std::string& query) :
@@ -212,8 +212,8 @@ SQLQuery::~SQLQuery()
 
 SQLQuery& SQLQuery::operator = (const SQLQuery& other)
 {
-    if(d != other.d) {
-        if(other.d) {
+    if (&other != this && d != other.d) {
+        if (other.d) {
             SQLQueryPrivate * new_d = new SQLQueryPrivate(*other.d);
             delete d;
             d = new_d;
index 9af2e04..088793a 100755 (executable)
@@ -32,7 +32,7 @@ public:
        bool _hasNext;
        std::string _query;
 
-       SQLQueryPrivate(std::shared_ptr<SQLDatabase> db_ref, sqlite3 * db, sqlite3_stmt * stmt, const std::string& query);
+    SQLQueryPrivate(const std::shared_ptr<SQLDatabase>& db_ref, sqlite3 * db, sqlite3_stmt * stmt, const std::string& query);
        SQLQueryPrivate(const SQLQueryPrivate& other);
        ~SQLQueryPrivate();
 };
index 02c42e2..a009c9a 100755 (executable)
@@ -36,7 +36,7 @@ class SQLTransactionScope : boost::noncopyable
     std::shared_ptr<SQLDatabase> _db;
     bool _inTransaction;
 public:
-    SQLTransactionScope(std::shared_ptr<SQLDatabase> db);
+    explicit SQLTransactionScope(std::shared_ptr<SQLDatabase> db);
     ~SQLTransactionScope();
     void commit();
     void rollback();
index 9b44311..ae97187 100755 (executable)
@@ -95,30 +95,6 @@ SettingsStorage::~SettingsStorage()
 {
 }
 
-void SettingsStorage::resetSettings()
-{
-    setParam(basic_webengine::WebEngineSettings::PAGE_OVERVIEW, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW)));
-    setParam(basic_webengine::WebEngineSettings::LOAD_IMAGES, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES)));
-    setParam(basic_webengine::WebEngineSettings::ENABLE_JAVASCRIPT, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT)));
-    setParam(basic_webengine::WebEngineSettings::REMEMBER_FROM_DATA, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA)));
-    setParam(basic_webengine::WebEngineSettings::REMEMBER_PASSWORDS, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS)));
-    setParam(basic_webengine::WebEngineSettings::AUTOFILL_PROFILE_DATA, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA)));
-    setParam(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES)));
-    setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::SAVE_CONTENT_LOCATION)));
-    setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::DEFAULT_SEARCH_ENGINE)));
-    setParamString(basic_webengine::WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<std::string>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::CURRENT_HOME_PAGE)));
-}
-
 void SettingsStorage::init(bool testmode)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
index ea5df09..f63964b 100755 (executable)
@@ -33,7 +33,6 @@ public:
     SettingsStorage();
     virtual ~SettingsStorage();
 
-    void resetSettings();
     void setParam(basic_webengine::WebEngineSettings param, bool value) const;
     void setParamString(basic_webengine::WebEngineSettings param, std::string value) const;
     bool getParamVal(basic_webengine::WebEngineSettings param) const;
index 2a3425d..41e29cb 100755 (executable)
@@ -20,9 +20,9 @@
 #include "ServiceFactory.h"
 #include "service_macros.h"
 #include "SettingsStorage.h"
-#include "FoldersStorage.h"
 #include "CertificateStorage.h"
 #include "QuickAccessStorage.h"
+#include "PWAStorage.h"
 
 #define DOMAIN_STORAGE_SERVICE "org.tizen.browser.storageservice"
 
@@ -37,15 +37,15 @@ public:
     virtual std::string getName();
 
     storage::SettingsStorage& getSettingsStorage() { return m_settingsStorage; }
-    storage::FoldersStorage& getFoldersStorage() { return m_foldersStorage; }
     storage::CertificateStorage& getCertificateStorage() { return m_certificateStorage; }
     storage::QuickAccessStorage& getQuickAccessStorage() { return m_quickaccessStorage; }
+    storage::PWAStorage getPWAStorage() const { return m_pwaStorage; }
 
 private:
     storage::SettingsStorage m_settingsStorage;
-    storage::FoldersStorage m_foldersStorage;
     storage::CertificateStorage m_certificateStorage;
     storage::QuickAccessStorage m_quickaccessStorage;
+    storage::PWAStorage m_pwaStorage;
 };
 
 
index edbd096..9919f96 100755 (executable)
@@ -49,19 +49,6 @@ int TabService::createTabId(int tabId) const
     return adaptorId;
 }
 
-boost::optional<int> TabService::convertTabId(std::string tabId) const
-{
-    try {
-        boost::optional<int> tabIdConverted = std::stoi(tabId);
-        return tabIdConverted;
-    } catch (const std::exception& /*e*/) {
-        BROWSER_LOGE("%s can't convert %s to tab id",
-            __PRETTY_FUNCTION__,
-            tabId.c_str());
-        return boost::none;
-    }
-}
-
 void TabService::errorPrint(std::string method) const
 {
     int error_code = bp_tab_adaptor_get_errorcode();
@@ -296,7 +283,7 @@ void TabService::saveThumbDatabase(
         BROWSER_LOGW("getBlobPNG failed");
         return;
     }
-    auto thumbData = std::move((unsigned char*)thumb_blob->getData());
+    auto thumbData = const_cast<unsigned char*>( static_cast<const unsigned char*>(thumb_blob->getData()));
     if (bp_tab_adaptor_set_snapshot(
         tabId.get(),
         imagePtr->getWidth(),
@@ -317,7 +304,7 @@ void TabService::saveFaviconDatabase(
         BROWSER_LOGW("getBlobPNG failed");
         return;
     }
-    auto faviconData = std::move((unsigned char*)favicon_blob->getData());
+    auto faviconData = const_cast<unsigned char*>(static_cast<const unsigned char*>(favicon_blob->getData()));
     if (bp_tab_adaptor_set_icon(
             tabId.get(),
             imagePtr->getWidth(),
index d8ca1b7..e606d09 100755 (executable)
@@ -87,13 +87,6 @@ public:
      */
     int createTabId(int tabId = -1) const;
 
-    /**
-     * Convert tab id (string) to int.
-     *
-     * @return boost::none if string cannot be converted
-     */
-    boost::optional<int> convertTabId(std::string tabId) const;
-
     boost::signals2::signal<void(basic_webengine::TabId)> generateThumb;
     boost::signals2::signal<void(basic_webengine::TabId)> generateFavicon;
 
index 0a49c56..e6f5704 100755 (executable)
@@ -17,8 +17,12 @@ PasswordUI::PasswordUI()
     , m_genlist(nullptr)
     , m_entry(nullptr)
     , m_checkbox(nullptr)
+    , m_limit(nullptr)
+    , m_password_item(nullptr)
+    , m_action(PasswordAction::CreatePasswordFirstTime)
     , m_state(PasswordState::CreatePassword)
 {
+    TabTranslations::instance().update();
     m_edjFilePath = EDJE_DIR;
     m_edjFilePath.append("TabUI/PasswordUI.edj");
     createGenlistItemClasses();
@@ -26,11 +30,16 @@ PasswordUI::PasswordUI()
 
 PasswordUI::~PasswordUI()
 {
+    if (m_genlist)
+        evas_object_smart_callback_del(m_genlist, "language,changed", _language_changed);
+    if (m_limit)
+        free(m_limit);
 }
 
 void PasswordUI::showUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    TabTranslations::instance().update();
     M_ASSERT(m_naviframe->getLayout());
     m_naviframe->show();
     changeState(m_state);
@@ -101,6 +110,19 @@ char* PasswordUI::_genlist_item_text_get(void *data, Evas_Object *, const char *
     return nullptr;
 }
 
+void PasswordUI::_language_changed(void *data, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    TabTranslations::instance().update();
+    if (!data) {
+        BROWSER_LOGE("data is null");
+        return;
+    }
+    auto self = static_cast<PasswordUI*>(data);
+    self->changeState(self->m_state);
+    elm_genlist_realized_items_update(obj);
+}
+
 Evas_Object* PasswordUI::_genlist_password_content_get(void *data, Evas_Object *obj, const char *part)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -115,6 +137,8 @@ Evas_Object* PasswordUI::_genlist_password_content_get(void *data, Evas_Object *
             elm_entry_single_line_set(passwordData->passwordUI->m_entry, EINA_TRUE);
             elm_entry_scrollable_set(passwordData->passwordUI->m_entry, EINA_TRUE);
             tools::EflTools::setExpandHints(passwordData->passwordUI->m_entry);
+            passwordData->passwordUI->m_limit = tools::EflTools::setEntryLimit(
+                passwordData->passwordUI->m_entry);
             elm_entry_entry_set(passwordData->passwordUI->m_entry, elm_entry_utf8_to_markup(""));
             elm_entry_password_set(passwordData->passwordUI->m_entry, EINA_TRUE);
             elm_entry_input_panel_return_key_type_set(passwordData->passwordUI->m_entry,
@@ -167,7 +191,8 @@ Evas_Object* PasswordUI::_genlist_check_on_off_content_get(void *data, Evas_Obje
             elm_object_style_set(checkbox, "on&off");
             elm_check_state_set(checkbox,
                 passwordData->passwordUI->getDBPassword().empty() ? EINA_FALSE : EINA_TRUE);
-            evas_object_propagate_events_set(checkbox, EINA_TRUE);
+            evas_object_propagate_events_set(checkbox, EINA_FALSE);
+            evas_object_smart_callback_add(checkbox, "changed", _use_password_clicked, data);
             return checkbox;
         }
     } else {
@@ -185,6 +210,7 @@ void PasswordUI::createLayout()
     m_naviframe = std::make_unique<NaviframeWrapper>(m_parent);
 
     m_genlist = elm_genlist_add(m_naviframe->getLayout());
+    evas_object_smart_callback_add(m_genlist, "language,changed", _language_changed, this);
     elm_scroller_policy_set(m_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
     elm_genlist_multi_select_set(m_genlist, EINA_FALSE);
     elm_genlist_select_mode_set(m_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
@@ -205,7 +231,6 @@ void PasswordUI::changeState(PasswordState state)
     elm_genlist_clear(m_genlist);
     m_state = state;
 
-    BROWSER_LOGD("___________ %d", m_state);
     if (m_state != PasswordState::SecretModeData) {
         //Add password item
         auto passwordData = std::make_shared<PasswordUIData>();
@@ -214,24 +239,23 @@ void PasswordUI::changeState(PasswordState state)
 
         switch (m_state) {
         case PasswordState::ConfirmPassword:
-            text = _(Translations::ConfirmPassword.c_str());
-            m_naviframe->setTitle("Confirm password");
+            text = TabTranslations::instance().ConfirmPassword.c_str();
+            m_naviframe->setTitle("IDS_BR_HEADER_CONFIRM_PASSWORD_ABB2");
             break;
         case PasswordState::IncorrectPassword:
-            text = _(Translations::IncorrectPassword.c_str());
+            text = TabTranslations::instance().IncorrectPassword.c_str();
             break;
         case PasswordState::CreatePassword:
-            text = (boost::format(_(Translations::CreatePassword.c_str()))
+            text = (boost::format(TabTranslations::instance().CreatePassword.c_str())
                 % PASSWORD_MINIMUM_CHARACTERS).str();
-            m_naviframe->setTitle("Create password");
+            m_naviframe->setTitle("IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB");
             break;
         case PasswordState::ConfirmCreatePassword:
-            text = _(Translations::ConfirmCreatePassword.c_str());
+            text = TabTranslations::instance().ConfirmCreatePassword.c_str();
             break;
         default:
             break;
         }
-        BROWSER_LOGD("___________ %s", text.c_str());
         passwordData->text = text;
         passwordData->passwordUI = this;
         m_password_item = elm_genlist_item_append(m_genlist, m_password_item_class, passwordData.get(),
@@ -240,16 +264,16 @@ void PasswordUI::changeState(PasswordState state)
         //Add ShowPassword checkbox
         auto checkboxData = std::make_shared<PasswordUIData>();
         m_genlistItemData.push_back(checkboxData);
-        checkboxData->text = _(Translations::ShowPassword.c_str());
+        checkboxData->text = TabTranslations::instance().ShowPassword.c_str();
         checkboxData->passwordUI = this;
         elm_genlist_item_append(m_genlist, m_checkbox_item_class, checkboxData.get(), nullptr,
             ELM_GENLIST_ITEM_NONE, _show_password_clicked, checkboxData.get());
     } else {
-        m_naviframe->setTitle(_("IDS_BR_OPT_SECRET_MODE_SECURITY_ABB"));
+        m_naviframe->setTitle("IDS_BR_OPT_SECRET_MODE_SECURITY_ABB");
         //Add UsePassword check_on_off
         auto checkOnOffData = std::make_shared<PasswordUIData>();
         m_genlistItemData.push_back(checkOnOffData);
-        checkOnOffData->text = _(Translations::UsePassword.c_str());
+        checkOnOffData->text = TabTranslations::instance().UsePassword.c_str();
         checkOnOffData->passwordUI = this;
         elm_genlist_item_append(m_genlist, m_check_on_of_item_class, checkOnOffData.get(), nullptr,
             ELM_GENLIST_ITEM_NONE, _use_password_clicked, checkOnOffData.get());
@@ -258,7 +282,7 @@ void PasswordUI::changeState(PasswordState state)
         if (!getDBPassword().empty()) {
             auto changeData = std::make_shared<PasswordUIData>();
             m_genlistItemData.push_back(changeData);
-            changeData->text = _(Translations::ChangePassword.c_str());
+            changeData->text = TabTranslations::instance().ChangePassword.c_str();
             changeData->passwordUI = this;
             elm_genlist_item_append(m_genlist, m_text_item_class, changeData.get(), nullptr,
                 ELM_GENLIST_ITEM_NONE, _change_password_clicked, changeData.get());
@@ -329,6 +353,7 @@ void PasswordUI::_entry_submited(void * data, Evas_Object *, void *)
                 case PasswordAction::ConfirmPasswordEnterSecret:
                     self->changeEngineState();
                     self->closeUI();
+                    break;
                 default:
                     BROWSER_LOGW("Action state is not supported in Password workflow");
                     break;
@@ -340,7 +365,7 @@ void PasswordUI::_entry_submited(void * data, Evas_Object *, void *)
             std::string s = std::string(elm_object_text_get(self->m_entry));
             if (s.length() < PASSWORD_MINIMUM_CHARACTERS ||
                 !checkIfStringContainsLetter(s)) {
-                elm_object_text_set(self->m_entry, "");
+                elm_object_translatable_text_set(self->m_entry, "");
             } else {
                 self->m_not_confirmed_hash = hash;
                 self->changeState(PasswordState::ConfirmCreatePassword);
@@ -384,8 +409,7 @@ void PasswordUI::_show_password_clicked(void *data, Evas_Object *, void *)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         PasswordUI* passwordUI = static_cast<PasswordUI*>(data);
-        elm_check_state_set(passwordUI->m_checkbox,
-            !elm_check_state_get(passwordUI->m_checkbox));
+        elm_check_state_set(passwordUI->m_checkbox, !elm_check_state_get(passwordUI->m_checkbox));
         elm_entry_password_set(passwordUI->m_entry, !elm_check_state_get(passwordUI->m_checkbox));
     } else {
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
index 946a0a3..b5c92e9 100755 (executable)
@@ -70,6 +70,7 @@ private:
     static void _show_password_clicked(void* data, Evas_Object*, void*);
     static void _use_password_clicked(void* data, Evas_Object*, void*);
     static void _change_password_clicked(void* data, Evas_Object*, void*);
+    static void _language_changed(void *data, Evas_Object* obj, void*);
 
     //Genlist items create callbacks
     static char* _genlist_item_text_get(void *data, Evas_Object *obj, const char *part);
@@ -82,6 +83,8 @@ private:
     Evas_Object* m_entry;
     Evas_Object* m_checkbox;
 
+    Elm_Entry_Filter_Limit_Size* m_limit;
+
     Elm_Object_Item *m_password_item;
 
     Elm_Genlist_Item_Class *m_password_item_class;
index 52ca772..4217b1a 100755 (executable)
@@ -36,21 +36,31 @@ TabUI::TabUI()
     , m_content(nullptr)
     , m_gengrid(nullptr)
     , m_empty_layout(nullptr)
+    , m_popup_genlist(nullptr)
+    , m_popup_decision(true)
     , m_itemToShow(nullptr)
     , m_last_pressed_gengrid_item(nullptr)
     , m_item_class(nullptr)
+    , m_popup_text_item_class(nullptr)
+    , m_popup_checkbox_item_class(nullptr)
+    , m_edjFilePath(std::string(EDJE_DIR) + std::string("TabUI/TabUI.edj"))
     , m_state(State::NORMAL)
     , m_passwordUI(std::make_shared<PasswordUI>())
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("TabUI/TabUI.edj");
     createTabItemClass();
 }
 
 TabUI::~TabUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_gengrid_item_class_free(m_item_class);
+    if (m_gengrid)
+        evas_object_smart_callback_del(m_gengrid, "language,changed", _language_changed);
+    if (m_item_class)
+        elm_gengrid_item_class_free(m_item_class);
+    if (m_popup_text_item_class)
+        elm_genlist_item_class_free(m_popup_text_item_class);
+    if (m_popup_checkbox_item_class)
+        elm_genlist_item_class_free(m_popup_checkbox_item_class);
 }
 
 void TabUI::createTabItemClass()
@@ -58,12 +68,30 @@ void TabUI::createTabItemClass()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (!m_item_class) {
         m_item_class = elm_gengrid_item_class_new();
-        m_item_class->item_style = "custom_tab_item";
-        m_item_class->func.text_get = _gengrid_text_get;
+        m_item_class->item_style = "default";
+        m_item_class->func.text_get = nullptr;
         m_item_class->func.content_get =  _gengrid_content_get;
         m_item_class->func.state_get = nullptr;
         m_item_class->func.del = nullptr;
     }
+
+    if (!m_popup_text_item_class) {
+        m_popup_text_item_class = elm_genlist_item_class_new();
+        m_popup_text_item_class->item_style = "multiline";
+        m_popup_text_item_class->func.text_get = _genlist_text_get;
+        m_popup_text_item_class->func.content_get =  nullptr;
+        m_popup_text_item_class->func.state_get = nullptr;
+        m_popup_text_item_class->func.del = nullptr;
+    }
+
+    if (!m_popup_checkbox_item_class) {
+        m_popup_checkbox_item_class = elm_genlist_item_class_new();
+        m_popup_checkbox_item_class->item_style = "type1";
+        m_popup_checkbox_item_class->func.text_get = _genlist_checkbox_text_get;
+        m_popup_checkbox_item_class->func.content_get =  _genlist_content_get;
+        m_popup_checkbox_item_class->func.state_get = nullptr;
+        m_popup_checkbox_item_class->func.del = nullptr;
+    }
 }
 
 void TabUI::showUI()
@@ -109,6 +137,30 @@ Evas_Object* TabUI::getContent()
     return m_naviframe->getLayout();
 }
 
+Evas_Object* TabUI::getPopupContent(Evas_Object* parent)
+{
+    if (m_popup_genlist) {
+        evas_object_del(m_popup_genlist);
+        m_popup_genlist = nullptr;
+    }
+    m_popup_genlist = elm_genlist_add(parent);
+
+    elm_scroller_policy_set(m_popup_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+    elm_genlist_mode_set(m_popup_genlist, ELM_LIST_COMPRESS);
+    evas_object_size_hint_weight_set(m_popup_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_popup_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+    elm_genlist_item_select_mode_set(elm_genlist_item_append(m_popup_genlist, m_popup_text_item_class,
+        this, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, nullptr), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+    elm_genlist_item_select_mode_set(elm_genlist_item_append(m_popup_genlist, m_popup_checkbox_item_class,
+        this, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, nullptr), ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+    evas_object_show(m_popup_genlist);
+
+    return m_popup_genlist;
+}
+
 void TabUI::createTabUILayout()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -133,7 +185,7 @@ void TabUI::createTabUILayout()
 
 void TabUI::createTopContent()
 {
-    m_naviframe->setTitle(_("IDS_BR_SK_TABS"));
+    m_naviframe->setTitle("IDS_BR_SK_TABS");
     m_naviframe->addPrevButton(_close_clicked, this);
     m_naviframe->setPrevButtonVisible(true);
 }
@@ -151,7 +203,7 @@ void TabUI::createBottomContent()
     //TODO: Missing translation
     m_naviframe->addButtonToBottomBar("Enable Secret", _left_button_clicked, this);
     m_naviframe->setEnableButtonInBottomBar(0, true);
-    m_naviframe->addButtonToBottomBar(_("IDS_BR_BUTTON_NEW_TAB_ABB2"), _right_button_clicked, this);
+    m_naviframe->addButtonToBottomBar("IDS_BR_BUTTON_NEW_TAB_ABB2", _right_button_clicked, this);
     m_naviframe->setEnableButtonInBottomBar(1, true);
 }
 
@@ -161,29 +213,42 @@ void TabUI::createEmptyLayout()
     m_empty_layout = elm_layout_add(m_content);
     elm_layout_theme_set(m_empty_layout, "layout", "nocontents", "default");
 
+    changeEmptyLayoutText();
+
     evas_object_size_hint_weight_set(m_empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
-    //TODO: Add translations
-    if (m_state != State::PASSWORD_DECISION)
-        elm_object_translatable_part_text_set(m_empty_layout, "elm.text", _("IDS_BR_BODY_NO_TABS"));
-    //TODO: _("IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE") when it works
-    if (m_state == State::SECRET || m_state == State::PASSWORD_DECISION)
-        elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
-            "Any webpages viewed while Secret mode is enabled will not appear "
-            "in your browser or search history while Secret mode is "
-            "disabled. Any bookmarks and webpages saved while Secretmode "
-            "is enabled will not be shown while it is disabled.");
-    else
-        elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text",
-            _("IDS_BR_BODY_AFTER_YOU_VIEW_WEBPAGES_THEY_WILL_BE_SHOWN_HERE"));
-
     elm_layout_signal_emit(m_empty_layout, "text,disabled", "");
     elm_layout_signal_emit(m_empty_layout, "align.center", "elm");
 
     elm_object_part_content_set(m_content, "elm.swallow.content_overlay", m_empty_layout);
 }
 
+void TabUI::changeEmptyLayoutText()
+{
+    if (m_state != State::PASSWORD_DECISION)
+        elm_object_translatable_part_text_set(m_empty_layout, "elm.text",
+            "IDS_BR_NPBODY_YOU_DONT_HAVE_ANY_OPEN_TABS");
+    std::string message;
+    switch (m_state) {
+    case State::SECRET:
+        message = "IDS_BR_BODY_ANY_WEBPAGES_YOU_VIEW_WHILE_SECRET_MODE_IS_TURNED_ON_WONT_"
+                  "APPEAR_IN_YOUR_BROWSER_OR_SEARCH_MSG";
+        break;
+    case State::PASSWORD_DECISION:
+        message = "IDS_BR_BODY_ANY_WEBPAGES_YOU_VIEW_WHILE_SECRET_MODE_IS_TURNED_ON_WONT_"
+                  "APPEAR_IN_YOUR_BROWSER_OR_SEARCH_HISTORY_MSG";
+        break;
+    case State::NORMAL:
+        message = "IDS_BR_BODY_TAP_NEW_TAB_TO_OPEN_A_NEW_TAB_AND_START_EXPLORING_THE_INTERNET";
+        break;
+    default:
+        BROWSER_LOGW("[%s:%d] Illegal state", __PRETTY_FUNCTION__, __LINE__);
+        break;
+    }
+    elm_object_translatable_part_text_set(m_empty_layout, "elm.help.text", message.c_str());
+}
+
 void TabUI::createGengrid()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -192,24 +257,42 @@ void TabUI::createGengrid()
     m_gengrid = elm_gengrid_add(m_content);
     evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
     evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
-    elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
-    elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(720), ELM_SCALE_SIZE(0));
-    elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH),
-        ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
     elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
     elm_scroller_bounce_set(m_gengrid, EINA_FALSE, EINA_FALSE);
-    elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
+    elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_NONE);
     elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
-    elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
-    elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
+    elm_gengrid_highlight_mode_set(m_gengrid, EINA_FALSE);
+    elm_gengrid_align_set(m_gengrid, 0.5, 0);
+
     evas_object_smart_callback_add(m_gengrid, "pressed", _gengrid_tab_pressed, this);
     evas_object_smart_callback_add(m_gengrid, "released", _gengrid_tab_released, this);
     evas_object_smart_callback_add(m_gengrid, "realized", _gengrid_tab_realized, this);
+    evas_object_smart_callback_add(m_gengrid, "language,changed", _language_changed, this);
 
     elm_object_part_content_set(m_content, "elm.swallow.content", m_gengrid);
     evas_object_show(m_gengrid);
 }
 
+void TabUI::_language_changed(void* data, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    auto self = static_cast<TabUI*>(data);
+    self->createEmptyLayout();
+    elm_gengrid_clear(obj);
+    self->refetchTabUIData();
+    elm_genlist_realized_items_update(obj);
+}
+
+void TabUI::_decision_check_changed(void* data, Evas_Object* obj, void*)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    if (data && obj) {
+        auto self = static_cast<TabUI*>(data);
+        self->m_popup_decision = elm_check_state_get(obj) == EINA_TRUE;
+    } else
+        BROWSER_LOGW("[%s] data or obj = nullptr", __PRETTY_FUNCTION__);
+}
+
 void TabUI::_close_clicked(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -224,21 +307,27 @@ void TabUI::_close_clicked(void* data, Evas_Object*, void*)
 void TabUI::orientationChanged()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    boost::optional<bool> landscape = isLandscape();
+    auto landscape = isLandscape();
     if (landscape) {
         std::string state;
         if (*landscape) {
+            state = "switch_landscape";
+            elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
             elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
-            elm_object_signal_emit(m_content, "switch_landscape", "ui");
-            state = "state_landscape";
         } else {
+            state = "switch_vertical";
+            elm_scroller_page_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
             elm_gengrid_item_size_set(m_gengrid, ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH), ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
-            elm_object_signal_emit(m_content, "switch_vertical", "ui");
-            state = "state_default";
         }
+        elm_object_signal_emit(m_content, state.c_str(), "ui");
         Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
         while (it) {
-            elm_object_item_signal_emit(it, state.c_str(), "ui");
+            auto scroller = elm_object_item_part_content_get(it, "elm.swallow.icon");
+            auto box = elm_object_content_get(scroller);
+            auto obj = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+            auto empty = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 1));
+            elm_object_signal_emit(obj, state.c_str(), "ui");
+            elm_object_signal_emit(empty, state.c_str(), "ui");
             it = elm_gengrid_item_next_get(it);
         }
     } else {
@@ -285,7 +374,7 @@ void TabUI::_cm_close_clicked(void* data, Evas_Object*, void*)
         Elm_Object_Item* it = elm_gengrid_first_item_get(tabUI->m_gengrid);
         Elm_Object_Item* it_next;
         while (it) {
-            TabData *item = (TabData *)elm_object_item_data_get(it);
+            TabData *item = static_cast<TabData *>(elm_object_item_data_get(it));
             it_next = elm_gengrid_item_next_get(it);
             elm_object_item_del(it);
             tabUI->closeTabsClicked(item->item->getId());
@@ -314,6 +403,7 @@ Evas_Event_Flags TabUI::_gesture_occured(void * data, void * event_info)
     } else {
         BROWSER_LOGW("[%s] data or event_info = nullptr", __PRETTY_FUNCTION__);
     }
+
     return EVAS_EVENT_FLAG_NONE;
 }
 
@@ -382,7 +472,6 @@ void TabUI::_left_button_clicked(void* data, Evas_Object*, void*)
             self->showNoPasswordWarning();
             break;
         }
-
         self->setStateButtons();
     } else {
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -403,8 +492,13 @@ void TabUI::addTabItem(basic_webengine::TabContentPtr hi)
     TabData *itemData = new TabData();
     itemData->item = hi;
     itemData->tabUI = this;
-    Elm_Object_Item* tab = elm_gengrid_item_append(m_gengrid, m_item_class, itemData,
-        nullptr, nullptr);
+    Elm_Object_Item* tab =
+        elm_gengrid_item_append(
+            m_gengrid,
+            m_item_class,
+            itemData,
+            nullptr,
+            nullptr);
     // Check if item_object was created successfully
     if (tab)
         elm_gengrid_item_selected_set(tab, EINA_FALSE);
@@ -432,16 +526,16 @@ void TabUI::setStateButtons()
 {
         switch (m_state) {
         case State::NORMAL:
-            m_naviframe->setBottomButtonText(0, "Enable Secret");
-            m_naviframe->setBottomButtonText(1, "New tab");
+            m_naviframe->setBottomButtonText(0, "IDS_BR_OPT_ENABLE_SECRET_MODE_ABB");
+            m_naviframe->setBottomButtonText(1, "IDS_BR_BUTTON_NEW_TAB_ABB2");
             break;
         case State::SECRET:
-            m_naviframe->setBottomButtonText(0, "Disable Secret");
-            m_naviframe->setBottomButtonText(1, _("IDS_BR_BUTTON_NEW_TAB_ABB2"));
+            m_naviframe->setBottomButtonText(0, "IDS_BR_OPT_DISABLE_SECRET_MODE_ABB");
+            m_naviframe->setBottomButtonText(1, "IDS_BR_BUTTON_NEW_TAB_ABB2");
             break;
         case State::PASSWORD_DECISION:
-            m_naviframe->setBottomButtonText(0, "Do not use password");
-            m_naviframe->setBottomButtonText(1, "Create password");
+            m_naviframe->setBottomButtonText(0,  "IDS_BR_BUTTON_DO_NOT_USE_PASSWORD_ABB");
+            m_naviframe->setBottomButtonText(1, "IDS_BR_HEADER_CREATE_PASSWORD_M_SET_ABB");
             break;
         }
 }
@@ -459,57 +553,153 @@ char* TabUI::_gengrid_text_get(void *data, Evas_Object*, const char *part)
     return nullptr;
 }
 
+char* TabUI::_genlist_text_get(void* , Evas_Object* , const char* part)
+{
+    BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+    if (!strcmp(part, "elm.text.multiline")) {
+        //TODO: Missing translation
+        return strdup("The maximum number of tabs (20) has been reached."
+                      " To open a new tab, the oldest tab will be closed.");
+    }
+    return nullptr;
+}
+
+char* TabUI::_genlist_checkbox_text_get(void* , Evas_Object* , const char* part)
+{
+    BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+    if (!strcmp(part, "elm.text")) {
+        return strdup(_("IDS_BR_OPT_DO_NOT_SHOW_AGAIN"));
+    }
+    return nullptr;
+}
+
+Evas_Object* TabUI::createFavicon(TabData* data, Evas_Object* parent)
+{
+    auto favicon = data->item->getFavicon();
+    if (favicon) {
+        auto faviconEvas = favicon->getEvasImage(parent);
+        evas_object_size_hint_min_set(faviconEvas, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+        evas_object_size_hint_max_set(faviconEvas, ELM_SCALE_SIZE(40), ELM_SCALE_SIZE(40));
+        return faviconEvas;
+    } else {
+        auto layout = elm_layout_add(parent);
+        elm_layout_file_set(layout, data->tabUI->m_edjFilePath.c_str(), "favicon_image");
+        return layout;
+    }
+}
+
+Evas_Object* TabUI::createItem(TabData* itemData, Evas_Object* box)
+{
+    auto layout = elm_layout_add(box);
+    evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_layout_file_set(layout, m_edjFilePath.c_str(), "elm/layout/custom_tab_item/default");
+    evas_object_show(layout);
+
+    auto button = elm_button_add(box);
+    elm_object_style_set(button, "invisible_button");
+    evas_object_smart_callback_add(button, "clicked", _gengrid_tab_clicked, itemData);
+
+    auto favicon = createFavicon(itemData, box);
+
+    auto delete_button = elm_button_add(box);
+    elm_object_style_set(delete_button, "delete_button");
+    evas_object_smart_callback_add(delete_button, "clicked", _close_tab_clicked, itemData);
+
+    auto thumbnail = itemData->item->getThumbnail();
+    Evas_Object* thumb = nullptr;
+    if (thumbnail) {
+        thumb = thumbnail->getEvasImage(box);
+        evas_object_size_hint_min_set(thumb,
+            ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE - 10),
+            ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE - 75));
+        evas_object_size_hint_max_set(thumb,
+            ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH - 10),
+            ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT - 75));
+    }
+
+    elm_object_part_content_set(layout, "elm.icon", favicon);
+    elm_object_part_content_set(layout, "elm.overlay", button);
+    elm_object_part_content_set(layout, "elm.button", delete_button);
+    elm_object_part_content_set(layout, "elm.thumbnail", thumb);
+    elm_object_part_text_set(layout, "elm.text", itemData->item->getTitle().c_str());
+
+    return layout;
+}
+
+Evas_Object* TabUI::createContent(TabData* itemData, Evas_Object* obj)
+{
+    auto scroller = elm_scroller_add(obj);
+    elm_scroller_propagate_events_set(scroller, EINA_TRUE);
+    evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_scroller_page_scroll_limit_set(scroller, 2, 1);
+    elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+    if (*isLandscape()) {
+        elm_scroller_page_size_set(scroller,
+            ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH_LANDSCAPE),
+            ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT_LANDSCAPE));
+    } else {
+        elm_scroller_page_size_set(scroller,
+            ELM_SCALE_SIZE(GENGRID_ITEM_WIDTH),
+            ELM_SCALE_SIZE(GENGRID_ITEM_HEIGHT));
+    }
+    elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+    elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+    evas_object_smart_callback_add(scroller, "edge,right", _gengrid_swiped, itemData);
+
+    auto box = elm_box_add(scroller);
+    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_box_horizontal_set(box, EINA_TRUE);
+    elm_box_homogeneous_set(box, EINA_FALSE);
+
+    auto layout = createItem(itemData, box);
+
+    auto empty_layout = elm_layout_add(box);
+    evas_object_size_hint_weight_set(empty_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(empty_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    elm_layout_file_set(empty_layout, m_edjFilePath.c_str(), "elm/layout/empty/default");
+
+    elm_box_pack_end(box, layout);
+    elm_box_pack_end(box, empty_layout);
+
+    elm_object_content_set(scroller, box);
+    return scroller;
+}
+
 Evas_Object * TabUI::_gengrid_content_get(void *data, Evas_Object *obj, const char *part)
 {
     BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
     if (data && obj && part) {
         auto itemData = static_cast<TabData*>(data);
-        if (!strcmp(part, "elm.icon")) {
-            auto favicon = itemData->item->getFavicon();
-            if (favicon) {
-                auto faviconEvas = favicon->getEvasImage(obj);
-                evas_object_size_hint_min_set(faviconEvas,
-                    ELM_SCALE_SIZE(40),
-                    ELM_SCALE_SIZE(40));
-                evas_object_size_hint_max_set(faviconEvas,
-                    ELM_SCALE_SIZE(40),
-                    ELM_SCALE_SIZE(40));
-                return faviconEvas;
-            } else {
-                auto layout = elm_layout_add(obj);
-                elm_layout_file_set(layout, itemData->tabUI->m_edjFilePath.c_str(), "favicon_image");
-                return layout;
-            }
-        }
-        if (!strcmp(part, "elm.button")) {
-            auto button = elm_button_add(obj);
-            elm_object_style_set(button, "delete_button");
-            evas_object_smart_callback_add(button, "clicked", _close_tab_clicked, data);
-            return button;
-        }
-        if (!strcmp(part, "elm.thumbnail")) {
-            auto thumbnail = itemData->item->getThumbnail();
-            if (thumbnail)
-                return thumbnail->getEvasImage(obj);
-        }
-        if (!strcmp(part, "elm.overlay")) {
-            auto button = elm_button_add(obj);
-            elm_object_style_set(button, "invisible_button");
-            evas_object_smart_callback_add(button, "clicked", _gengrid_tab_clicked, data);
-
-            auto gesture = elm_gesture_layer_add(obj);
-            elm_gesture_layer_attach(gesture, button);
-            elm_gesture_layer_continues_enable_set(gesture, EINA_FALSE);
-            elm_gesture_layer_cb_add(gesture, ELM_GESTURE_N_LINES, ELM_GESTURE_STATE_MOVE,
-                _gesture_occured, data);
-            return button;
-        }
+        if (!strcmp(part, "elm.swallow.icon"))
+            return itemData->tabUI->createContent(itemData, obj);
     } else {
         BROWSER_LOGE("[%s:%d] Data or obj or part is null", __PRETTY_FUNCTION__, __LINE__);
     }
     return nullptr;
 }
 
+Evas_Object * TabUI::_genlist_content_get(void *data, Evas_Object *obj, const char *part)
+{
+    BROWSER_LOGD("[%s:%d] part=%s", __PRETTY_FUNCTION__, __LINE__, part);
+    if (data && obj && part) {
+        if (!strcmp(part, "elm.swallow.icon")) {
+            TabUI *self = static_cast<TabUI*>(data);
+            auto checkbox = elm_check_add(obj);
+            evas_object_smart_callback_add(checkbox, "changed", self->_decision_check_changed, self);
+            elm_check_state_set(checkbox, EINA_TRUE);
+            evas_object_show(checkbox);
+            return checkbox;
+        }
+    } else {
+        BROWSER_LOGE("[%s:%d] Obj or part is null", __PRETTY_FUNCTION__, __LINE__);
+    }
+    return nullptr;
+}
+
+
 void TabUI::_gengrid_tab_pressed(void *data, Evas_Object *, void *event_info)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -517,9 +707,12 @@ void TabUI::_gengrid_tab_pressed(void *data, Evas_Object *, void *event_info)
         auto object_item = static_cast<Elm_Object_Item*>(event_info);
         auto tabUI = static_cast<TabUI*>(data);
         tabUI->m_last_pressed_gengrid_item = object_item;
-        elm_object_signal_emit(
-            elm_object_item_part_content_get(object_item, "elm.icon"),
-            "on_mouse_down", "ui");
+        auto scroller = elm_object_item_part_content_get(object_item, "elm.swallow.icon");
+        auto box = elm_object_content_get(scroller);
+        auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+        auto icon = elm_object_part_content_get(layout, "elm.icon");
+        elm_object_signal_emit(layout, "elm,state,selected", "elm");
+        elm_object_signal_emit(icon, "on_mouse_down", "ui");
     } else {
         BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
     }
@@ -530,9 +723,12 @@ void TabUI::_gengrid_tab_released(void *, Evas_Object *, void *event_info)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (event_info) {
         auto object_item = static_cast<Elm_Object_Item*>(event_info);
-        elm_object_signal_emit(
-            elm_object_item_part_content_get(object_item, "elm.icon"),
-            "on_mouse_up", "ui");
+        auto scroller = elm_object_item_part_content_get(object_item, "elm.swallow.icon");
+        auto box = elm_object_content_get(scroller);
+        auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+        auto icon = elm_object_part_content_get(layout, "elm.icon");
+        elm_object_signal_emit(layout, "elm,state,unselected", "elm");
+        elm_object_signal_emit(icon, "on_mouse_up", "ui");
     } else {
         BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
     }
@@ -549,20 +745,36 @@ void TabUI::_gengrid_tab_clicked(void *data, Evas_Object*, void*)
     }
 }
 
+void TabUI::_gengrid_swiped(void* data, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (data) {
+        auto tabData = static_cast<TabData*>(data);
+        tabData->tabUI->_close_tab_clicked(data, nullptr, nullptr);
+        tabData->tabUI->orientationChanged();
+    }
+}
 void TabUI::_gengrid_tab_realized(void *, Evas_Object *, void *event_info)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (event_info) {
         auto tabItem = static_cast<Elm_Object_Item*>(event_info);
         auto tabData = static_cast<TabData*>(elm_object_item_data_get(tabItem));
-        auto favicon = elm_object_item_part_content_get(tabItem, "elm.icon");
+
+        auto scroller = elm_object_item_part_content_get(tabItem, "elm.swallow.icon");
+        auto box = elm_object_content_get(scroller);
+        auto layout = static_cast<Evas_Object*>(eina_list_nth(elm_box_children_get(box), 0));
+        auto icon = elm_object_part_content_get(layout, "elm.icon");
+
         if (tabData->item->getIsSecret()) {
-            elm_object_item_signal_emit(tabItem, "state_secret", "ui");
-            elm_object_signal_emit(favicon, "state_secret", "ui");
+            elm_object_signal_emit(layout, "state_secret", "ui");
+            elm_object_signal_emit(icon, "state_secret", "ui");
         } else {
-            elm_object_item_signal_emit(tabItem, "state_normal", "ui");
-            elm_object_signal_emit(favicon, "state_normal", "ui");
+            elm_object_signal_emit(layout, "state_normal", "ui");
+            elm_object_signal_emit(icon, "state_normal", "ui");
         }
+        tabData->tabUI->orientationChanged();
     } else {
         BROWSER_LOGW("[%s] event_info = nullptr", __PRETTY_FUNCTION__);
     }
@@ -610,6 +822,7 @@ void TabUI::updateNoTabsText(bool forceShow)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (forceShow || elm_gengrid_items_count(m_gengrid) == 0) {
+        changeEmptyLayoutText();
         evas_object_show(m_empty_layout);
         elm_object_signal_emit(m_content, "show_overlay", "ui");
     } else {
index 987ecbf..343d1e1 100755 (executable)
@@ -43,11 +43,16 @@ class BROWSER_EXPORT TabUI
 public:
     TabUI();
     ~TabUI();
+    TabUI(const TabUI&) = delete;
+    TabUI& operator=(const TabUI&) = delete;
+
     //AbstractUIComponent interface implementation
     void showUI();
     void hideUI();
     void init(Evas_Object *parent);
     Evas_Object* getContent();
+    Evas_Object* getPopupContent(Evas_Object *parent);
+    bool getPopupDecision() const { return m_popup_decision; };
 
     virtual std::string getName();
 
@@ -87,13 +92,19 @@ private:
     };
 
     static char* _gengrid_text_get(void *data, Evas_Object *obj, const char *part);
+    static char* _genlist_text_get(void *data, Evas_Object *obj, const char *part);
+    static char* _genlist_checkbox_text_get(void *data, Evas_Object *obj, const char *part);
     static Evas_Object * _gengrid_content_get(void *data, Evas_Object *obj, const char *part);
+    static Evas_Object * _genlist_content_get(void *data, Evas_Object *obj, const char *part);
 
     static void _gengrid_tab_pressed(void * data, Evas_Object * obj, void * event_info);
     static void _gengrid_tab_released(void * data, Evas_Object * obj, void * event_info);
     static void _gengrid_tab_clicked(void * data, Evas_Object * obj, void * event_info);
     static void _gengrid_tab_realized(void * data, Evas_Object * obj, void * event_info);
+    static void _gengrid_swiped(void *, Evas_Object *, void *event_info);
     static void _close_clicked(void *data, Evas_Object *obj, void *event_info);
+    static void _language_changed(void *, Evas_Object*obj , void*);
+    static void _decision_check_changed(void *data, Evas_Object *obj, void *event_info);
     void updateNoTabsText(bool forceShow=false);
 
     static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info);
@@ -105,10 +116,14 @@ private:
     static Evas_Event_Flags _gesture_occured(void * data, void * event_info);
 
     SharedNaviframeWrapper m_naviframe;
+    Evas_Object* createFavicon(TabData* data, Evas_Object* parent);
+    Evas_Object* createContent(TabData* data, Evas_Object* obj);
+    Evas_Object* createItem(TabData* data, Evas_Object* obj);
     void createTabUILayout();
     void createTopContent();
     void createBottomContent();
     void createEmptyLayout();
+    void changeEmptyLayoutText();
     void createGengrid();
     void createTabItemClass();
     void addTabItem(basic_webengine::TabContentPtr);
@@ -119,10 +134,15 @@ private:
     Evas_Object *m_gengrid;
     Evas_Object *m_empty_layout;
 
+    Evas_Object *m_popup_genlist;
+    bool m_popup_decision;
+
     Elm_Object_Item* m_itemToShow;
     Elm_Object_Item* m_last_pressed_gengrid_item;
 
     Elm_Gengrid_Item_Class * m_item_class;
+    Elm_Genlist_Item_Class * m_popup_text_item_class;
+    Elm_Genlist_Item_Class * m_popup_checkbox_item_class;
     std::string m_edjFilePath;
 
     State m_state;
index 21f3771..b15a3ea 100755 (executable)
 #include "../../../core/Tools/edc/InvisibleButton.edc"
 #include "../../../core/Tools/edc/ColorClasses.edc"
-#define ON_OTHER_DEVICE 0
 
-collections { base_scale: 2.6;
+collections {
+   base_scale: 2.6;
 
-    group { name: "bottom_bar_with_margins";
-        parts {
-            rect { "top_left_content_spacer"; scale;
-                description { "default";
-                    min: 32 0;
-                    max: 32 0;
-                    align: 0 0;
-                    fixed: 1 1;
-                    visible: 0;
-                }
-            }
-            rect { "bottom_right_content_spacer"; scale;
-                description { "default";
-                    min: 32 0;
-                    max: 32 0;
-                    align: 1 1;
-                    fixed: 1 1;
-                    visible: 0;
-                }
-            }
-            swallow { "elm.swallow.content"; scale;
-                description { "default";
-                    rel1 {
-                        relative: 1 1;
-                        to: "top_left_content_spacer";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "bottom_right_content_spacer";
-                    }
-                }
-            }
-        }
-    }
+   styles {
+      style {
+         name: "selected_text";
+         base: "font=Tizen:style=Regular font_size=36 color=#ffffff color_class=ATO015 text_class=ATO015 ellipsis=1.0";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "b" "+ font_weight=Bold";
+      }
+      style {
+         name: "normal_text";
+         base: "font=Tizen:style=Regular font_size=36 color=#000000 color_class=ATO016 text_class=ATO016 ellipsis=1.0";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "b" "+ font_weight=Bold";
+      }
+   }
 
-    group { name: "naviframe_content";
-        parts {
-            rect { "content_top_left_spacer"; scale;
-                description { "default";
-                    min: 10 0;
-                    max: 10 0;
-                    fixed: 1 1;
-                    align: 0.0 0.0;
-                }
-                description { "landscape";
-                    inherit: "default";
-                    min: 0 0;
-                    max: 0 0;
-                }
-            }
-            rect { "content_bottom_right_spacer"; scale;
-                description { "default";
-                    min: 10 0;
-                    max: 10 0;
-                    fixed: 1 1;
-                    align: 1 1;
-                }
-                description { "landscape";
-                    inherit: "default";
-                    min: 0 0;
-                    max: 0 0;
-                }
-            }
-            swallow { "elm.swallow.content"; scale;
-                mouse_events: 1;
-                description { "default";
-                    align: 0.0 0.0;
-                    min: 0 0;
-                    max: -1 -1;
-                    fixed: 0 0;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "content_top_left_spacer";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "content_bottom_right_spacer";
-                    }
-                }
-            }
-            swallow { "elm.swallow.content_overlay"; scale;
-                multiline: 1;
-                description { "default";
-                    visible: 0;
-                }
-                description { "visible";
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "show_overlay";
-                signal: "show_overlay";
-                source: "ui";
-                action: STATE_SET "visible" 0.0;
-                target: "elm.swallow.content_overlay";
-            }
-            program {
-                name: "hide_overlay";
-                signal: "hide_overlay";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "elm.swallow.content_overlay";
-            }
-            program {
-                name: "switch_landscape";
-                signal: "switch_landscape";
-                source: "ui";
-                action: STATE_SET "landscape" 0.0;
-                target: "content_top_left_spacer";
-                target: "content_bottom_right_spacer";
-            }
-            program {
-                name: "switch_vertical";
-                signal: "switch_vertical";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "content_top_left_spacer";
-                target: "content_bottom_right_spacer";
-            }
-        }
-    }
+   group { "bottom_bar_with_margins";
+      parts {
+         spacer { "top_left_content_spacer"; scale;
+            description { "default";
+               min: 32 0;
+               max: 32 0;
+               align: 0 0;
+               fixed: 1 1;
+            }
+         }
+         spacer { "bottom_right_content_spacer"; scale;
+            description { "default";
+               min: 32 0;
+               max: 32 0;
+               align: 1 1;
+               fixed: 1 1;
+            }
+         }
+         swallow { "elm.swallow.content"; scale;
+            description { "default";
+               rel1 {
+                  relative: 1 1;
+                  to: "top_left_content_spacer";
+               }
+               rel2 {
+                  relative: 0 0;
+                  to: "bottom_right_content_spacer";
+               }
+            }
+         }
+      }
+   }
 
-    group { name: "elm/button/base/delete_button";
-        images {
-            image: "btn_delete_nor.png" COMP;
-            image: "btn_delete_press.png" COMP;
-        }
-        parts {
-            part { name: "elm.image";
-                type: IMAGE;
-                scale: 1;
-                mouse_events: 0;
-                description { state: "default" 0.0;
-                    align: 0.5 0.5;
-                    visible: 1;
-                    min: 60 60;
-                    max: 60 60;
-                    fixed: 1 1;
-                    image.normal: "btn_delete_nor.png";
-                }
-                description { state: "pressed" 0.0;
-                    inherit: "default" 0.0;
-                    image.normal: "btn_delete_press.png";
-                }
-            }
-            rect { "over"; scale;
-                description { "default";
-                    rel1.to: "elm.image";
-                    rel2.to: "elm.image";
-                    color: 0 0 0 0;
-                }
-            }
-        }
-        programs {
-            program { name: "on_mouse_down";
-                signal: "mouse,down,1";
-                source: "over";
-                script {
-                    set_state(PART:"elm.image", "pressed", 0.0);
-                    emit("elm,action,press", "");
-                }
-             }
-            program {  name: "on_mouse_up";
-                signal: "mouse,up,1";
-                source: "over";
-                script {
-                   set_state(PART:"elm.image", "default", 0.0);
-                   emit("elm,action,unpress", "");
-                }
-            }
-            program { name: "on_mouse_click";
-                signal: "mouse,clicked,1";
-                source: "over";
-                script {
-                    emit("elm,action,click", "");
-                }
-            }
-        }
-    }
+   group { "naviframe_content";
+      parts {
+         spacer { "bg"; scale;
+         }
+         spacer { "content_top_left_spacer"; scale;
+            description { "default";
+               min: 10 0;
+               max: 10 0;
+               fixed: 1 1;
+               align: 0 0;
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default";
+               min: 5 0;
+               max: 5 0;
+            }
+         }
+         spacer { "content_bottom_right_spacer"; scale;
+            description { "default";
+               min: 10 0;
+               max: 10 0;
+               fixed: 1 1;
+               align: 1 1;
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default";
+               min: 5 0;
+               max: 5 0;
+            }
+         }
+         swallow { "elm.swallow.content"; scale;
+            mouse_events: 1;
+            description { "default";
+               align: 0 0;
+               min: 0 0;
+               max: -1 -1;
+               fixed: 0 0;
+               rel1 {
+                  relative: 1 1;
+                  to: "content_top_left_spacer";
+               }
+               rel2 {
+                  relative: 0 0;
+                  to: "content_bottom_right_spacer";
+               }
+            }
+         }
+         swallow { "elm.swallow.content_overlay"; scale;
+            description { "default";
+               align: 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default";
+               visible: 1;
+            }
+         }
+      }
+      programs {
+         program { "show_overlay";
+            signal: "show_overlay";
+            source: "ui";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.swallow.content_overlay";
+         }
+         program { "hide_overlay";
+            signal: "hide_overlay";
+            source: "ui";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content_overlay";
+         }
+         program { "switch_landscape";
+            signal: "switch_landscape";
+            source: "ui";
+            action: STATE_SET "landscape" 0.0;
+            target: "content_top_left_spacer";
+            target: "content_bottom_right_spacer";
+         }
+         program { "switch_vertical";
+            signal: "switch_vertical";
+            source: "ui";
+            action: STATE_SET "default" 0.0;
+            target: "content_top_left_spacer";
+            target: "content_bottom_right_spacer";
+         }
+      }
+   }
 
-    group { name: "favicon_image";
-        images.image: "internet_tabs_ic_default.png" COMP;
-        script {
-            public secret_mode = 0;
-        }
-        parts {
-            part { name: "image";
-                type: IMAGE;
-                description { state: "default" 0.0;
-                    fixed: 1 1;
-                    align: 0.5 0.5;
-                    min: 40 40;
-                    max: 40 40;
-                    visible: 1;
-                    image.normal: "internet_tabs_ic_default.png";
-                    color_class: "AO034";
-                }
-                description { state: "selected" 0.0;
-                    inherit: "default";
-                    color_class: "AO035";
-                }
-            }
-        }
-        programs {
-            program { name: "on_mouse_down";
-                signal: "on_mouse_down";
-                source: "ui";
-                action: STATE_SET "selected" 0.0;
-                target: "image";
-            }
-            program { name: "on_mouse_up";
-                signal: "on_mouse_up";
-                source: "ui";
-                script {
-                    if (get_int(secret_mode))
-                        set_state(PART:"image", "selected", 0.0);
-                    else
-                        set_state(PART:"image", "default", 0.0);
-                }
-            }
-            program { name: "state_secret";
-                signal: "state_secret";
-                source: "ui";
-                script {
-                    set_int(secret_mode, 1);
-                    set_state(PART:"image", "selected", 0.0);
-                }
-            }
-            program { name: "state_normal";
-                signal: "state_normal";
-                source: "ui";
-                script {
-                    set_int(secret_mode, 0);
-                    set_state(PART:"image", "default", 0.0);
-                }
-            }
-        }
-    }
+   group { "elm/button/base/delete_button";
+      images {
+         image: "btn_delete_nor.png" COMP;
+         image: "btn_delete_press.png" COMP;
+      }
+      parts {
+         image { "elm.image"; scale;
+            mouse_events: 0;
+            description { "default";
+               align: 0.5 0.5;
+               visible: 1;
+               min: 60 60;
+               max: 60 60;
+               fixed: 1 1;
+               image.normal: "btn_delete_nor.png";
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               image.normal: "btn_delete_press.png";
+            }
+         }
+         rect { "over"; scale;
+            description { "default";
+               rel1.to: "elm.image";
+               rel2.to: "elm.image";
+               color: 0 0 0 0;
+            }
+         }
+      }
+      programs {
+         program { "on_mouse_down";
+            signal: "mouse,down,1";
+            source: "over";
+            script {
+               set_state(PART:"elm.image", "pressed", 0.0);
+               emit("elm,action,press", "");
+            }
+         }
+         program { "on_mouse_up";
+            signal: "mouse,up,1";
+            source: "over";
+            script {
+               set_state(PART:"elm.image", "default", 0.0);
+               emit("elm,action,unpress", "");
+            }
+         }
+         program { "on_mouse_click";
+            signal: "mouse,clicked,1";
+            source: "over";
+            script {
+               emit("elm,action,click", "");
+            }
+         }
+      }
+   }
 
-    group { name: "elm/gengrid/item/custom_tab_item/default";
-        styles {
-           style { name: "selected_text";
-              base: "font=Tizen:style=Regular font_size=36 color=#ffffff color_class=ATO015 text_class=ATO015 ellipsis=1.0";
-              tag:  "br" "\n";
-              tag:  "ps" "ps";
-              tag:  "tab" "\t";
-              tag:  "b" "+ font_weight=Bold";
-           }
-           style { name: "normal_text";
-              base: "font=Tizen:style=Regular font_size=36 color=#000000 color_class=ATO016 text_class=ATO016 ellipsis=1.0";
-              tag:  "br" "\n";
-              tag:  "ps" "ps";
-              tag:  "tab" "\t";
-              tag:  "b" "+ font_weight=Bold";
-           }
-        }
-        images.image: "internet_tabs_bg.#.png" COMP;
-        images.image: "internet_tabs_bg_ef.#.png" COMP;
-        images.image: "internet_tabs_bg_press.#.png" COMP;
-        images.image: "internet_tabs_img_mask.#.png" COMP;
-        data.item: "texts" "elm.text";
-        data.item: "contents" "elm.icon elm.button elm.thumbnail elm.overlay";
-        script {
-            public secret_mode = 0;
-        }
-        parts {
-            rect { "top_left_spacer"; scale;
-                description { "default";
-                    min: 11 0;
-                    max: 11 0;
-                    fixed: 1 1;
-                    align: 0 0;
-                    visible: 0;
-                }
-                description { "landscape";
-                    inherit: "default";
-                    min: 6 10;
-                    max: 6 10;
-                }
-            }
-            rect { "bottom_right_spacer"; scale;
-                description { "default";
-                    min: 11 21;
-                    max: 11 21;
-                    fixed: 1 1;
-                    align: 1 1;
-                    visible: 0;
-                }
-                description { "landscape";
-                    inherit: "default";
-                    min: 6 0;
-                    max: 6 0;
-                }
-            }
-            part { name: "bg";
-                scale: 1;
-                type: IMAGE;
-                description { state: "default" 0.0;
-                    rel1 {
-                        to: "top_left_spacer";
-                        relative: 1 1;
-                    }
-                    rel2 {
-                        to: "bottom_right_spacer";
-                        relative: 0 0;
-                    }
-                    image.normal: "internet_tabs_bg.#.png";
-                    color_class: "AO025";
-                }
-            }
-            rect { "top_bg"; scale;
-                description { "default";
-                    align: 0.5 0;
-                    min: 0 68;
-                    max: -1 68;
-                    fixed: 0 1;
-                    rel1 {
-                        to: "top_left_spacer";
-                        relative: 1 1;
-                    }
-                    rel2 {
-                        to: "bottom_right_spacer";
-                        relative: 0 0;
-                    }
-                    color_class: "AO026";
-                }
-                description { "secret_default";
-                    inherit: "default";
-                    color_class: "tabs_secret_bg";
-                }
-                description { "selected";
-                    inherit: "default";
-                    color_class: "AO027";
-                }
-                description { "secret_selected";
-                    inherit: "default";
-                    color_class: "AO028";
-                }
-            }
-            rect { "icon_spacer"; scale;
-                description { "default";
-                    min: 18 0;
-                    max: 18 0;
-                    align: 0 0;
-                    fixed: 1 1;
-                    visible: 0;
-                    rel1.to: "top_bg";
-                }
-            }
-            swallow { "elm.icon"; scale;
-                description { "default";
-                    min: 40 40;
-                    max: 40 40;
-                    align: 0.0 0.5;
-                    fixed: 1 1;
-                    rel1 {
-                        relative: 1.0 1.0;
-                        to: "icon_spacer";
-                    }
-                    rel2.to: "top_bg";
-                }
-            }
-            rect { "text_spacer_1"; scale;
-                description { "defalt";
-                    min: 70 8;
-                    max: 70 8;
-                    fixed: 1 1;
-                    align: 0 0;
-                    visible: 0;
-                    rel1.to: "top_bg";
-                }
-            }
-            rect { "text_spacer_2"; scale;
-                description { "defalt";
-                    min: 78 12;
-                    max: 78 12;
-                    fixed: 1 1;
-                    align: 1 1;
-                    visible: 0;
-                    rel2.to: "top_bg";
-                }
-            }
-            part { name: "elm.text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description { state: "default" 0.0;
-                    min: 0 48;
-                    align: 0.0 0.0;
-                    rel1 {
-                        relative: 1 1;
-                        to: "text_spacer_1";
-                    }
-                    rel2 {
-                        relative: 0 0;
-                        to: "text_spacer_2";
-                    }
-                    text.style: "normal_text";
-                    text.min: 0 1;
-                    text.align: 0 0.5;
-                }
-                description { state: "selected" 0.0;
-                    inherit: "default";
-                    text.style: "selected_text";
-                }
-            }
-            rect { "button_spacer"; scale;
-                description { "default";
-                    min: 6 0;
-                    max: 6 0;
-                    align: 1 1;
-                    visible: 0;
-                    rel2.to: "top_bg";
-                }
-            }
-            rect { "top_left_thumbnail_spacer"; scale;
-                description { "default";
-                    min: 5 1;
-                    max: 5 1;
-                    fixed: 1 1;
-                    align: 0 0;
-                    visible: 0;
-                    rel1 {
-                        to: "top_bg";
-                        relative: 0 1;
-                    }
-                }
-            }
-            rect { "bottom_right_thumbnail_spacer"; scale;
-                description { "default";
-                    min: 5 6;
-                    max: 5 6;
-                    fixed: 1 1;
-                    align: 1 1;
-                    visible: 0;
-                    rel2.to: "bg";
-                }
-            }
-            part { name: "image_mask";
-                type: IMAGE;
-                scale: 1;
-                description { state: "default" 0.0;
-                    align: 0.5 0.0;
-                    rel1.to: "bg";
-                    rel2.to: "bg";
-                    visible: 1;
-                    image.normal: "internet_tabs_img_mask.#.png";
-                }
-                description { state: "secret" 0.0;
-                    inherit: "default";
-                    color_class: "AO033";
-                }
-            }
-            swallow { "elm.thumbnail"; scale;
-                description { "default";
-                    rel1 {
-                        relative: 1 1;
-                        to: "top_left_thumbnail_spacer";
-                    }
-                    rel2 {
-                        to: "bottom_right_thumbnail_spacer";
-                        relative: 0 0;
-                    }
-                }
-            }
-            part { name: "bg_effect";
-                scale: 1;
-                type: IMAGE;
-                description { state: "default" 0.0;
-                    rel1.to: "bg";
-                    rel2.to: "bg";
-                    image.normal: "internet_tabs_bg_ef.#.png";
-                }
-            }
-            part { name: "press_effect";
-                scale: 1;
-                type: IMAGE;
-                description { state: "default" 0.0;
-                    visible: 0;
-                    align: 0.5 0.0;
-                    rel1.to: "bg";
-                    rel2.to: "bg";
-                    image.normal: "internet_tabs_bg_press.#.png";
-                    color_class: "AO025P";
-                }
-                description { state: "selected"; 0.0;
-                    inherit: "default";
-                    visible: 1;
-                }
-            }
-            swallow { "elm.overlay"; scale;
-                mouse_events: 1;
-                description { "default";
-                }
-            }
-            swallow { "elm.button"; scale;
-                mouse_events: 1;
-                repeat_events: 0;
-                description { "default";
-                    min: 60 60;
-                    max: 60 60;
-                    align: 1 0.5;
-                    rel1.to: "top_bg";
-                    rel2.to: "button_spacer";
-                }
-            }
-        }
-        programs {
-            program { name: "state_landscape";
-                signal: "state_landscape";
-                source: "ui";
-                action: STATE_SET "landscape" 0.0;
-                target: "top_left_spacer";
-                target: "bottom_right_spacer";
-            }
-            program { name: "state_default";
-                signal: "state_default";
-                source: "ui";
-                action: STATE_SET "default" 0.0;
-                target: "top_left_spacer";
-                target: "bottom_right_spacer";
-            }
-            program { name: "selected";
-                signal: "elm,state,selected";
-                source: "elm";
-                script {
-                    if (get_int(secret_mode))
-                        set_state(PART:"top_bg", "secret_selected", 0.0);
-                    else
-                        set_state(PART:"top_bg", "selected", 0.0);
-                    set_state(PART:"elm.text", "selected", 0.0);
-                }
-            }
-            program { name: "unselected";
-                signal: "elm,state,unselected";
-                source: "elm";
-                script {
-                    if (get_int(secret_mode)) {
-                        set_state(PART:"elm.text", "selected", 0.0);
-                        set_state(PART:"top_bg", "secret_default", 0.0);
-                    } else {
-                        set_state(PART:"elm.text", "default", 0.0);
-                        set_state(PART:"top_bg", "default", 0.0);
-                    }
-                }
-            }
-            program { name: "state_secret";
-                signal: "state_secret";
-                source: "ui";
-                script {
-                    set_int(secret_mode, 1);
-                    set_state(PART:"elm.text", "selected", 0.0);
-                    set_state(PART:"top_bg", "secret_default", 0.0);
-                    set_state(PART:"image_mask", "secret", 0.0);
-                }
-            }
-            program { name: "state_normal";
-                signal: "state_normal";
-                source: "ui";
-                script {
-                    set_int(secret_mode, 0);
-                    set_state(PART:"elm.text", "default", 0.0);
-                    set_state(PART:"top_bg", "default", 0.0);
-                    set_state(PART:"image_mask", "default", 0.0);
-                }
-            }
-        }
-    }
+   group { "favicon_image";
+      images.image: "internet_tabs_ic_default.png" COMP;
+      script {
+         public secret_mode = 0;
+      }
+      parts {
+         image { "image";  scale;
+            description { "default";
+               fixed: 1 1;
+               align: 0.5 0.5;
+               min: 40 40;
+               max: 40 40;
+               visible: 1;
+               image.normal: "internet_tabs_ic_default.png";
+               color_class: "AO034";
+            }
+            description { state: "selected" 0.0;
+               inherit: "default";
+               color_class: "AO035";
+            }
+         }
+      }
+      programs {
+         program { "on_mouse_down";
+            signal: "on_mouse_down";
+            source: "ui";
+            action: STATE_SET "selected" 0.0;
+            target: "image";
+         }
+         program { "on_mouse_up";
+            signal: "on_mouse_up";
+            source: "ui";
+            script {
+               if (get_int(secret_mode))
+               set_state(PART:"image", "selected", 0.0);
+               else
+               set_state(PART:"image", "default", 0.0);
+            }
+         }
+         program { "state_secret";
+            signal: "state_secret";
+            source: "ui";
+            script {
+               set_int(secret_mode, 1);
+               set_state(PART:"image", "selected", 0.0);
+            }
+         }
+         program { "state_normal";
+            signal: "state_normal";
+            source: "ui";
+            script {
+               set_int(secret_mode, 0);
+               set_state(PART:"image", "default", 0.0);
+            }
+         }
+      }
+   }
+   group { "elm/gengrid/item/empty/default";
+      alias: "elm/layout/empty/default";
+      parts {
+         rect { "bg"; scale;
+            description { "default";
+               align: 0 0;
+               min: 700 312;
+               max: 700 312;
+               fixed: 0 1;
+               rel1.relative: 0 0;
+               rel2.relative: 1 1;
+               color: 0 0 0 0;
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default";
+               min: 636 274;
+               max: 636 274;
+            }
+         }
+      }
+      programs {
+         program { "switch_landscape";
+            signal: "switch_landscape";
+            source: "ui";
+            action: STATE_SET "landscape" 0.0;
+            target: "bg";
+         }
+         program { "switch_vertical";
+            signal: "switch_vertical";
+            source: "ui";
+            action: STATE_SET "default" 0.0;
+            target: "bg";
+         }
+      }
+   }
+
+   group { "elm/gengrid/item/custom_tab_item/default";
+      alias: "elm/layout/custom_tab_item/default";
+
+      images.image: "internet_tabs_bg.#.png" COMP;
+      images.image: "internet_tabs_bg_ef.#.png" COMP;
+      images.image: "internet_tabs_bg_press.#.png" COMP;
+      images.image: "internet_tabs_img_mask.#.png" COMP;
+
+      data.item: "texts" "elm.text";
+      data.item: "contents" "elm.icon elm.button elm.thumbnail elm.overlay";
+      script {
+         public secret_mode = 0;
+      }
+      parts {
+         image { "bg"; scale;
+            description { "default";
+               align: 0 0;
+               min: 700 312;
+               max: 700 312;
+               fixed: 0 1;
+               image.normal: "internet_tabs_bg.#.png";
+               color_class: "AO025";
+               rel1.relative: 0 0;
+               rel2.relative: 1 1;
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default";
+               min: 636 274;
+               max: 636 274;
+            }
+         }
+         rect { "top_bg"; scale;
+            description { "default";
+               align: 0 0;
+               min: 0 68;
+               max: -1 68;
+               fixed: 0 1;
+               color_class: "AO026";
+               rel1.to: "bg";
+               rel1.relative: 0 0;
+               rel2.to: "bg";
+               rel2.relative: 1 1;
+            }
+            description { state: "secret_default";
+               inherit: "default";
+               color_class: "tabs_secret_bg";
+            }
+            description { state: "selected";
+               inherit: "default";
+               color_class: "AO027";
+            }
+            description { state: "secret_selected";
+               inherit: "default";
+               color_class: "AO028";
+            }
+         }
+         spacer { "icon_spacer"; scale;
+            description { "default";
+               min: 18 0;
+               max: 18 0;
+               align: 0 0;
+               fixed: 1 1;
+               rel1.to: "top_bg";
+            }
+         }
+         swallow { "elm.icon"; scale;
+            description { "default";
+               min: 40 40;
+               max: 40 40;
+               align: 0.0 0.5;
+               fixed: 1 1;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "icon_spacer";
+               }
+               rel2.to: "top_bg";
+            }
+         }
+         spacer { "text_spacer_1"; scale;
+            description { "default";
+               min: 70 8;
+               max: 70 8;
+               fixed: 1 1;
+               align: 0 0;
+               rel1.to: "top_bg";
+            }
+         }
+         spacer { "text_spacer_2"; scale;
+            description { "default";
+               min: 78 12;
+               max: 78 12;
+               fixed: 1 1;
+               align: 1 1;
+               rel2.to: "top_bg";
+            }
+         }
+         textblock { "elm.text"; scale;
+            description { "default";
+               min: 0 48;
+               max: -1 48;
+               fixed: 0 1;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1 1;
+                  to: "text_spacer_1";
+               }
+               rel2 {
+                  relative: 0 0;
+                  to: "text_spacer_2";
+               }
+               text.style: "normal_text";
+               text.min: 0 1;
+               text.align: 0 0.5;
+            }
+            description { state: "selected" 0.0;
+               inherit: "default";
+               text.style: "selected_text";
+            }
+         }
+         spacer { "button_spacer"; scale;
+            description { "default";
+               min: 6 0;
+               max: 6 0;
+               fixed: 1 1;
+               align: 1 1;
+               rel2.to: "top_bg";
+            }
+         }
+         spacer { "top_left_thumbnail_spacer"; scale;
+            description { "default";
+               min: 5 1;
+               max: 5 1;
+               fixed: 1 1;
+               align: 0 0;
+               rel1 {
+                  to: "top_bg";
+                  relative: 0 1;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1 1;
+               }
+            }
+         }
+         spacer { "bottom_right_thumbnail_spacer"; scale;
+            description { "default";
+               min: 5 6;
+               max: 5 6;
+               fixed: 1 1;
+               align: 1 1;
+               rel1 {
+                  to: "bg";
+                  relative: 0 0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1 1;
+               }
+            }
+         }
+         image { "image_mask"; scale;
+            description { "default";
+               align: 0 0;
+               visible: 1;
+               image.normal: "internet_tabs_img_mask.#.png";
+               rel1 {
+                  to: "bg";
+                  relative: 0 0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1 1;
+               }
+            }
+            description { state: "secret" 0.0;
+               inherit: "default";
+               color_class: "AO033";
+            }
+         }
+         swallow { "elm.thumbnail"; scale;
+            description { "default";
+               align: 0 0;
+               rel1 {
+                  relative: 1 1;
+                  to: "top_left_thumbnail_spacer";
+               }
+               rel2 {
+                  to: "bottom_right_thumbnail_spacer";
+                  relative: 0 0;
+               }
+            }
+         }
+         image { "bg_effect"; scale;
+            description { "default";
+               align: 0 0;
+               rel1 {
+                  to: "bg";
+                  relative: 0 0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1 1;
+               }
+               image.normal: "internet_tabs_bg_ef.#.png";
+            }
+         }
+         swallow { "elm.overlay"; scale;
+            mouse_events: 1;
+            description { "default";
+               align: 0 0;
+               rel1 {
+                  to: "bg";
+                  relative: 0 0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1 1;
+               }
+            }
+         }
+         swallow { "elm.button"; scale;
+            mouse_events: 1;
+            repeat_events: 0;
+            description { "default";
+               min: 60 60;
+               max: 60 60;
+               align: 1 0.5;
+               rel1.to: "top_bg";
+               rel2.to: "button_spacer";
+            }
+         }
+      }
+      programs {
+         program { "selected";
+            signal: "elm,state,selected";
+            source: "elm";
+            script {
+               if (get_int(secret_mode))
+               set_state(PART:"top_bg", "secret_selected", 0.0);
+               else
+               set_state(PART:"top_bg", "selected", 0.0);
+               set_state(PART:"elm.text", "selected", 0.0);
+            }
+         }
+         program { "unselected";
+            signal: "elm,state,unselected";
+            source: "elm";
+            script {
+               if (get_int(secret_mode)) {
+                  set_state(PART:"elm.text", "selected", 0.0);
+                  set_state(PART:"top_bg", "secret_default", 0.0);
+               } else {
+                  set_state(PART:"elm.text", "default", 0.0);
+                  set_state(PART:"top_bg", "default", 0.0);
+               }
+            }
+         }
+         program { "state_secret";
+            signal: "state_secret";
+            source: "ui";
+            script {
+               set_int(secret_mode, 1);
+               set_state(PART:"elm.text", "selected", 0.0);
+               set_state(PART:"top_bg", "secret_default", 0.0);
+               set_state(PART:"image_mask", "secret", 0.0);
+            }
+         }
+         program { "state_normal";
+            signal: "state_normal";
+            source: "ui";
+            script {
+               set_int(secret_mode, 0);
+               set_state(PART:"elm.text", "default", 0.0);
+               set_state(PART:"top_bg", "default", 0.0);
+               set_state(PART:"image_mask", "default", 0.0);
+            }
+         }
+         program { "switch_landscape";
+            signal: "switch_landscape";
+            source: "ui";
+            action: STATE_SET "landscape" 0.0;
+            target: "bg";
+         }
+         program { "switch_vertical";
+            signal: "switch_vertical";
+            source: "ui";
+            action: STATE_SET "default" 0.0;
+            target: "bg";
+         }
+      }
+   }
 }
diff --git a/services/WebEngineMin/CMakeLists.txt b/services/WebEngineMin/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..5caedac
--- /dev/null
@@ -0,0 +1,20 @@
+project(WebEngineMin)
+
+set(WebEngineMin_SRCS
+    WebEngineMin.cpp
+    )
+
+include(Coreheaders)
+include(EFLHelpers)
+include(EWebKitHelpers)
+
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_SOURCE_DIR})
+
+add_library(${PROJECT_NAME} SHARED ${WebEngineMin_SRCS})
+target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS})
+target_link_libraries(${PROJECT_NAME} ${EWEBKIT2_LDFLAGS})
+
+install(TARGETS ${PROJECT_NAME}
+            LIBRARY DESTINATION services
+            ARCHIVE DESTINATION services/static)
diff --git a/services/WebEngineMin/WebEngineMin.cpp b/services/WebEngineMin/WebEngineMin.cpp
new file mode 100755 (executable)
index 0000000..a42ccc6
--- /dev/null
@@ -0,0 +1,345 @@
+#include "WebEngineMin.h"
+#include <EWebKit.h>
+#include <app_common.h>
+#include "BrowserAssert.h"
+#include "BrowserLogger.h"
+#include "Tools/GeneralTools.h"
+#include "push-service.h"
+#include "ServiceManager.h"
+#include "URIschemes.h"
+
+namespace tizen_browser {
+namespace basic_webengine {
+
+EXPORT_SERVICE(WebEngineMin, "org.tizen.browser.webenginemin")
+
+const std::string WebEngineMin::COOKIES_PATH = "cookies";
+const char* const APPLICATION_NAME_FOR_USER_AGENT_MOBILE =
+    "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36"
+    " (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36";
+
+WebEngineMin::WebEngineMin() :
+    m_ewkView(nullptr),
+    m_ewkContext(nullptr),
+    m_loadingURL(""),
+    m_downloadControl(std::make_shared<DownloadControl>()),
+    m_policyCounter(0)
+{
+}
+
+WebEngineMin::~WebEngineMin()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (m_ewkContext)
+        ewk_context_push_message_callback_set(m_ewkContext, nullptr, nullptr);
+
+    if (m_ewkView) {
+        evas_object_smart_callback_del_full(m_ewkView, "load,finished", _load_finished, this);
+        evas_object_smart_callback_del_full(m_ewkView, "rotate,prepared", _rotate_prepared, this);
+        evas_object_smart_callback_del_full(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+        evas_object_smart_callback_del_full(m_ewkView, "create,window", __newWindowRequest, this);
+        evas_object_smart_callback_del_full(m_ewkView, "policy,response,decide", __policy_response_decide_cb, this);
+        evas_object_smart_callback_del_full(m_ewkView, "policy,navigation,decide", __policy_navigation_decide_cb, this);
+        evas_object_smart_callback_del_full(m_ewkView, "create,window,url", __newWindowRequestUrl, this);
+        evas_object_smart_callback_del_full(m_ewkView, "policy,newwindow,decide", __policy_newwindow_decide_cb, this);
+
+        evas_object_del(m_ewkView);
+    }
+}
+
+void WebEngineMin::_push_cb(const char *sender_id, const char* push_data, void* data) {
+    BROWSER_LOGD("[%s:%d] push_time %s", __PRETTY_FUNCTION__, __LINE__, sender_id);
+    if (data) {
+        auto self = static_cast<WebEngineMin*>(data);
+        std::string msg = *(self->pushSignal(sender_id, push_data));
+        if (!msg.empty())
+            ewk_context_send_push_message(self->m_ewkContext, (char*)msg.c_str());
+    } else {
+        BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+    }
+}
+
+void WebEngineMin::init(Evas_Object* guiParent)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    m_ewkView = ewk_view_add_with_context(evas_object_evas_get(guiParent), ewk_context_default_get());
+
+    m_ewkContext = ewk_view_context_get(m_ewkView);
+    if (m_ewkContext)
+        ewk_cookie_manager_accept_policy_set(ewk_context_cookie_manager_get(m_ewkContext),
+            EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+
+    auto pwaData = *getPWADataSignal();
+    auto pwaInstanceId = *getPWAInstanceIDSignal();
+    if (!pwaInstanceId.empty() && !pwaData.empty())
+        ewk_context_send_push_message(m_ewkContext, (char*)pwaData.c_str());
+
+    ewk_context_push_message_callback_set(m_ewkContext, _push_cb, this);
+    evas_object_data_set(m_ewkView, "_container", this);
+    evas_object_color_set(m_ewkView, 255, 255, 255, 255);
+    evas_object_size_hint_weight_set(m_ewkView, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(m_ewkView, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    ewk_view_user_agent_set(m_ewkView, APPLICATION_NAME_FOR_USER_AGENT_MOBILE);
+    ewk_context_cache_model_set(m_ewkContext, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER);
+    std::string path = app_get_data_path() + COOKIES_PATH;
+    ewk_cookie_manager_persistent_storage_set(ewk_context_cookie_manager_get(m_ewkContext),
+        path.c_str(), EWK_COOKIE_PERSISTENT_STORAGE_SQLITE);
+
+    evas_object_smart_callback_add(m_ewkView, "create,window", __newWindowRequest, this);
+    evas_object_smart_callback_add(m_ewkView, "load,finished", _load_finished, this);
+    evas_object_smart_callback_add(m_ewkView, "rotate,prepared", _rotate_prepared, this);
+    evas_object_smart_callback_add(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+    evas_object_smart_callback_add(m_ewkView, "policy,navigation,decide", __policy_navigation_decide_cb, this);
+    evas_object_smart_callback_add(m_ewkView, "policy,response,decide", __policy_response_decide_cb, this);
+    evas_object_smart_callback_add(m_ewkView, "create,window,url", __newWindowRequestUrl, this);
+    evas_object_smart_callback_add(m_ewkView, "policy,newwindow,decide", __policy_newwindow_decide_cb, this);
+
+    auto permissions = *getPermissionsMap();
+    Eina_List* permList = nullptr;
+    for (const auto& it : permissions) {
+        Ewk_Notification_Permission perm;
+        perm.origin = it.first.c_str();
+        perm.allowed = it.second;
+        BROWSER_LOGD("[%s:%d] Permission for %s is %d", __PRETTY_FUNCTION__, __LINE__, perm.origin, perm.allowed);
+        permList = eina_list_append(permList, (void*)&perm);
+        if (eina_error_get())
+            BROWSER_LOGE("[%s:%d] eina list append failed", __PRETTY_FUNCTION__, __LINE__);
+    }
+    if (permList) {
+        BROWSER_LOGD("[%s:%d] Set permissions", __PRETTY_FUNCTION__, __LINE__);
+        ewk_notification_cached_permissions_set(permList);
+    }
+
+    resume();
+}
+
+void WebEngineMin::windowRequest(const char* url)
+{
+    BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__,url);
+    app_control_h app_control;
+    app_control_create(&app_control);
+    app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW);
+    app_control_set_uri(app_control, url ? url : m_loadingURL.c_str());
+    app_control_send_launch_request(app_control, nullptr, nullptr);
+}
+
+void WebEngineMin::__newWindowRequest(void* data, Evas_Object*, void*)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    RETURN_ON_NO_DATA(data);
+
+    auto self = static_cast<WebEngineMin*>(data);
+    self->windowRequest();
+}
+
+void WebEngineMin::__newWindowRequestUrl(void* data, Evas_Object*, void* out)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    RETURN_ON_NO_DATA(data);
+    RETURN_ON_NO_DATA(out);
+
+    auto self = static_cast<WebEngineMin*>(data);
+    self->windowRequest((const char*)out);
+}
+void WebEngineMin::__policy_newwindow_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    auto self = static_cast<WebEngineMin*>(data);
+
+    Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
+    const char* uri = ewk_policy_decision_url_get(policy_decision);
+    BROWSER_LOGD("uri = [%s]", uri);
+    self->m_loadingURL = std::string(uri);
+}
+
+void WebEngineMin::__policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
+{
+    BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
+    auto wv = static_cast<WebEngineMin*>(data);
+
+    Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision*)event_info;
+    const char* uri = ewk_policy_decision_url_get(policy_decision);
+    wv->m_loadingURL = std::string(uri);
+    BROWSER_LOGD("uri = [%s]", uri);
+
+    Eina_Bool is_scheme_handled = handle_scheme(uri);
+
+    if (is_scheme_handled) {
+        BROWSER_LOGD("Scheme handled");
+        ewk_policy_decision_ignore(policy_decision);
+        if (!wv->isBackEnabled())
+            wv = nullptr;
+        return;
+    }
+    ewk_policy_decision_use(policy_decision);
+}
+
+void WebEngineMin::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, void* event_info)
+{
+    auto wv = static_cast<WebEngineMin*>(data);
+    ++wv->m_policyCounter;
+
+    Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
+    Ewk_Policy_Decision_Type policy_type = ewk_policy_decision_type_get(policy_decision);
+
+    switch (policy_type) {
+    case EWK_POLICY_DECISION_USE:
+        BROWSER_LOGD("[%s:%d] policy_use", __PRETTY_FUNCTION__, __LINE__);
+        ewk_policy_decision_use(policy_decision);
+        break;
+
+    case EWK_POLICY_DECISION_DOWNLOAD: {
+        BROWSER_LOGD("[%s:%d] policy_download", __PRETTY_FUNCTION__, __LINE__);
+        evas_object_smart_callback_call(wv->m_ewkView, "close,window", nullptr);
+        const char *uri = ewk_policy_decision_url_get(policy_decision);
+        const char *content_type = ewk_policy_decision_response_mime_get(policy_decision);
+        const Eina_Hash *headers = ewk_policy_decision_response_headers_get(policy_decision);
+        app_control_h app_control = nullptr;
+        if (app_control_create(&app_control) < 0) {
+            BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
+            return;
+         }
+
+        if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
+            BROWSER_LOGE("[%s:%d] Fail to app_control_set_operation", __PRETTY_FUNCTION__, __LINE__);
+            app_control_destroy(app_control);
+            return;
+         }
+
+        BROWSER_LOGD("[%s:%d] uri: %s", __PRETTY_FUNCTION__, __LINE__, uri);
+        if (app_control_set_uri(app_control, uri) < 0) {
+            BROWSER_LOGE("[%s:%d] Fail to app_control_set_uri", __PRETTY_FUNCTION__, __LINE__);
+            app_control_destroy(app_control);
+            return;
+         }
+
+        BROWSER_LOGD("[%s:%d] content_type: %s", __PRETTY_FUNCTION__, __LINE__, content_type);
+        if (app_control_set_mime(app_control, content_type) < 0) {
+            BROWSER_LOGE("[%s:%d] Fail to app_control_set_mime", __PRETTY_FUNCTION__, __LINE__);
+            app_control_destroy(app_control);
+            return;
+         }
+
+        const char *content_dispotision = (const char *)eina_hash_find(headers, "Content-Disposition");
+        BROWSER_LOGD("[%s:%d] Content-disposition: %s", __PRETTY_FUNCTION__, __LINE__, content_dispotision);
+        if (content_dispotision && (strstr(content_dispotision, "attachment") != nullptr)){
+            wv->m_downloadControl->handle_download_request(uri, content_type);
+            app_control_destroy(app_control);
+            ewk_policy_decision_ignore(policy_decision);
+            break;
+         }
+
+        if (app_control_send_launch_request(app_control, nullptr, nullptr) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
+            BROWSER_LOGD("[%s:%d] app_control_send_launch_request returns APP_CONTROL_ERROR_APP_NOT_FOUND", __PRETTY_FUNCTION__, __LINE__);
+            wv->m_downloadControl->handle_download_request(uri, content_type);
+         }
+        app_control_destroy(app_control);
+        ewk_policy_decision_ignore(policy_decision);
+        break;
+    }
+    case EWK_POLICY_DECISION_IGNORE:
+    default:
+        BROWSER_LOGD("[%s:%d] policy_ignore", __PRETTY_FUNCTION__, __LINE__);
+        ewk_policy_decision_ignore(policy_decision);
+        break;
+    }
+}
+
+TabId WebEngineMin::addTab(const std::string& uri,
+    const boost::optional<int>,
+    const std::string&,
+    bool,
+    TabOrigin)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    setURI(uri);
+    return 0;
+}
+
+void WebEngineMin::suspend()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_ewkView);
+
+    ewk_view_suspend(m_ewkView);
+}
+
+void WebEngineMin::resume()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_ewkView);
+
+    ewk_view_resume(m_ewkView);
+}
+
+void WebEngineMin::setURI(const std::string& uri)
+{
+    BROWSER_LOGD("[%s:%d] uri=%s", __PRETTY_FUNCTION__, __LINE__, uri.c_str());
+    ewk_view_url_set(m_ewkView, uri.c_str());
+}
+
+std::string WebEngineMin::getURI(void) const
+{
+    return tools::fromChar(ewk_view_url_get(m_ewkView));
+}
+
+void WebEngineMin::orientationChanged()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    boost::optional<int> signal = getRotation();
+    if (signal && *signal != -1) {
+        int angle = *signal;
+        if ((angle % 180) == 90)
+            angle -= 180;
+        ewk_view_orientation_send(m_ewkView, angle);
+    }
+}
+
+void WebEngineMin::_load_finished(void * data, Evas_Object * /* obj */, void * /* event_info */)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!data) {
+        BROWSER_LOGW("[%s:%d] Wrong data!", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+    WebEngineMin * self = static_cast<WebEngineMin *>(data);
+    self->loadFinished();
+}
+
+void WebEngineMin::_rotate_prepared(void * data, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (data) {
+        auto *self = static_cast<WebEngineMin *>(data);
+        self->rotatePrepared();
+    } else
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebEngineMin::__notification_reply_cb(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!data || !event_info) {
+        BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+        return;
+    }
+    auto perm = static_cast<Ewk_Notification_Permission*>(event_info);
+    auto self = static_cast<WebEngineMin*>(data);
+    auto id = *self->getPermissionId(perm->origin);
+    if (!id) {
+        auto ret = *self->storePermission(perm->origin, perm->allowed);
+        if (!ret)
+            BROWSER_LOGW("[%s:%d] failed to store permission", __PRETTY_FUNCTION__, __LINE__);
+    } else {
+        auto ret = self->updatePermissionState(id, perm->allowed);
+        if (!ret)
+            BROWSER_LOGW("[%s:%d] failed to update permission", __PRETTY_FUNCTION__, __LINE__);
+    }
+}
+
+}
+}
diff --git a/services/WebEngineMin/WebEngineMin.h b/services/WebEngineMin/WebEngineMin.h
new file mode 100755 (executable)
index 0000000..d137dca
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WEBENGINEMIN_H_
+#define WEBENGINEMIN_H_
+
+
+#include <boost/noncopyable.hpp>
+#include <Evas.h>
+#include <EWebKit_internal.h>
+
+#include "AbstractWebEngine/AbstractWebEngine.h"
+#include "DownloadControl/DownloadControl.h"
+#include "service_macros.h"
+
+namespace tizen_browser {
+namespace basic_webengine {
+
+class BROWSER_EXPORT WebEngineMin : public AbstractWebEngine, boost::noncopyable
+{
+public:
+    WebEngineMin();
+    ~WebEngineMin();
+
+    std::string getName() override;
+    Evas_Object* getLayout() override { return m_ewkView; }
+
+    void init(Evas_Object* guiParent) override;
+    void setURI(const std::string& uri) override;
+    std::string getURI() const override;
+    std::string getTitle() const override { return std::string(); }
+    TabOrigin getOrigin() const override { return TabOrigin::UNKNOWN; }
+    std::string getUserAgent() const override { return std::string(); }
+    void suspend() override;
+    void resume() override;
+    bool isSuspended() const override { return false; }
+    bool isBackEnabled() const override { return ewk_view_back_possible(m_ewkView); }
+    bool isForwardEnabled() const override { return false; }
+    bool isLoading() const override { return false; }
+    int tabsCount() const override { return 1; }
+    TabId currentTabId() const override { return 0; }
+    TabId oldestTabId() const override { return 0; }
+    void destroyTabs() override {  evas_object_del(m_ewkView); }
+    std::vector<std::shared_ptr<TabContent>> getTabContents() const override
+        { return std::vector<std::shared_ptr<TabContent>>(); }
+    TabId addTab(const std::string& uri, const boost::optional<int>, const std::string&,
+        bool, TabOrigin) override;
+    TabId openRequestedPage() override { return 0; }
+    Evas_Object* getTabView(TabId) override { return m_ewkView; }
+    bool switchToTab(TabId) override { return true; }
+    bool closeTab() override { return false; }
+    bool closeTab(TabId) override { return false; }
+    std::shared_ptr<tools::BrowserImage> getSnapshotData(int, int, tools::SnapshotType) override
+        { return nullptr; }
+    std::shared_ptr<tools::BrowserImage> getSnapshotData(TabId, int, int, bool, tools::SnapshotType) override
+        { return nullptr; }
+    bool isSecretMode() override { return false; }
+    bool isLoadError() const override { return false; }
+    bool getIMEState() const override { return false; }
+    void setFocus() override { ewk_view_focus_set(m_ewkView, EINA_TRUE); };
+    void clearFocus() override { ewk_view_focus_set(m_ewkView, EINA_FALSE); };
+    bool hasFocus() const override { return ewk_view_focus_get(m_ewkView) == EINA_TRUE; }
+    std::shared_ptr<tools::BrowserImage> getFavicon() override {
+        return nullptr; }
+    void backButtonClicked() override { ewk_view_back(m_ewkView); }
+    bool isDesktopMode() const override { return false; }
+    bool isFullScreenMode() const override { return false; }
+    bool getSettingsParam(WebEngineSettings) override { return false; }
+    void orientationChanged() override;
+    State getState() override { return State::NORMAL; }
+
+#if !DUMMY_BUTTON
+    Evas_Object* getWidget() override { }
+#endif
+    void setPWAData() override { }
+    void setUserAgent(const std::string&) override { }
+    void languageChanged() override { }
+    void stopLoading() override { }
+    void reload() override { }
+    void back() override { }
+    void forward() override { }
+    void confirmationResult(WebConfirmationPtr) override { }
+    void setIMEState(const bool&) override { }
+    void clearCache() override { }
+    void clearCookies() override { }
+    void clearPrivateData() override { }
+    void clearPasswordData() override { }
+    void clearFormData() override { }
+    void searchOnWebsite(const std::string &, int) override { }
+    void switchToMobileMode() override { }
+    void switchToDesktopMode() override { }
+    void onTabIdCreated(int) override { }
+    void findWord(const char*, Eina_Bool, Evas_Smart_Cb, void*) { }
+    void setSettingsParam(WebEngineSettings, bool) override { }
+    void changeState() override { }
+    void setBarsShown(bool) const override { }
+    void windowRequest(const char* url = nullptr);
+
+private:
+    static void _load_finished(void * data, Evas_Object * obj, void * event_info);
+    static void _rotate_prepared(void * data, Evas_Object * obj, void * event_info);
+    static void _push_cb(const char *sender_id, const char *, void *data);
+    static void __notification_reply_cb(void *data, Evas_Object *obj, void *event_info);
+    static void __newWindowRequest(void *data, Evas_Object *, void*);
+    static void __newWindowRequestUrl(void* data, Evas_Object*, void* out);
+    static void __policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info);
+    static void __policy_response_decide_cb(void *data, Evas_Object * /* obj */, void* event_info);
+    static void __policy_newwindow_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info);
+
+    Evas_Object* m_ewkView;
+    Ewk_Context* m_ewkContext;
+    std::string m_loadingURL;
+    std::shared_ptr<DownloadControl> m_downloadControl;
+    int m_policyCounter;
+
+    static const std::string COOKIES_PATH;
+};
+
+
+
+}
+}
+
+
+#endif /* WEBENGINEMIN_H_ */
index 067dbca..c36b5e8 100755 (executable)
 #include <app.h>
 
 #include "AbstractWebEngine/TabId.h"
+#include "AbstractWebEngine/WebConfirmation.h"
+#include "AbstractWebEngine/TabOrigin.h"
+
 #include "BrowserAssert.h"
 #include "BrowserLogger.h"
 #include "Config/Config.h"
+#include "DownloadControl/DownloadControl.h"
+#include "WebView.h"
 
 namespace tizen_browser {
 namespace basic_webengine {
@@ -42,9 +47,11 @@ WebEngineService::WebEngineService()
     , m_currentWebView(nullptr)
     , m_stateStruct(&m_normalStateStruct)
     , m_tabIdCreated(-1)
+    , m_tabIdSecret(0)
     , m_signalsConnected(false)
     , m_downloadControl(nullptr)
     , m_defaultContext(ewk_context_default_get())
+    , m_policyCounter(0)
 {
     m_stateStruct->mostRecentTab.clear();
     m_stateStruct->tabs.clear();
@@ -54,11 +61,10 @@ WebEngineService::WebEngineService()
     m_settings[WebEngineSettings::LOAD_IMAGES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES));
     m_settings[WebEngineSettings::ENABLE_JAVASCRIPT] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT));
     m_settings[WebEngineSettings::REMEMBER_FROM_DATA] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA));
+    m_settings[WebEngineSettings::ENABLE_COOKIES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_COOKIES));
     m_settings[WebEngineSettings::REMEMBER_PASSWORDS] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS));
     m_settings[WebEngineSettings::AUTOFILL_PROFILE_DATA] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA));
     m_settings[WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES] = boost::any_cast<bool>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES));
-
-    preinitializeWebViewCache();
 }
 
 WebEngineService::~WebEngineService()
@@ -69,7 +75,10 @@ WebEngineService::~WebEngineService()
 void WebEngineService::destroyTabs()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_stateStruct->tabs.clear();
+    if (!m_secretStateStruct.tabs.empty())
+        m_secretStateStruct.tabs.clear();
+    if (!m_normalStateStruct.tabs.empty())
+        m_normalStateStruct.tabs.clear();
     if (m_currentWebView)
         m_currentWebView.reset();
 }
@@ -103,6 +112,7 @@ void WebEngineService::init(Evas_Object* guiParent)
     if (!m_initialised) {
         m_guiParent = guiParent;
         m_initialised = true;
+        preinitializeWebViewCache();
     }
 }
 
@@ -113,6 +123,19 @@ void WebEngineService::initializeDownloadControl(Ewk_Context* context)
     m_downloadControl = std::make_shared<DownloadControl>();
 }
 
+void WebEngineService::searchInNewTab(const std::string& text, bool desktopMode, const TabOrigin& origin)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto sig = createSearchQuery(text);
+    if (!sig) {
+        BROWSER_LOGW("[%s:%d] Signal error!", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+
+    switchToTab(addTab(*sig, boost::none, std::string(), desktopMode, origin));
+    windowCreated();
+}
+
 void WebEngineService::preinitializeWebViewCache()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -148,19 +171,53 @@ void WebEngineService::connectSignals(std::shared_ptr<WebView> webView)
     webView->loadStop.connect(boost::bind(&WebEngineService::_loadStop, this));
     webView->loadProgress.connect(boost::bind(&WebEngineService::_loadProgress, this, _1));
     webView->loadError.connect(boost::bind(&WebEngineService::_loadError, this));
+#if DUMMY_BUTTON
+    webView->focusWebView.connect(
+        [this]{ this->focusWebView(); });
+#endif
     webView->forwardEnableChanged.connect(boost::bind(&WebEngineService::_forwardEnableChanged, this, _1));
     webView->backwardEnableChanged.connect(boost::bind(&WebEngineService::_backwardEnableChanged, this, _1));
     webView->confirmationRequest.connect(boost::bind(&WebEngineService::_confirmationRequest, this, _1));
     webView->IMEStateChanged.connect(boost::bind(&WebEngineService::_IMEStateChanged, this, _1));
     webView->snapshotCaptured.connect(boost::bind(&WebEngineService::_snapshotCaptured, this, _1, _2));
-    webView->redirectedWebPage.connect(boost::bind(&WebEngineService::_redirectedWebPage, this, _1, _2));
     webView->setCertificatePem.connect(boost::bind(&WebEngineService::_setCertificatePem, this, _1, _2));
     webView->setWrongCertificatePem.connect(boost::bind(&WebEngineService::_setWrongCertificatePem, this, _1, _2));
     webView->fullscreenModeSet.connect([this](auto state){fullscreenModeSet(state);});
-    webView->getRotation.connect(boost::bind(&WebEngineService::_getRotation, this));
-    webView->rotatePrepared.connect([this](){rotatePrepared();});
     webView->unsecureConnection.connect(boost::bind(&WebEngineService::_unsecureConnection, this));
     webView->findOnPage.connect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+    webView->urlbarOffsetSet.connect([this](auto offset){urlbarOffsetSet(offset);});
+    webView->bottombarOffsetSet.connect([this](auto offset){bottombarOffsetSet(offset);});
+    webView->isPolicyUse.connect([this](int count){m_policyCounter = count;});
+    webView->searchInNewTab.connect([this](auto text, auto desktopMode, auto origin) {
+        this->searchInNewTab(text, desktopMode, origin);
+    });
+    webView->changeUIColor.connect(
+        [this](const int& r, const int& g, const int& b, const int& a){
+            this->changeUIColor(r,g,b,a);
+    });
+    webView->installPWA.connect(
+        [this](const std::string& str, const std::string& id, const std::string& sn) { return *installPWA(str, id, sn); });
+    webView->storePWAShortcut.connect(
+        [this](const unsigned& id, const std::string& shortcut){this->storePWAShortcut(id, shortcut);});
+    webView->pushSignal.connect(
+        [this](const char* sender, const char* push_data) {
+            return *(this->pushSignal(sender, push_data));
+    });
+    webView->storePermission.connect(
+        [this](const std::string& origin, const bool& state) {
+            return *(this->storePermission(origin, state));
+    });
+    webView->getPermissionId.connect(
+        [this](const std::string& origin) {
+            return *(this->getPermissionId(origin));
+    });
+    webView->updatePermissionState.connect(
+        [this](const int& id, const bool& state) {
+            return *(this->updatePermissionState(id, state));
+    });
+    webView->getPermissionsMap.connect(
+        [this] { return *(this->getPermissionsMap());
+    });
     m_signalsConnected = true;
 }
 
@@ -175,16 +232,24 @@ void WebEngineService::disconnectSignals(std::shared_ptr<WebView> webView)
     webView->loadStop.disconnect(boost::bind(&WebEngineService::_loadStop, this));
     webView->loadProgress.disconnect(boost::bind(&WebEngineService::_loadProgress, this, _1));
     webView->loadError.disconnect(boost::bind(&WebEngineService::_loadError, this));
+#if DUMMY_BUTTON
+    webView->focusWebView.disconnect_all_slots();
+#endif
     webView->forwardEnableChanged.disconnect(boost::bind(&WebEngineService::_forwardEnableChanged, this, _1));
     webView->backwardEnableChanged.disconnect(boost::bind(&WebEngineService::_backwardEnableChanged, this, _1));
     webView->confirmationRequest.disconnect(boost::bind(&WebEngineService::_confirmationRequest, this, _1));
     webView->IMEStateChanged.disconnect(boost::bind(&WebEngineService::_IMEStateChanged, this, _1));
-    webView->redirectedWebPage.disconnect(boost::bind(&WebEngineService::_redirectedWebPage, this, _1, _2));
     webView->fullscreenModeSet.disconnect_all_slots();
-    webView->getRotation.disconnect(boost::bind(&WebEngineService::_getRotation, this));
-    webView->rotatePrepared.disconnect_all_slots();
     webView->unsecureConnection.disconnect(boost::bind(&WebEngineService::_unsecureConnection, this));
     webView->findOnPage.disconnect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+    webView->searchInNewTab.disconnect_all_slots();
+    webView->changeUIColor.disconnect_all_slots();
+    webView->installPWA.disconnect_all_slots();
+    webView->storePWAShortcut.disconnect_all_slots();
+    webView->storePermission.disconnect_all_slots();
+    webView->getPermissionId.disconnect_all_slots();
+    webView->updatePermissionState.disconnect_all_slots();
+    webView->getPermissionsMap.disconnect_all_slots();
     m_signalsConnected = false;
 }
 
@@ -224,13 +289,14 @@ std::string WebEngineService::getURI() const
         return std::string("");
 }
 
-#if PWA
-void WebEngineService::requestManifest()
+void WebEngineService::setPWAData()
 {
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_currentWebView->requestManifest();
+    m_currentWebView->addManifestTypeToHandle(ManifestType::PWA_MANIFEST);
+    if (!m_currentWebView->isManifestReady())
+        m_currentWebView->requestManifest();
+    else
+        m_currentWebView->handleManifest();
 }
-#endif
 
 bool WebEngineService::isLoadError() const
 {
@@ -312,6 +378,16 @@ void WebEngineService::resume()
     registerHWKeyCallback();
 }
 
+void WebEngineService::languageChanged()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!m_currentWebView) {
+        BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__, "m_currentWebView is null");
+        return;
+    }
+    m_currentWebView->reload();
+}
+
 bool WebEngineService::isSuspended() const
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -463,11 +539,6 @@ int WebEngineService::tabsCount() const
     return m_stateStruct->tabs.size();
 }
 
-TabId WebEngineService::currentTabId() const
-{
-    return m_stateStruct->currentTabId;
-}
-
 std::vector<TabContentPtr> WebEngineService::getTabContents() const {
     std::vector<TabContentPtr> result;
     for (auto const& tab : m_stateStruct->tabs) {
@@ -490,8 +561,15 @@ TabId WebEngineService::addTab(
     bool desktopMode,
     TabOrigin origin)
 {
-    if (!(*AbstractWebEngine::checkIfCreate()))
-        return currentTabId();
+    if (!(*AbstractWebEngine::checkIfCreate())) {
+        BROWSER_LOGD("[%s:%d] Requesting to open page after decision.", __PRETTY_FUNCTION__, __LINE__);
+        m_requestedPage.uri = uri;
+        m_requestedPage.tabId = tabId;
+        m_requestedPage.title = title;
+        m_requestedPage.desktopMode = desktopMode;
+        m_requestedPage.origin = origin;
+        return TabId::NONE;
+    }
 
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
@@ -517,6 +595,8 @@ TabId WebEngineService::addTab(
         m_webViewCacheInitialized = true;
     }
     WebViewPtr p = std::make_shared<WebView>(m_guiParent, newTabId, title, m_state == State::SECRET);
+    disconnectSignals(p);
+    connectSignals(p);
     p->init(desktopMode, origin);
 
     if (m_state == State::SECRET)
@@ -530,11 +610,20 @@ TabId WebEngineService::addTab(
         p->setURI(uri);
     }
 
+    p->getRotation.connect([this] { return _getRotation(); } );
+    p->rotatePrepared.connect([this] { rotatePrepared(); } );
+
     AbstractWebEngine::tabCreated();
 
     return newTabId;
 }
 
+TabId WebEngineService::openRequestedPage()
+{
+    return addTab(m_requestedPage.uri, m_requestedPage.tabId, m_requestedPage.title,
+        m_requestedPage.desktopMode, m_requestedPage.desktopMode);
+}
+
 Evas_Object* WebEngineService::getTabView(TabId id){
     if (m_stateStruct->tabs.find(id) == m_stateStruct->tabs.end()) {
         BROWSER_LOGW("[%s:%d] there is no tab of id %d", __PRETTY_FUNCTION__, __LINE__, id.get());
@@ -591,6 +680,10 @@ bool WebEngineService::closeTab(TabId id) {
     if (closingTabId == TabId::NONE){
         return res;
     }
+
+    m_stateStruct->tabs[closingTabId]->getRotation.disconnect_all_slots();
+    m_stateStruct->tabs[closingTabId]->rotatePrepared.disconnect_all_slots();
+
     m_stateStruct->tabs.erase(closingTabId);
     m_stateStruct->mostRecentTab.erase(
         std::remove(m_stateStruct->mostRecentTab.begin(),
@@ -652,6 +745,16 @@ std::shared_ptr<tizen_browser::tools::BrowserImage> WebEngineService::getSnapsho
    return m_stateStruct->tabs[id]->captureSnapshot(width, height, async, snapshot_type);
 }
 
+void WebEngineService::setIMEState(const bool& state)
+{
+    m_currentWebView->setIMEState(state);
+}
+
+bool WebEngineService::getIMEState() const
+{
+    return m_currentWebView->getIMEState();
+}
+
 void WebEngineService::setFocus()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -703,6 +806,7 @@ void WebEngineService::setWebViewSettings(std::shared_ptr<WebView> webView) {
     webView->ewkSettingsLoadsImagesSet(m_settings[WebEngineSettings::LOAD_IMAGES]);
     webView->ewkSettingsJavascriptEnabledSet(m_settings[WebEngineSettings::ENABLE_JAVASCRIPT]);
     webView->ewkSettingsFormCandidateDataEnabledSet(m_settings[WebEngineSettings::REMEMBER_FROM_DATA]);
+    webView->ewkSettingsCookiesEnabledSet(m_settings[WebEngineSettings::ENABLE_COOKIES]);
     webView->ewkSettingsAutofillPasswordFormEnabledSet(m_settings[WebEngineSettings::REMEMBER_PASSWORDS]);
     webView->ewkSettingsFormProfileDataEnabledSet(m_settings[WebEngineSettings::AUTOFILL_PROFILE_DATA]);
     webView->ewkSettingsScriptsCanOpenNewPagesEnabledSet(m_settings[WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES]);
@@ -724,26 +828,6 @@ void WebEngineService::_findOnPage(const std::string& str)
     openFindOnPage(str);
 }
 
-int WebEngineService::getZoomFactor() const
-{
-    if (!m_currentWebView)
-        return 0;
-    return static_cast<int>(m_currentWebView->getZoomFactor()*100);
-
-}
-
-void WebEngineService::setZoomFactor(int zoomFactor)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_currentWebView);
-    if (!m_currentWebView) {
-        BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
-        return;
-    }
-    m_currentWebView->setZoomFactor(0.01*zoomFactor);
-
-}
-
 void WebEngineService::clearCache()
 {
     for(const auto& it: m_stateStruct->tabs) {
@@ -810,11 +894,6 @@ void WebEngineService::_snapshotCaptured(std::shared_ptr<tizen_browser::tools::B
     snapshotCaptured(image, snapshot_type);
 }
 
-void WebEngineService::_redirectedWebPage(const std::string& oldUrl, const std::string& newUrl)
-{
-    redirectedWebPage(oldUrl, newUrl);
-}
-
 void WebEngineService::_setCertificatePem(const std::string& uri, const std::string& pem)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -852,6 +931,11 @@ void WebEngineService::_download_request_cb(const char *download_uri, void *data
      } else {
          wes->downloadStarted(wes->m_downloadControl->launch_download_app(download_uri) == EINA_TRUE);
      }
+
+     if (wes->m_policyCounter == 1 && strncmp(wes->getURI().c_str(), "file:", strlen("file:"))) {
+         wes->closeTab();
+         wes->m_policyCounter = 0;
+     }
 }
 
 
@@ -865,23 +949,6 @@ int WebEngineService::_getRotation()
         return -1;
 }
 
-void WebEngineService::moreKeyPressed()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    M_ASSERT(m_currentWebView);
-    if (!m_currentWebView) {
-        BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
-        return;
-    }
-
-    if (m_stateStruct->currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
-        return;
-
-    if (m_currentWebView->isFullScreen()) {
-        m_currentWebView->exitFullScreen();
-    }
-}
-
 void WebEngineService::backButtonClicked()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -944,15 +1011,15 @@ bool WebEngineService::isDesktopMode() const
     return m_currentWebView->isDesktopMode();
 }
 
-void WebEngineService::scrollView(const int& dx, const int& dy)
+bool WebEngineService::isFullScreenMode() const
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(m_currentWebView);
     if (!m_currentWebView) {
         BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
-        return;
+        return false;
     }
-    m_currentWebView->scrollView(dx, dy);
+    return m_currentWebView->isFullScreen();
 }
 
 void WebEngineService::findWord(const char *word, Eina_Bool forward, Evas_Smart_Cb found_cb, void *data)
@@ -981,6 +1048,9 @@ void WebEngineService::setSettingsParam(WebEngineSettings param, bool value) {
         case WebEngineSettings::REMEMBER_FROM_DATA:
             it->second->ewkSettingsFormCandidateDataEnabledSet(value);
             break;
+        case WebEngineSettings::ENABLE_COOKIES:
+            it->second->ewkSettingsCookiesEnabledSet(value);
+            break;
         case WebEngineSettings::REMEMBER_PASSWORDS:
             it->second->ewkSettingsAutofillPasswordFormEnabledSet(value);
             break;
@@ -996,24 +1066,6 @@ void WebEngineService::setSettingsParam(WebEngineSettings param, bool value) {
     }
 }
 
-void WebEngineService::resetSettingsParam()
-{
-    setSettingsParam(WebEngineSettings::PAGE_OVERVIEW, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_PAGE_OVERVIEW)));
-    setSettingsParam(WebEngineSettings::LOAD_IMAGES, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_LOAD_IMAGES)));
-    setSettingsParam(WebEngineSettings::ENABLE_JAVASCRIPT, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_ENABLE_JAVASCRIPT)));
-    setSettingsParam(WebEngineSettings::REMEMBER_FROM_DATA, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_FROM_DATA)));
-    setSettingsParam(WebEngineSettings::REMEMBER_PASSWORDS, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_REMEMBER_PASSWORDS)));
-    setSettingsParam(WebEngineSettings::AUTOFILL_PROFILE_DATA, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_AUTOFILL_PROFILE_DATA)));
-    setSettingsParam(WebEngineSettings::SCRIPTS_CAN_OPEN_PAGES, boost::any_cast<bool>(
-            tizen_browser::config::Config::getInstance().get(CONFIG_KEY::WEB_ENGINE_SCRIPTS_CAN_OPEN_PAGES)));
-}
-
 void WebEngineService::changeState()
 {
     suspend();
@@ -1032,6 +1084,17 @@ void WebEngineService::changeState()
         m_currentWebView = m_stateStruct->tabs[m_stateStruct->currentTabId];
 }
 
+void WebEngineService::setBarsShown(bool value) const
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    M_ASSERT(m_currentWebView);
+    if (!m_currentWebView) {
+        BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
+        return;
+    }
+    m_currentWebView->setBarsShown(value);
+}
+
 } /* end of webengine_service */
 } /* end of basic_webengine */
 } /* end of tizen_browser */
index 5767326..4bf7f31 100755 (executable)
 #include <string>
 #include <Evas.h>
 #include <memory>
+#include <EWebKit_internal.h>
 
-#include "ServiceFactory.h"
 #include "service_macros.h"
 
 #include "AbstractWebEngine/AbstractWebEngine.h"
 #include "AbstractWebEngine/TabIdTypedef.h"
-#include "AbstractWebEngine/WebConfirmation.h"
-#include "AbstractWebEngine/TabOrigin.h"
 #include "AbstractWebEngine/State.h"
 #include "SnapshotType.h"
-#include "BrowserImage.h"
-#include "DownloadControl/DownloadControl.h"
-#include "WebView.h"
+
+class DownloadControl;
 
 namespace tizen_browser {
+
+namespace tools {
+class BrowserImage;
+}
 namespace basic_webengine {
+
+class WebConfirmation;
+class TabOrigin;
+
 namespace webengine_service {
 
 class WebView;
 
 using WebViewPtr = std::shared_ptr<WebView>;
-using TabsMapPtr = std::shared_ptr<std::map<TabId, WebViewPtr > >;
+using TabsMapPtr = std::shared_ptr<std::map<TabId, WebViewPtr>>;
 
 class BROWSER_EXPORT WebEngineService : public AbstractWebEngine, boost::noncopyable
 {
 public:
     WebEngineService();
     virtual ~WebEngineService();
-    virtual std::string getName();
+    std::string getName() override;
 
     Evas_Object * getLayout();
 #if !DUMMY_BUTTON
     Evas_Object * getWidget();
 #endif
-    void init(Evas_Object *guiParent);
-    void preinitializeWebViewCache();
-
+    void init(Evas_Object* guiParent);
     void setURI(const std::string &);
     std::string getURI(void) const;
-#if PWA
-    void requestManifest(void);
-#endif
+    void setPWAData();
     std::string getTitle(void) const;
     TabOrigin getOrigin(void) const;
     std::string getUserAgent(void) const;
@@ -70,6 +71,7 @@ public:
 
     void suspend(void);
     void resume(void);
+    void languageChanged(void);
     bool isSuspended(void) const;
 
     void stopLoading(void);
@@ -90,7 +92,8 @@ public:
     void clearFormData();
 
     int tabsCount() const;
-    TabId currentTabId() const;
+    TabId currentTabId() const { return m_stateStruct->currentTabId; };
+    TabId oldestTabId() const { return m_stateStruct->mostRecentTab[0]; };
 
     void destroyTabs();
 
@@ -110,6 +113,7 @@ public:
             const std::string& title = std::string(),
             bool desktopMode = true,
             TabOrigin origin = TabOrigin::UNKNOWN);
+    TabId openRequestedPage();
     Evas_Object* getTabView(TabId id);
     bool switchToTab(TabId);
     bool closeTab();
@@ -128,6 +132,9 @@ public:
 
     std::shared_ptr<tizen_browser::tools::BrowserImage> getSnapshotData(TabId id, int width, int height, bool async, tizen_browser::tools::SnapshotType snapshot_type);
 
+    void setIMEState(const bool& state);
+    bool getIMEState() const;
+
     /**
      * @brief Get the state of secret mode
      *
@@ -156,15 +163,6 @@ public:
      */
     bool hasFocus() const;
 
-    virtual int getZoomFactor() const;
-
-    /**
-     * @brief check if autofit is enabled
-     */
-
-    virtual void setZoomFactor(int zoomFactor);
-
-
     /**
      * @brief Search string on searchOnWebsite
      *
@@ -183,15 +181,12 @@ public:
      */
     void backButtonClicked();
 
-    void moreKeyPressed();
     void orientationChanged();
 
     void switchToMobileMode();
     void switchToDesktopMode();
     bool isDesktopMode() const;
-
-    void scrollView(const int& dx, const int& dy);
-
+    bool isFullScreenMode() const;
     void onTabIdCreated(int tabId) override;
 
     /**
@@ -215,11 +210,6 @@ public:
     void setSettingsParam(WebEngineSettings param, bool value) override;
 
     /**
-     * @brief Reset WebView settings
-     */
-    virtual void resetSettingsParam() override;
-
-    /**
      * @brief set next state
      */
     void changeState() override;
@@ -228,6 +218,11 @@ public:
      * @brief Get current state of the engine
      */
     State getState() override { return m_state; }
+
+    /**
+     * @brief If false bottom and url bar hide.
+     */
+    void setBarsShown(bool value) const override;
 private:
     // callbacks from WebView
     void _favIconChanged(std::shared_ptr<tizen_browser::tools::BrowserImage> bi);
@@ -242,7 +237,6 @@ private:
     void _confirmationRequest(WebConfirmationPtr) ;
     void _IMEStateChanged(bool);
     void _snapshotCaptured(std::shared_ptr<tizen_browser::tools::BrowserImage> snapshot, tools::SnapshotType snapshot_type);
-    void _redirectedWebPage(const std::string& oldUrl, const std::string& newUrl);
     void _setCertificatePem(const std::string& uri, const std::string& pem);
     void _setWrongCertificatePem(const std::string& uri, const std::string& pem);
 
@@ -253,6 +247,11 @@ private:
     static void _download_request_cb(const char *download_uri, void *data);
 
     /**
+     * Preinitialize WebView parameters.
+     */
+    void preinitializeWebViewCache();
+
+    /**
      * disconnect signals from specified WebView
      * \param WebView
      */
@@ -266,6 +265,7 @@ private:
 
     int createTabId();
     void initializeDownloadControl(Ewk_Context* context = ewk_context_default_get());
+    void searchInNewTab(const std::string&, bool, const TabOrigin&);
 
 private:
     struct StateStruct {
@@ -274,6 +274,14 @@ private:
         TabId currentTabId = TabId::NONE;
     };
 
+    struct TabStruct {
+        std::string uri;
+        boost::optional<int> tabId = boost::none;
+        std::string title;
+        bool desktopMode = false;
+        TabOrigin origin = TabOrigin::UNKNOWN;
+    };
+
     State m_state;
     bool m_initialised;
     Evas_Object* m_guiParent;
@@ -285,6 +293,7 @@ private:
     StateStruct m_normalStateStruct;
     StateStruct m_secretStateStruct;
     StateStruct* m_stateStruct;
+    TabStruct m_requestedPage;
     int m_tabIdCreated;
     int m_tabIdSecret;
     bool m_signalsConnected;
@@ -292,6 +301,7 @@ private:
     std::map<WebEngineSettings, bool>  m_settings;
     std::shared_ptr<DownloadControl> m_downloadControl;
     Ewk_Context* m_defaultContext;
+    int m_policyCounter;
 };
 
 } /* end of webengine_service */
index 6bae8ef..f2c45f8 100755 (executable)
@@ -24,7 +24,6 @@
 #include "WebView.h"
 
 #include <EWebKit.h>
-#include <EWebKit_internal.h>
 
 #include <boost/format.hpp>
 #include <boost/regex.hpp>
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/split.hpp>
 #include <Elementary.h>
-#include <Evas.h>
 
 #include "URIschemes.h"
 #include "app_i18n.h"
 #include "AbstractWebEngine/AbstractWebEngine.h"
+#include "AbstractWebEngine/TabOrigin.h"
+#include "Config.h"
+#include "DownloadControl/DownloadControl.h"
 #include "app_common.h"
 #include "BrowserAssert.h"
 #include "BrowserLogger.h"
+#include "BrowserImage.h"
 #include "EflTools.h"
 #include "GeneralTools.h"
 #include "Tools/WorkQueue.h"
 #include "ServiceManager.h"
 #include <shortcut_manager.h>
-#include <string>
 
 #include <device/haptic.h>
 #include <Ecore.h>
 
-#if PWA
 #include <sys/stat.h>
 #include <fcntl.h>
-#include <tzplatform_config.h>
-#endif
+#include <glib.h>
+#include <curl/curl.h>
 
-#define certificate_crt_path CERTS_DIR
-#define APPLICATION_NAME_FOR_USER_AGENT "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 safari/537.36 "
+const char* const APPLICATION_NAME_FOR_USER_AGENT =
+    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.69 safari/537.36 ";
 
 //TODO: temporary user agent for mobile display, change to proper one
-#define APPLICATION_NAME_FOR_USER_AGENT_MOBILE "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36"
+const char* const APPLICATION_NAME_FOR_USER_AGENT_MOBILE =
+    "Mozilla/5.0 (Linux; Tizen 3.0; SAMSUNG TM1) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/1.0 Chrome/47.0.2526.69 Mobile safari/537.36";
+
+const unsigned URL_BAR_HEIGHT = 108;
+const unsigned BOTTOM_BAR_HEIGHT = 96;
+const unsigned FIND_WORD_MAX_COUNT = 1000;
 
-Ecore_Timer* m_haptic_timer_id =NULL;
+Ecore_Timer* m_haptic_timer_id = nullptr;
 haptic_device_h m_haptic_handle;
 haptic_effect_h m_haptic_effect;
 
-#define FIND_WORD_MAX_COUNT 1000
-
 using namespace tizen_browser::tools;
+using namespace tizen_browser::config;
 
 namespace tizen_browser {
 namespace basic_webengine {
 namespace webengine_service {
 
 const std::string WebView::COOKIES_PATH = "cookies";
-#if PWA
 std::string WebView::s_pwaData = "";
 std::string WebView::s_name = "";
-std::string WebView::s_start_url = "";
 std::string WebView::s_icon = "";
-#define DOWNLOAD_PATH tzplatform_getenv(TZ_USER_DOWNLOADS)
-#endif
+const std::string WebView::DOWNLOAD_PATH = app_get_shared_data_path();
 
 struct SnapshotItemData {
-    WebView * web_view;
-    tizen_browser::tools::SnapshotType snapshot_type;
+    WebView* web_view;
+    SnapshotType snapshot_type;
 };
 
 WebView::WebView(Evas_Object * obj, TabId tabId, const std::string& title, bool incognitoMode)
@@ -96,12 +97,32 @@ WebView::WebView(Evas_Object * obj, TabId tabId, const std::string& title, bool
     , m_title(title)
     , m_redirectedURL("")
     , m_isLoading(false)
+    , m_loadProgress(0.0)
     , m_loadError(false)
+    , m_desktopMode(false)
     , m_suspended(false)
     , m_private(incognitoMode)
     , m_fullscreen(false)
+    , m_manifestData()
+    , m_manifestReady(false)
     , m_downloadControl(nullptr)
-{
+    , m_policyCounter(0)
+    , m_imeState(false)
+    , m_themeColor()
+{
+    m_manifestData.orientation_type = static_cast<Ewk_View_Orientation_Type>(0);
+    m_manifestData.web_display_mode = static_cast<Ewk_View_Web_Display_Mode>(0);
+    m_manifestData.theme_color.colorExist = 0;
+    m_manifestData.theme_color.r = 0;
+    m_manifestData.theme_color.g = 0;
+    m_manifestData.theme_color.b = 0;
+    m_manifestData.theme_color.a = 0;
+    m_manifestData.background_color.colorExist = 0;
+    m_manifestData.background_color.r = 0;
+    m_manifestData.background_color.g = 0;
+    m_manifestData.background_color.b = 0;
+    m_manifestData.background_color.a = 0;
+    m_manifestData.icons_count = 0;
 }
 
 WebView::~WebView()
@@ -115,6 +136,18 @@ WebView::~WebView()
     delete m_downloadControl;
 }
 
+void WebView::_push_cb(const char *sender_id, const char * push_data, void *data) {
+    BROWSER_LOGD("[%s:%d] pdush_time %d", __PRETTY_FUNCTION__, __LINE__, sender_id);
+    if (data) {
+        auto self = static_cast<WebView*>(data);
+        std::string msg = *(self->pushSignal(sender_id, push_data));
+        if (!msg.empty())
+            ewk_context_send_push_message(self->m_ewkContext, (char*)msg.c_str());
+    } else {
+        BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+    }
+}
+
 void WebView::init(bool desktopMode, TabOrigin origin)
 {
     m_ewkView = m_private ? ewk_view_add_in_incognito_mode(evas_object_evas_get(m_parent)) :
@@ -123,6 +156,7 @@ void WebView::init(bool desktopMode, TabOrigin origin)
     m_ewkContext = ewk_view_context_get(m_ewkView);
     if (m_ewkContext)
         ewk_cookie_manager_accept_policy_set(ewk_context_cookie_manager_get(m_ewkContext), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+    ewk_context_push_message_callback_set(m_ewkContext, _push_cb, this);
 
     evas_object_data_set(m_ewkView, "_container", this);
     BROWSER_LOGD("[%s:%d] self=%p", __PRETTY_FUNCTION__, __LINE__, this);
@@ -145,6 +179,24 @@ void WebView::init(bool desktopMode, TabOrigin origin)
     registerCallbacks();
     m_downloadControl = new DownloadControl();
     orientationChanged();
+
+    BROWSER_LOGD("[%s:%d] Check permissions", __PRETTY_FUNCTION__, __LINE__);
+    auto permissions = *getPermissionsMap();
+    Eina_List* permList = nullptr;
+    for (const auto& it : permissions) {
+        Ewk_Notification_Permission perm;
+        perm.origin = it.first.c_str();
+        perm.allowed = it.second;
+        BROWSER_LOGD("[%s:%d] Permission for %s is %d", __PRETTY_FUNCTION__, __LINE__, perm.origin, perm.allowed);
+        permList = eina_list_append(permList, (void*)&perm);
+        if (eina_error_get())
+            BROWSER_LOGE("[%s:%d] eina list append failed", __PRETTY_FUNCTION__, __LINE__);
+    }
+    if (permList) {
+        BROWSER_LOGD("[%s:%d] Set permissions", __PRETTY_FUNCTION__, __LINE__);
+        ewk_notification_cached_permissions_set(permList);
+    }
+
     resume();
 }
 
@@ -215,6 +267,9 @@ void WebView::registerCallbacks()
     evas_object_smart_callback_add(m_ewkView, "load,finished", __loadFinished, this);
     evas_object_smart_callback_add(m_ewkView, "load,progress", __loadProgress, this);
     evas_object_smart_callback_add(m_ewkView, "load,error", __loadError, this);
+#if DUMMY_BUTTON
+    evas_object_smart_callback_add(m_ewkView, "webview,focus,request", __focusWebView, this);
+#endif
 
     evas_object_smart_callback_add(m_ewkView, "title,changed", __titleChanged, this);
     evas_object_smart_callback_add(m_ewkView, "url,changed", __urlChanged, this);
@@ -244,6 +299,11 @@ void WebView::registerCallbacks()
     ewk_context_vibration_client_callbacks_set(m_ewkContext, __vibration_cb, __vibration_cancel_cb, this);
 
     evas_object_smart_callback_add(m_ewkView, "rotate,prepared", __rotate_prepared_cb, this);
+
+    evas_object_smart_callback_add(m_ewkView, "topcontrol,moved", __top_controls_moved_cb, this);
+    evas_object_smart_callback_add(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+
+    ewk_view_did_change_theme_color_callback_set(m_ewkView, __theme_color_changed, this);
 }
 
 void WebView::unregisterCallbacks()
@@ -252,6 +312,9 @@ void WebView::unregisterCallbacks()
     evas_object_smart_callback_del_full(m_ewkView, "load,finished", __loadFinished, this);
     evas_object_smart_callback_del_full(m_ewkView, "load,progress", __loadProgress, this);
     evas_object_smart_callback_del_full(m_ewkView, "load,error", __loadError, this);
+#if DUMMY_BUTTON
+    evas_object_smart_callback_del_full(m_ewkView, "webview,focus,request", __focusWebView, this);
+#endif
 
     evas_object_smart_callback_del_full(m_ewkView, "title,changed", __titleChanged, this);
     evas_object_smart_callback_del_full(m_ewkView, "url,changed", __urlChanged, this);
@@ -280,6 +343,10 @@ void WebView::unregisterCallbacks()
     ewk_context_vibration_client_callbacks_set(m_ewkContext, NULL, NULL, this);
 
     evas_object_smart_callback_del_full(m_ewkView, "rotate,prepared", __rotate_prepared_cb, this);
+    evas_object_smart_callback_del_full(m_ewkView, "topcontrol,moved", __top_controls_moved_cb, this);
+
+    evas_object_smart_callback_del_full(m_ewkView, "notification,permission,reply", __notification_reply_cb, this);
+    ewk_context_push_message_callback_set(m_ewkContext, nullptr, nullptr);
 }
 
 void WebView::setupEwkSettings()
@@ -288,353 +355,6 @@ void WebView::setupEwkSettings()
     ewk_settings_uses_keypad_without_user_action_set(settings, EINA_FALSE);
 }
 
-std::map<std::string, std::vector<std::string> > WebView::parse_uri(const char *uriToParse)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::string uri = uriToParse;
-    std::map<std::string, std::vector<std::string> > uri_parts;
-    std::string::size_type mainDelimiter;
-    mainDelimiter = uri.find_first_of("?");
-    if (mainDelimiter != std::string::npos) {
-        uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
-        std::string argsString = uri.substr(mainDelimiter+1, std::string::npos);
-        const char *delimiter = "&";
-        std::vector<std::string> argsVector;
-        auto i = 0;
-        auto pos = argsString.find(delimiter);
-        if (pos != std::string::npos) {
-            while (pos != std::string::npos) {
-                argsVector.push_back(argsString.substr(i, pos-i));
-                i = ++pos;
-                pos = argsString.find(delimiter, pos);
-                if (pos == std::string::npos)
-                    argsVector.push_back(argsString.substr(i, argsString.length()));
-            }
-        } else
-            argsVector.push_back(argsString.substr(i, argsString.length()));
-
-        const char *valueDelimiter = "=";
-        const char *itemsDelimiter = ";";
-        for (auto item : argsVector) {
-            pos = item.find(valueDelimiter);
-            if (pos != std::string::npos) {
-                std::string key = item.substr(0, pos);
-                std::string value = item.substr(pos+1, std::string::npos);
-
-                auto pos2 = value.find(itemsDelimiter);
-                auto j = 0;
-                if (pos2 != std::string::npos) {
-                    while (pos2 != std::string::npos) {
-                        uri_parts[key].push_back(value.substr(j, pos2-j));
-                        j = ++pos2;
-                        pos2 = value.find(itemsDelimiter, pos2);
-                        if (pos2 == std::string::npos)
-                            uri_parts[key].push_back(value.substr(j, value.length()));
-                    }
-                } else
-                    uri_parts[key].push_back(value);
-            }
-        }
-    } else {
-        uri_parts["url"].push_back(uri.substr(0, mainDelimiter));
-    }
-    return uri_parts;
-}
-
-Eina_Bool WebView::handle_scheme(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    if (!strncmp(uri, HTTP_SCHEME, strlen(HTTP_SCHEME)))
-        return EINA_FALSE;
-    else if (!strncmp(uri, HTTPS_SCHEME, strlen(HTTPS_SCHEME)))
-        return EINA_FALSE;
-    else if (!strncmp(uri, FILE_SCHEME, strlen(FILE_SCHEME)))
-        return EINA_FALSE;
-    else if (!strncmp(uri, TIZENSTORE_SCHEME, strlen(TIZENSTORE_SCHEME))) {
-        launch_tizenstore(uri);
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, MAILTO_SCHEME, strlen(MAILTO_SCHEME))) {
-        launch_email(uri);
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, TEL_SCHEME, strlen(TEL_SCHEME))) {
-        launch_dialer(uri);
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, TELTO_SCHEME, strlen(TELTO_SCHEME))) {
-        std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(TELTO_SCHEME));
-        launch_dialer(request_uri.c_str());
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, CALLTO_SCHEME, strlen(CALLTO_SCHEME))) {
-        std::string request_uri = std::string(TEL_SCHEME) + std::string(uri + strlen(CALLTO_SCHEME));
-        launch_dialer(request_uri.c_str());
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, SMS_SCHEME, strlen(SMS_SCHEME))) {
-        launch_message(uri);
-        return EINA_TRUE;
-    }
-    else if (!strncmp(uri, SMSTO_SCHEME, strlen(SMSTO_SCHEME))) {
-        std::string request_uri = std::string(SMS_SCHEME) + std::string(uri + strlen(SMSTO_SCHEME));
-        launch_message(request_uri.c_str());
-        return EINA_TRUE;
-    }
-
-    return EINA_FALSE;
-}
-
-Eina_Bool WebView::launch_email(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
-    app_control_h app_control = NULL;
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
-        return EINA_FALSE;
-    }
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
-        BROWSER_LOGE("Fail to app_control_set_operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    auto it = uri_parts.find("url");
-    if (it != uri_parts.end()) {
-        if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_set_uri");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    } else
-        return EINA_FALSE;
-
-    it = uri_parts.find("subject");
-    if (it != uri_parts.end()) {
-        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    it = uri_parts.find("body");
-    if (it != uri_parts.end()) {
-        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    it = uri_parts.find("cc");
-    if (it != uri_parts.end()) {
-        size_t size = it->second.size();
-        const char* cc[size];
-        int i = 0;
-        for(auto item : it->second) {
-            cc[i] = item.c_str();
-            ++i;
-        }
-        if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_CC, cc, size) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data_array");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    it = uri_parts.find("bcc");
-    if (it != uri_parts.end()) {
-        size_t size = it->second.size();
-        const char* bcc[size];
-        int i = 0;
-        for(auto item : it->second) {
-            bcc[i] = item.c_str();
-            ++i;
-        }
-        if (app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_BCC, bcc, size) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data_array");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("Fail to app_control_send_launch_request");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_contact(const char *uri, const char *protocol)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
-    app_control_h app_control = NULL;
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("Fail to create app_control handle");
-        return EINA_FALSE;
-    }
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_ADD) < 0) {
-        BROWSER_LOGE("Fail to app_control_set_operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_set_mime(app_control, "application/vnd.tizen.contact") < 0) {
-        BROWSER_LOGE("Fail to app_control_set_mime");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    auto it = uri_parts.find("url");
-    if (it != uri_parts.end()) {
-        if (!strcmp(protocol, "tel")) {
-            if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_PHONE,
-                                           it->second.front().c_str()) < 0) {
-                BROWSER_LOGE("Fail to app_control_add_extra_data");
-                app_control_destroy(app_control);
-                return EINA_FALSE;
-            }
-        } else if (strcmp(protocol, "mailto") == 0) {
-            if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_EMAIL,
-                                           it->second.front().c_str()) < 0) {
-                BROWSER_LOGE("Fail to app_control_add_extra_data");
-                app_control_destroy(app_control);
-                return EINA_FALSE;
-            }
-        } else
-            BROWSER_LOGE("Not supported protocol!");
-    }
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("Fail to launch app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_dialer(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    app_control_h app_control = NULL;
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("Fail to create app_control handle");
-        return EINA_FALSE;
-    }
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_DIAL) < 0) {
-        BROWSER_LOGE("Fail to app_control_set_operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_set_uri(app_control, uri) < 0) {
-        BROWSER_LOGE("app_control_set_uri is failed.");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("Fail to launch app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_message(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    std::map<std::string, std::vector<std::string> >uri_parts = this->parse_uri(uri);
-
-    app_control_h app_control = NULL;
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("Fail to create app_control handle");
-        return EINA_FALSE;
-    }
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE) < 0) {
-        BROWSER_LOGE("Fail to set app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    auto it = uri_parts.find("url");
-    if (it != uri_parts.end()) {
-        if (app_control_set_uri(app_control, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_set_uri");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    else
-        return EINA_FALSE;
-
-    it = uri_parts.find("subject");
-    if (it != uri_parts.end()) {
-        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_SUBJECT, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    it = uri_parts.find("body");
-    if (it != uri_parts.end()) {
-        if (app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, it->second.front().c_str()) < 0) {
-            BROWSER_LOGE("Fail to app_control_add_extra_data");
-            app_control_destroy(app_control);
-            return EINA_FALSE;
-        }
-    }
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("Fail to launch app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
-Eina_Bool WebView::launch_tizenstore(const char *uri)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
-    app_control_h app_control = NULL;
-    if (app_control_create(&app_control) < 0) {
-        BROWSER_LOGE("Fail to create app_control handle");
-        return EINA_FALSE;
-    }
-    if (!app_control) {
-        BROWSER_LOGE("Fail to create app_control handle");
-        return EINA_FALSE;
-    }
-    if (app_control_set_operation(app_control, APP_CONTROL_OPERATION_VIEW) < 0) {
-        BROWSER_LOGE("Fail to set app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_set_uri(app_control, uri) < 0) {
-        BROWSER_LOGE("Fail to set uri operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_set_app_id(app_control, TIZENSTORE_APP_ID) < 0) {
-        BROWSER_LOGE("Fail to app_control_set_app_id");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    if (app_control_send_launch_request(app_control, NULL, NULL) < 0) {
-        BROWSER_LOGE("Fail to launch app_control operation");
-        app_control_destroy(app_control);
-        return EINA_FALSE;
-    }
-    app_control_destroy(app_control);
-
-    return EINA_TRUE;
-}
-
 Evas_Object * WebView::getLayout()
 {
     return m_ewkView;
@@ -643,11 +363,7 @@ Evas_Object * WebView::getLayout()
 #if !DUMMY_BUTTON
 Evas_Object * WebView::getWidget()
 {
-#ifdef DENABLE_CHROMIUM_EWK_FEATURE
     return ewk_view_widget_get(m_ewkView);
-#else
-    return nullptr;
-#endif
 }
 #endif
 
@@ -665,93 +381,107 @@ std::string WebView::getURI(void)
     return fromChar(ewk_view_url_get(m_ewkView));
 }
 
-#if PWA
 void WebView::requestManifest(void)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    ewk_view_request_manifest(m_ewkView, dataSetManifest, this);
+    ewk_view_request_manifest(m_ewkView, __setManifestData, this);
 }
 
-void WebView::dataSetManifest(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void* data)
+void WebView::handleManifest()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    for (const auto &type : m_manifestVector) {
+        switch (type) {
+            case ManifestType::QUICKACCESS_MANIFEST:
+                BROWSER_LOGD("Quickaccess manifest - not implemented");
+                break;
+            case ManifestType::THEME_MANIFEST:
+                BROWSER_LOGD("Quickaccess manifest - not implemented");
+                break;
+            case ManifestType::PWA_MANIFEST:
+                setPWAData();
+                break;
+            default:
+                BROWSER_LOGD("Bad manifest type");
+                break;
+        }
+    }
+    m_manifestVector.clear();
+}
 
-    if (view && data) {
-        WebView * self = reinterpret_cast<WebView *>(data);
+void WebView::setPWAData()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    s_name = m_manifestData.name;
 
-        if (manifest) {
-            uint8_t* theme_r = nullptr; uint8_t* theme_g = nullptr;
-            uint8_t* theme_b = nullptr; uint8_t* theme_a = nullptr;
-            uint8_t* bg_r = nullptr; uint8_t* bg_g = nullptr;
-            uint8_t* bg_b = nullptr; uint8_t* bg_a = nullptr;
-
-            const char* short_name(ewk_manifest_short_name_get(manifest));
-            const char* name(ewk_manifest_name_get(manifest));
-            const char* start_url(ewk_manifest_start_url_get(manifest));
-            const char* icon_src(ewk_manifest_icons_src_get(manifest, 0));
-            int orientation_type = ewk_manifest_orientation_type_get(manifest);
-            int display_mode = ewk_manifest_web_display_mode_get(manifest);
-            long theme_color = ewk_manifest_theme_color_get(manifest, theme_r, theme_g, theme_b, theme_a);
-            long background_color = ewk_manifest_background_color_get(manifest, bg_r, bg_g, bg_b, bg_a);
-            size_t icon_count = ewk_manifest_icons_count_get(manifest);
-
-            std::string str_short_name = "";
-            std::string str_icon_src = "";
-
-            if (short_name)
-                str_short_name = short_name;
-            if (name)
-                s_name = name;
-            if (start_url)
-                s_start_url = start_url;
-            if (icon_src)
-                str_icon_src = icon_src;
-
-            std::string retVal("browser_shortcut:://");
-            retVal.append("pwa_shortName:"); retVal.append(str_short_name.c_str()); retVal.append(",");
-            retVal.append("pwa_name:"); retVal.append(s_name.c_str()); retVal.append(",");
-            retVal.append("pwa_uri:"); retVal.append(s_start_url.c_str()); retVal.append(",");
-            retVal.append("pwa_orientation:"); retVal.append(std::to_string(orientation_type)); retVal.append(",");
-            retVal.append("pwa_displayMode:"); retVal.append(std::to_string(display_mode)); retVal.append(",");
-            retVal.append("pwa_themeColor:"); retVal.append(std::to_string(theme_color)); retVal.append(",");
-            retVal.append("theme_r:"); retVal.append(std::to_string((int)theme_r)); retVal.append(",");
-            retVal.append("theme_g:"); retVal.append(std::to_string((int)theme_g)); retVal.append(",");
-            retVal.append("theme_b:"); retVal.append(std::to_string((int)theme_b)); retVal.append(",");
-            retVal.append("theme_a:"); retVal.append(std::to_string((int)theme_a)); retVal.append(",");
-            retVal.append("pwa_backgroundColor:"); retVal.append(std::to_string(background_color)); retVal.append(",");
-            retVal.append("bg_r:"); retVal.append(std::to_string((int)bg_r)); retVal.append(",");
-            retVal.append("bg_g:"); retVal.append(std::to_string((int)bg_g)); retVal.append(",");
-            retVal.append("bg_b:"); retVal.append(std::to_string((int)bg_b)); retVal.append(",");
-            retVal.append("bg_a:"); retVal.append(std::to_string((int)bg_a)); retVal.append(",");
-            retVal.append("icon_count:"); retVal.append(std::to_string(icon_count)); retVal.append(",");
-            retVal.append("icon_src:"); retVal.append(str_icon_src.c_str()); retVal.append(",");
-
-            BROWSER_LOGD("[%s:%d] retVal : %s", __PRETTY_FUNCTION__, __LINE__, retVal.c_str());
-            s_pwaData = retVal;
-
-            size_t len = strlen(icon_src);
-            auto result = str_icon_src.substr(str_icon_src.find_last_of("/"), len);
-            s_icon = DOWNLOAD_PATH + result;
-            self->request_file_download(icon_src, s_icon, __download_result_cb, NULL);
-        } else {
-            s_pwaData = "";
-            makeShortcut(self->getTitle(), self->getURI(), "");
-        }
-        BROWSER_LOGD("[%s:%d] dataSetManifest callback function end!", __PRETTY_FUNCTION__, __LINE__);
+    CURL *curl = curl_easy_init();
+    char* text;
+    if (!curl) {
+        BROWSER_LOGE("[%s:%d] CURL not initialized", __PRETTY_FUNCTION__, __LINE__);
+        return;
     }
+
+    std::string str_icon_src = m_manifestData.icons.begin()->src;
+    auto result = str_icon_src.substr(str_icon_src.find_last_of("/"), str_icon_src.length());
+    s_icon = DOWNLOAD_PATH + result;
+    request_file_download(m_manifestData.icons.begin()->src, s_icon, __download_result_cb, nullptr);
+
+    if (m_manifestData.m_push_id.empty())
+        BROWSER_LOGW("[%s:%d] unknown Push ID value!", __PRETTY_FUNCTION__, __LINE__);
+
+    auto id = installPWA(m_manifestData.name, m_manifestData.m_push_id, m_manifestData.short_name);
+    if (!id) {
+        BROWSER_LOGE("[%s:%d] unknown installPWA value!", __PRETTY_FUNCTION__, __LINE__);
+        curl_easy_cleanup(curl);
+        return;
+    }
+
+    std::string retVal("multi-instance-shortcut://tizen.org/shortcut/multi-instance?");
+    retVal += "id=" + m_manifestData.short_name + std::to_string(*id)
+        + "&icon=" + std::string(text = curl_easy_escape(curl, s_icon.c_str(), s_icon.length()));
+    curl_free(text);
+    retVal += "&name=" + s_name
+        + "&uri=" + std::string(text = curl_easy_escape(curl,m_manifestData.start_url.c_str(),
+            m_manifestData.start_url.length()));
+    curl_free(text);
+    retVal += "&pwa_shortName=" + m_manifestData.short_name
+        + "&pwa_name=" + m_manifestData.name
+        + "&pwa_uri=" + std::string(text = curl_easy_escape(curl, m_manifestData.start_url.c_str(),
+            m_manifestData.start_url.length()));
+    curl_free(text);
+    retVal += "&pwa_orientation=" + std::to_string(static_cast<int>(m_manifestData.orientation_type))
+        + "&pwa_displayMode=" + std::to_string(static_cast<int>(m_manifestData.web_display_mode))
+        + "&pwa_themeColor=" + std::to_string(m_manifestData.theme_color.colorExist)
+        + "&pwa_theme_r=" + std::to_string(m_manifestData.theme_color.r)
+        + "&pwa_theme_g=" + std::to_string(m_manifestData.theme_color.g)
+        + "&pwa_theme_b=" + std::to_string(m_manifestData.theme_color.b)
+        + "&pwa_theme_a=" + std::to_string(m_manifestData.theme_color.a)
+        + "&pwa_backgroundColor=" + std::to_string(m_manifestData.background_color.colorExist)
+        + "&pwa_bg_r=" + std::to_string(m_manifestData.background_color.r)
+        + "&pwa_bg_g=" + std::to_string(m_manifestData.background_color.g)
+        + "&pwa_bg_b=" + std::to_string(m_manifestData.background_color.b)
+        + "&pwa_bg_a=" + std::to_string(m_manifestData.background_color.a)
+        + "&pwa_icon_count=" + std::to_string(m_manifestData.icons_count)
+        + "&pwa_icon_src=" + std::string(text = curl_easy_escape(curl,
+            m_manifestData.icons.begin()->src.c_str(), m_manifestData.icons.begin()->src.length()));
+    curl_free(text);
+    curl_easy_cleanup(curl);
+
+    BROWSER_LOGD("[%s:%d] retVal : %s", __PRETTY_FUNCTION__, __LINE__, retVal.c_str());
+    storePWAShortcut(*id, retVal);
+    s_pwaData = retVal;
 }
 
 void WebView::makeShortcut(const std::string& name, const std::string& pwaData, const std::string& icon)
 {
-    if (shortcut_add_to_home(name.c_str(),LAUNCH_BY_URI,pwaData.c_str(),
-            icon.c_str(),0,result_cb,nullptr) != SHORTCUT_ERROR_NONE)
+    if (shortcut_add_to_home(name.c_str(), LAUNCH_BY_URI, pwaData.c_str(),
+            icon.c_str(), 0, result_cb, nullptr) != SHORTCUT_ERROR_NONE)
         BROWSER_LOGE("[%s:%d] Fail to add to homescreen", __PRETTY_FUNCTION__, __LINE__);
     else
         BROWSER_LOGE("[%s:%d] Success to add to homescreen", __PRETTY_FUNCTION__, __LINE__);
 }
 
 int WebView::result_cb(int ret, void *data) {
-
     if (data) {
         BROWSER_LOGD("[%s:%d] ret : %d, data : %s", __PRETTY_FUNCTION__, __LINE__, ret, data);
     } else {
@@ -760,22 +490,24 @@ int WebView::result_cb(int ret, void *data) {
     return 0;
 }
 
-void WebView::request_file_download(const char *uri, const std::string& file_path, download_finish_callback cb, void *data)
+void WebView::request_file_download(const std::string& uri, const std::string& file_path, download_finish_callback cb, void *data)
 {
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
-    BROWSER_LOGD("uri = [%s], file_path = [%s]", uri, file_path.c_str());
+    BROWSER_LOGD("uri = [%s], file_path = [%s]", uri.c_str(), file_path.c_str());
 
     SoupSession *soup_session = nullptr;
     SoupMessage *soup_msg = nullptr;
+    char *s_filePath = strdup(file_path.c_str());
 
     soup_session = soup_session_async_new();
     g_object_set(soup_session, SOUP_SESSION_TIMEOUT, 15, nullptr);
 
-    soup_msg = soup_message_new("GET", uri);
-    download_request *request = new(std::nothrow) download_request(strdup(file_path.c_str()), cb, data);
+    soup_msg = soup_message_new("GET", uri.c_str());
+    download_request *request = new(std::nothrow) download_request(s_filePath, cb, data);
     soup_session_queue_message(soup_session, soup_msg, __file_download_finished_cb, static_cast<void*>(request));
 
     g_object_unref(soup_session);
+    free(s_filePath);
 }
 
 void WebView::__file_download_finished_cb(SoupSession *session, SoupMessage *msg, gpointer data)
@@ -806,7 +538,6 @@ void WebView::__download_result_cb(const std::string& file_path, void *data)
     BROWSER_LOGD("[%s:%d] file_path = [%s], data = [%s]", file_path.c_str(), data);
     BROWSER_LOGD("[%s:%d] complete !", __PRETTY_FUNCTION__, __LINE__);
 }
-#endif
 
 std::string WebView::getTitle(void)
 {
@@ -836,9 +567,9 @@ void WebView::resume()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(m_ewkView);
-
     ewk_view_resume(m_ewkView);
     m_suspended = false;
+    changeUIColor(m_themeColor.r, m_themeColor.g, m_themeColor.b, m_themeColor.a);
 }
 
 void WebView::stopLoading(void)
@@ -853,12 +584,10 @@ void WebView::reload(void)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     m_isLoading = true;
-    if(m_loadError)
-    {
+    if (m_loadError) {
         m_loadError = false;
         ewk_view_url_set(m_ewkView, ewk_view_url_get(m_ewkView));
-    }
-    else
+    } else
         ewk_view_reload(m_ewkView);
 }
 
@@ -1005,7 +734,7 @@ void WebView::__newWindowRequest(void *data, Evas_Object *, void *out)
     <
         basic_webengine::AbstractWebEngine,tizen_browser::core::AbstractService
     >
-    (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+    (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
     M_ASSERT(m_webEngine);
 
     /// \todo: Choose newly created tab.
@@ -1033,10 +762,71 @@ void WebView::__closeWindowRequest(void *data, Evas_Object *, void *)
     std::shared_ptr<AbstractWebEngine> m_webEngine =
                 std::dynamic_pointer_cast
                 <basic_webengine::AbstractWebEngine,tizen_browser::core::AbstractService>
-                (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice"));
+                (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webengineservice", "libWebEngineService.so"));
     m_webEngine->closeTab(self->getTabId());
 }
 
+void WebView::__setManifestData(Evas_Object *view, Ewk_View_Request_Manifest *manifest, void *data)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (view && data) {
+        WebView *self = reinterpret_cast<WebView *>(data);
+
+        if (manifest) {
+            const char *tmp;
+            self->m_manifestData.m_push_id = ewk_manifest_push_sender_id_get(manifest);
+            self->m_manifestData.short_name = ((tmp = ewk_manifest_short_name_get(manifest)) ? tmp : "");
+            self->m_manifestData.name = ((tmp = ewk_manifest_name_get(manifest)) ? tmp : "");
+            self->m_manifestData.start_url = ((tmp = ewk_manifest_start_url_get(manifest)) ? tmp : "");
+            self->m_manifestData.orientation_type = ewk_manifest_orientation_type_get(manifest);
+            self->m_manifestData.web_display_mode = ewk_manifest_web_display_mode_get(manifest);
+            self->m_manifestData.theme_color.colorExist = ewk_manifest_theme_color_get(
+                manifest,
+                &self->m_manifestData.theme_color.r,
+                &self->m_manifestData.theme_color.g,
+                &self->m_manifestData.theme_color.b,
+                &self->m_manifestData.theme_color.a);
+            self->m_manifestData.background_color.colorExist = ewk_manifest_background_color_get(
+                manifest,
+                &self->m_manifestData.background_color.r,
+                &self->m_manifestData.background_color.g,
+                &self->m_manifestData.background_color.b,
+                &self->m_manifestData.background_color.a);
+
+            self->m_manifestData.icons_count = ewk_manifest_icons_count_get(manifest);
+            self->m_manifestData.icons.clear();
+            for (size_t iconNumber = 0; iconNumber < self->m_manifestData.icons_count; iconNumber++) {
+                ManifestData::_icon icon;
+                icon.src = (( tmp = ewk_manifest_icons_src_get(manifest, iconNumber)) ? tmp : "");
+                icon.type = (( tmp = ewk_manifest_icons_type_get(manifest, iconNumber)) ? tmp : "");
+                icon.sizes_count = ewk_manifest_icons_sizes_count_get(manifest, iconNumber);
+                for (size_t sizeNumber = 0; sizeNumber < icon.sizes_count; sizeNumber++) {
+                    ManifestData::_icon::_size size;
+                    size.width = ewk_manifest_icons_width_get(manifest, iconNumber, sizeNumber);
+                    size.height = ewk_manifest_icons_height_get(manifest, iconNumber, sizeNumber);
+                    icon.sizes.push_back(size);
+                }
+                self->m_manifestData.icons.push_back(icon);
+            }
+
+            if (!self->m_manifestData.name.empty() && !self->m_manifestData.start_url.empty()) {
+                self->m_manifestReady = true;
+                self->handleManifest();
+            } else {
+                BROWSER_LOGW("No Name and url in manifest!");
+            }
+
+        } else {
+            BROWSER_LOGW("No manifest for webview!");
+            std::string uri=self->getURI();
+             shortcut_add_to_home(self->m_title.c_str(), LAUNCH_BY_URI, uri.c_str(),nullptr, 0, result_cb, nullptr);
+        }
+    } else {
+        BROWSER_LOGW("No View or data!");
+    }
+}
+
 void WebView::__loadStarted(void * data, Evas_Object * /* obj */, void * /* event_info */)
 {
     WebView * self = reinterpret_cast<WebView *>(data);
@@ -1045,6 +835,8 @@ void WebView::__loadStarted(void * data, Evas_Object * /* obj */, void * /* even
 
     self->m_isLoading = true;
     self->loadStarted();
+    ewk_view_top_controls_height_set(self->m_ewkView, URL_BAR_HEIGHT, BOTTOM_BAR_HEIGHT);
+    ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
 }
 
 void WebView::__loadFinished(void * data, Evas_Object * /* obj */, void * /* event_info */)
@@ -1059,9 +851,15 @@ void WebView::__loadFinished(void * data, Evas_Object * /* obj */, void * /* eve
     self->loadFinished();
     self->loadProgress(self->m_loadProgress);
 
-    self->captureSnapshot(boost::any_cast<int>(config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH)),
-            boost::any_cast<int>(tizen_browser::config::Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT)),
+    self->captureSnapshot(boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_WIDTH)),
+            boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::HISTORY_TAB_SERVICE_THUMB_HEIGHT)),
             true, tools::SnapshotType::ASYNC_LOAD_FINISHED);
+
+    self->changeUIColor(
+        self->m_themeColor.r,
+        self->m_themeColor.g,
+        self->m_themeColor.b,
+        self->m_themeColor.a);
 }
 
 void WebView::__loadProgress(void * data, Evas_Object * /* obj */, void * event_info)
@@ -1100,6 +898,19 @@ void WebView::__loadError(void* data, Evas_Object * obj, void* ewkError)
     }
 }
 
+#if DUMMY_BUTTON
+void WebView::__focusWebView(void *data, Evas_Object * /* obj */, void * /*event_info */)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    if (data) {
+        auto *self = static_cast<WebView *>(data);
+        self->focusWebView();
+    } else
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+#endif
+
 void WebView::__titleChanged(void * data, Evas_Object * obj, void * /* event_info */)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1115,6 +926,7 @@ void WebView::__urlChanged(void * data, Evas_Object * /* obj */, void * /* event
     WebView * self = reinterpret_cast<WebView *>(data);
     BROWSER_LOGD("URL changed for tab: %s", self->getTabId().toString().c_str());
     self->uriChanged(self->getURI());
+    self->m_manifestReady = false;
 }
 
 void WebView::__backForwardListChanged(void * data, Evas_Object * /* obj */, void * /* event_info */)
@@ -1143,16 +955,18 @@ void WebView::__faviconChanged(void* data, Evas_Object*, void*)
 
 void WebView::__IMEClosed(void* data, Evas_Object*, void*)
 {
-    BROWSER_LOGD("%s", __func__);
-    WebView * self = reinterpret_cast<WebView *>(data);
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto self = static_cast<WebView*>(data);
     self->IMEStateChanged(false);
+    self->setIMEState(false);
 }
 
 void WebView::__IMEOpened(void* data, Evas_Object*, void*)
 {
-    BROWSER_LOGD("%s", __func__);
-    WebView * self = reinterpret_cast<WebView *>(data);
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    auto self = static_cast<WebView*>(data);
     self->IMEStateChanged(true);
+    self->setIMEState(true);
 }
 
 void WebView::__load_provisional_started(void* data, Evas_Object*, void*)
@@ -1166,8 +980,6 @@ void WebView::__load_provisional_redirect(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     WebView * self = reinterpret_cast<WebView*>(data);
-    if (!self->getRedirectedURL().empty())
-        self->redirectedWebPage(self->getRedirectedURL(), self->getURI());
     self->setRedirectedURL("");
 }
 
@@ -1367,7 +1179,7 @@ void WebView::_show_context_menu_text_only(Ewk_Context_Menu *menu)
     }
     /* Web Search*/
     if (text_selected == true) {
-        ewk_context_menu_item_append_as_action(menu, EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB, _("IDS_BR_OPT_WEB_SEARCH"), true);
+        ewk_context_menu_item_append_as_action(menu, CUSTOM_CONTEXT_MENU_ITEM_SEARCH, _("IDS_BR_OPT_WEB_SEARCH"), true);
     }
     /* Find on page*/
     if (text_selected == true) {
@@ -1506,9 +1318,9 @@ void WebView::__contextmenu_selected_cb(void *data, Evas_Object */*obj*/, void *
     const char *selected_text = ewk_view_text_selection_text_get(self->m_ewkView);
 
     if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_EMAIL) {
-        self->handle_scheme(link_url);
+        handle_scheme(link_url);
     } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_CALL) {
-        self->handle_scheme(link_url);
+        handle_scheme(link_url);
     } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_FIND_ON_PAGE) {
         self->findOnPage(selected_text);
     } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_MESSAGE) {
@@ -1517,20 +1329,21 @@ void WebView::__contextmenu_selected_cb(void *data, Evas_Object */*obj*/, void *
             std::string source = std::string(link_url);
             while ((pos = source.find(TEL_SCHEME)) != std::string::npos)
                 source.replace(pos, strlen(TEL_SCHEME), SMS_SCHEME);
-            self->handle_scheme(source.c_str());
+            handle_scheme(source.c_str());
         }
     } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEND_ADD_TO_CONTACT) {
         if (link_url && !strncmp(TEL_SCHEME, link_url, strlen(TEL_SCHEME))) {
-            self->launch_contact(link_url + strlen(TEL_SCHEME), "tel");
+            launch_contact(link_url + strlen(TEL_SCHEME), "tel");
         } else if (link_url && !strncmp(MAILTO_SCHEME, link_url, strlen(MAILTO_SCHEME))) {
-            size_t source_end_pos = 0;
             std::string source = std::string(link_url);
             if (source.find("?") != std::string::npos) {
-                source_end_pos = source.find("?");
+                size_t source_end_pos = source.find("?");
                 source = source.substr(0, source_end_pos);
             }
-            self->launch_contact(source.c_str() + strlen(MAILTO_SCHEME), "mailto");
+            launch_contact(source.c_str() + strlen(MAILTO_SCHEME), "mailto");
         }
+    } else if (tag == CUSTOM_CONTEXT_MENU_ITEM_SEARCH) {
+        self->searchInNewTab(selected_text, self->m_desktopMode, TabOrigin(self->m_tabId.get()));
     }
 }
 
@@ -1541,6 +1354,7 @@ void WebView::__fullscreen_enter_cb(void *data, Evas_Object*, void*)
     auto self = static_cast<WebView*>(data);
     self->m_fullscreen = true;
     self->fullscreenModeSet(self->m_fullscreen);
+    ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_HIDDEN, EWK_TOP_CONTROL_HIDDEN, EINA_TRUE);
 }
 
 void WebView::__fullscreen_exit_cb(void *data, Evas_Object*, void*)
@@ -1550,6 +1364,7 @@ void WebView::__fullscreen_exit_cb(void *data, Evas_Object*, void*)
     auto self = static_cast<WebView*>(data);
     self->m_fullscreen = false;
     self->fullscreenModeSet(self->m_fullscreen);
+    ewk_view_top_controls_state_set(self->m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
 }
 
 void WebView::__rotate_prepared_cb(void * data, Evas_Object *, void *)
@@ -1558,11 +1373,86 @@ void WebView::__rotate_prepared_cb(void * data, Evas_Object *, void *)
     if (data) {
         auto *self = static_cast<WebView *>(data);
         self->rotatePrepared();
+    } else
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+}
+
+void WebView::__top_controls_moved_cb(void* data, Evas_Object*, void* event_info)
+{
+    if (!data || !event_info) {
+        BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+        return;
+    }
+    auto offset = *static_cast<int*>(event_info);
+    auto self = static_cast<WebView*>(data);
+    BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+
+    self->urlbarOffsetSet(offset);
+    self->bottombarOffsetSet(
+        self->m_imeState ?
+            -boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT)) : offset);
+}
+
+void WebView::__notification_reply_cb(void* data, Evas_Object*, void* event_info)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!data || !event_info) {
+        BROWSER_LOGW("[%s] data or even_info = nullptr", __PRETTY_FUNCTION__);
+        return;
+    }
+    auto perm = static_cast< Ewk_Notification_Permission*>(event_info);
+    auto self = static_cast<WebView*>(data);
+    auto id = *self->getPermissionId(perm->origin);
+    if (!id) {
+        auto ret = *self->storePermission(perm->origin, perm->allowed);
+        if (!ret)
+            BROWSER_LOGD("[%s:%d] failed to store permission", __PRETTY_FUNCTION__, __LINE__);
     } else {
-            BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+        auto ret = self->updatePermissionState(id, perm->allowed);
+        if (!ret)
+            BROWSER_LOGD("[%s:%d] failed to update permission", __PRETTY_FUNCTION__, __LINE__);
     }
 }
 
+void WebView::__theme_color_changed(
+    Evas_Object*,
+    int r,
+    int g,
+    int b,
+    int alpha,
+    void* data)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (!data) {
+        BROWSER_LOGD("[%s:%d] no data", __PRETTY_FUNCTION__, __LINE__);
+        return;
+    }
+    BROWSER_LOGD("[%s:%d] changed color to %d %d %d %d", __PRETTY_FUNCTION__, __LINE__, r, g, b, alpha);
+    auto self = static_cast<WebView*>(data);
+    self->m_themeColor = tools::Color(r, g, b, alpha);
+    self->changeUIColor(r, g, b, alpha);
+}
+
+void WebView::setIMEState(const bool& state)
+{
+    int urlBarHeight =
+        boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::URL_BAR_HEIGHT));
+    int bottomBarHeight =
+        boost::any_cast<int>(Config::getInstance().get(CONFIG_KEY::BOTTOM_BAR_HEIGHT));
+    ewk_view_top_controls_height_set(
+        m_ewkView,
+        urlBarHeight,
+        state ? 0 : bottomBarHeight);
+    bottombarOffsetSet(state ? -urlBarHeight : 0);
+
+    m_imeState = state;
+}
+
+bool WebView::getIMEState() const
+{
+    return m_imeState;
+}
+
 void WebView::setFocus()
 {
     ewk_view_focus_set(m_ewkView, EINA_TRUE);
@@ -1575,11 +1465,7 @@ void WebView::clearFocus()
 
 bool WebView::hasFocus() const
 {
-#ifdef DENABLE_CHROMIUM_EWK_FEATURE
     return ewk_view_focus_get(m_ewkView) == EINA_TRUE ? true : false;
-#else
-    return false;
-#endif
 }
 
 double WebView::getZoomFactor() const
@@ -1591,21 +1477,6 @@ double WebView::getZoomFactor() const
     return ewk_view_page_zoom_get(m_ewkView);
 }
 
-void WebView::setZoomFactor(double zoomFactor)
-{
-    if(m_ewkView) {
-        //using zoomFactor = 0 sets zoom "fit to screen"
-
-        if(zoomFactor != getZoomFactor())
-            ewk_view_page_zoom_set(m_ewkView, zoomFactor);
-    }
-}
-
-void WebView::scrollView(const int& dx, const int& dy)
-{
-    ewk_view_scroll_by(m_ewkView, dx, dy);
-}
-
 void WebView::findWord(const char *word, Eina_Bool forward, Evas_Smart_Cb found_cb, void *data)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -1654,6 +1525,17 @@ void WebView::ewkSettingsFormCandidateDataEnabledSet(bool value)
     ewk_settings_form_candidate_data_enabled_set(settings, value);
 }
 
+void WebView::ewkSettingsCookiesEnabledSet(bool value)
+{
+    BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
+    if (value)
+        ewk_cookie_manager_accept_policy_set(
+            ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_ALWAYS);
+    else
+        ewk_cookie_manager_accept_policy_set(
+            ewk_context_cookie_manager_get(ewk_context_default_get()), EWK_COOKIE_ACCEPT_POLICY_NEVER);
+}
+
 void WebView::ewkSettingsAutofillPasswordFormEnabledSet(bool value)
 {
     BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
@@ -1668,10 +1550,6 @@ void WebView::ewkSettingsScriptsCanOpenNewPagesEnabledSet(bool value)
     ewk_settings_scripts_can_open_windows_set(settings, value);
 }
 
-bool WebView::clearTextSelection() const {
-    return ewk_view_text_selection_clear(m_ewkView);
-}
-
 bool WebView::exitFullScreen() const {
     return ewk_view_fullscreen_exit(m_ewkView);
 }
@@ -1682,6 +1560,15 @@ void WebView::ewkSettingsFormProfileDataEnabledSet(bool value)
     ewk_settings_form_profile_data_enabled_set(settings, value);
 }
 
+void WebView::setBarsShown(bool value) const
+{
+    BROWSER_LOGD("[%s:%d:%d] ", __PRETTY_FUNCTION__, __LINE__, value);
+    if (value)
+        ewk_view_top_controls_state_set(m_ewkView, EWK_TOP_CONTROL_BOTH, EWK_TOP_CONTROL_SHOWN, EINA_TRUE);
+    else
+        ewk_view_top_controls_state_set(m_ewkView, EWK_TOP_CONTROL_HIDDEN, EWK_TOP_CONTROL_HIDDEN, EINA_FALSE);
+}
+
 const TabId& WebView::getTabId() {
     return m_tabId;
 }
@@ -1765,28 +1652,29 @@ bool WebView::isDesktopMode() const {
     return m_desktopMode;
 }
 
-void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, void *event_info)
+void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, voidevent_info)
 {
-    WebView *wv = (WebView *)data;
+    auto wv = static_cast<WebView*>(data);
+    ++wv->m_policyCounter;
 
-    Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision *)event_info;
+    Ewk_Policy_Decision* policy_decision = static_cast<Ewk_Policy_Decision*>(event_info);
     Ewk_Policy_Decision_Type policy_type = ewk_policy_decision_type_get(policy_decision);
 
-    wv->m_status_code = ewk_policy_decision_response_status_code_get(policy_decision);
-    wv->m_is_error_page = EINA_FALSE;
-
     switch (policy_type) {
     case EWK_POLICY_DECISION_USE:
         BROWSER_LOGD("[%s:%d] policy_use", __PRETTY_FUNCTION__, __LINE__);
         ewk_policy_decision_use(policy_decision);
+        if (wv->m_policyCounter)
+            wv->isPolicyUse(wv->m_policyCounter);
         break;
 
     case EWK_POLICY_DECISION_DOWNLOAD: {
         BROWSER_LOGD("[%s:%d] policy_download", __PRETTY_FUNCTION__, __LINE__);
+        evas_object_smart_callback_call(wv->m_ewkView, "close,window", nullptr);
         const char *uri = ewk_policy_decision_url_get(policy_decision);
         const char *content_type = ewk_policy_decision_response_mime_get(policy_decision);
         const Eina_Hash *headers = ewk_policy_decision_response_headers_get(policy_decision);
-        app_control_h app_control = NULL;
+        app_control_h app_control = nullptr;
         if (app_control_create(&app_control) < 0) {
             BROWSER_LOGE("[%s:%d] Fail to app_control_create", __PRETTY_FUNCTION__, __LINE__);
             return;
@@ -1814,14 +1702,14 @@ void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, v
 
         const char *content_dispotision = (const char *)eina_hash_find(headers, "Content-Disposition");
         BROWSER_LOGD("[%s:%d] Content-disposition: %s", __PRETTY_FUNCTION__, __LINE__, content_dispotision);
-        if (content_dispotision && (strstr(content_dispotision, "attachment") != NULL)){
+        if (content_dispotision && (strstr(content_dispotision, "attachment") != nullptr)){
             wv->m_downloadControl->handle_download_request(uri, content_type);
             app_control_destroy(app_control);
             ewk_policy_decision_ignore(policy_decision);
             break;
          }
 
-        if (app_control_send_launch_request(app_control, NULL, NULL) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
+        if (app_control_send_launch_request(app_control, nullptr, nullptr) == APP_CONTROL_ERROR_APP_NOT_FOUND) {
             BROWSER_LOGD("[%s:%d] app_control_send_launch_request returns APP_CONTROL_ERROR_APP_NOT_FOUND", __PRETTY_FUNCTION__, __LINE__);
             wv->m_downloadControl->handle_download_request(uri, content_type);
          }
@@ -1840,14 +1728,14 @@ void WebView::__policy_response_decide_cb(void *data, Evas_Object * /* obj */, v
 void WebView::__policy_navigation_decide_cb(void *data, Evas_Object * /*obj*/, void *event_info)
 {
     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
-    WebView *wv = (WebView *)data;
+    auto wv = static_cast<WebView*>(data);
 
     Ewk_Policy_Decision *policy_decision = (Ewk_Policy_Decision *)event_info;
     const char *uri = ewk_policy_decision_url_get(policy_decision);
     wv->m_loadingURL = std::string(uri);
     BROWSER_LOGD("uri = [%s]", uri);
 
-    Eina_Bool is_scheme_handled = wv->handle_scheme(uri);
+    Eina_Bool is_scheme_handled = handle_scheme(uri);
 
     if (is_scheme_handled) {
         BROWSER_LOGD("Scheme handled");
index 9325366..c7b9a9b 100755 (executable)
 
 #include <boost/signals2/signal.hpp>
 #include <string>
+#include <vector>
 #include <Evas.h>
-#include <ecore-1/Ecore.h>
 
-#include <EWebKit.h>
 #include <EWebKit_internal.h>
 #include "browser_config.h"
-#include "Config.h"
-#include "BrowserImage.h"
 #include "SnapshotType.h"
 #include "AbstractWebEngine/TabId.h"
 #include "AbstractWebEngine/WebConfirmation.h"
-#include "AbstractWebEngine/TabOrigin.h"
+#include "AbstractWebEngine.h"
+#include "GeneralTools.h"
 
-#include "DownloadControl/DownloadControl.h"
 #include <app_control.h>
 #include <app.h>
 #include "AbstractRotatable.h"
-
-#if PWA
-#include <glib.h>
 #include <libsoup/soup.h>
-#endif
 
-typedef enum _context_menu_type {
+enum context_menu_type {
     TEXT_ONLY = 0,
     INPUT_FIELD,
     TEXT_LINK,
@@ -52,9 +45,9 @@ typedef enum _context_menu_type {
     TEL_LINK,
     TEXT_IMAGE_LINK,
     UNKNOWN_MENU
-} context_menu_type;
+};
 
-typedef enum _custom_context_menu_item_tag {
+enum custom_context_menu_item_tag {
     CUSTOM_CONTEXT_MENU_ITEM_BASE_TAG = EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG,
     CUSTOM_CONTEXT_MENU_ITEM_FIND_ON_PAGE,
     CUSTOM_CONTEXT_MENU_ITEM_SHARE,
@@ -64,23 +57,68 @@ typedef enum _custom_context_menu_item_tag {
     CUSTOM_CONTEXT_MENU_ITEM_SEND_MESSAGE,
     CUSTOM_CONTEXT_MENU_ITEM_SEND_EMAIL,
     CUSTOM_CONTEXT_MENU_ITEM_SEND_ADD_TO_CONTACT,
-} custom_context_menu_item_tag;
+};
+class DownloadControl;
 
 namespace tizen_browser {
+
+namespace tools {
+class BrowserImage;
+}
+
+enum class ManifestType {
+    PWA_MANIFEST,
+    QUICKACCESS_MANIFEST,
+    THEME_MANIFEST
+};
+
+struct ManifestData {
+    ManifestData() = default;
+    std::string short_name;
+    std::string name;
+    std::string start_url;
+    Ewk_View_Orientation_Type orientation_type;
+    Ewk_View_Web_Display_Mode web_display_mode;
+    struct _color {
+        _color() = default;
+        unsigned colorExist;
+        uint8_t r, g, b, a;
+    } theme_color, background_color;
+    size_t icons_count;
+    struct _icon {
+        _icon() = default;
+        std::string src;
+        std::string type;
+        size_t sizes_count;
+        struct _size {
+            _size() = default;
+            int width;
+            int height;
+        };
+        std::vector<_size> sizes;
+    };
+    std::vector<_icon> icons;
+    std::string m_push_id;
+};
+
 namespace basic_webengine {
+
+class TabOrigin;
+
 namespace webengine_service {
 
 using download_finish_callback = void (*)(const std::string& file_path, void *data);
+using ManifestTypesVector = std::vector<ManifestType>;
 
 class WebView
-        : public tizen_browser::interfaces::AbstractRotatable
+    : public tizen_browser::interfaces::AbstractRotatable
 {
 public:
     WebView(Evas_Object *, TabId, const std::string& title, bool incognitoMode);
     virtual ~WebView();
     void init(bool desktopMode, TabOrigin origin);
 
-    virtual void orientationChanged() override;
+    void orientationChanged() override;
 
     void setURI(const std::string &);
     std::string getURI(void);
@@ -105,18 +143,22 @@ public:
     bool isLoading();
     bool isLoadError() const;
 
-#if PWA
     void requestManifest(void);
-    void request_file_download(const char *uri, const std::string& file_path, download_finish_callback cb, void *data);
+    bool isManifestReady() { return m_manifestReady; }
+    void handleManifest();
+    void addManifestTypeToHandle(const ManifestType &type) { m_manifestVector.push_back(type); }
+
+    void setPWAData();
+    void request_file_download(const std::string& uri, const std::string& file_path, download_finish_callback cb, void *data);
 
     struct download_request
     {
     public:
         download_request(char* file_path_ = nullptr, download_finish_callback cb_ = nullptr, void* data_ = nullptr)
-    : file_path(file_path_),
-      cb(cb_),
-      data(data_)
-    {}
+            : file_path(file_path_)
+            , cb(cb_)
+            , data(data_)
+        {}
 
         ~download_request() {}
 
@@ -128,7 +170,6 @@ public:
         download_request& operator=(const download_request&);
         download_request(const download_request&);
     };
-#endif
 
     std::map<std::string, std::vector<std::string> > parse_uri(const char *uriToParse);
 
@@ -140,6 +181,10 @@ public:
 
     std::shared_ptr<tizen_browser::tools::BrowserImage> captureSnapshot(int width, int height, bool async,
             tizen_browser::tools::SnapshotType snapshot_type);
+
+    void setIMEState(const bool& state);
+    bool getIMEState() const;
+
      /**
      * \brief Sets Focus to URI entry.
      */
@@ -160,11 +205,6 @@ public:
      */
     double getZoomFactor() const;
 
-    /**
-     * @brief set zoom factor of website
-     */
-    void setZoomFactor(double zoomFactor);
-
     void clearCache();
     void clearCookies();
     void clearPrivateData();
@@ -206,17 +246,6 @@ public:
      */
     std::shared_ptr<tizen_browser::tools::BrowserImage> getFavicon();
 
-    /**
-     * Sets an absolute scroll of the given view.
-     *
-     * Both values are from zero to the contents size minus the viewport
-     * size.
-     *
-     * @param x horizontal position to scroll
-     * @param y vertical position to scroll
-     */
-    void scrollView(const int& dx, const int& dy);
-
     TabOrigin getOrigin() { return m_origin; }
 
     Ewk_Context* getContext() { return m_ewkContext; }
@@ -252,6 +281,11 @@ public:
     void ewkSettingsFormCandidateDataEnabledSet(bool value);
 
     /**
+     * @brief Set form Cookies data enabled settings flag.
+     */
+    void ewkSettingsCookiesEnabledSet(bool value);
+
+    /**
      * @brief Set autofill password form enabled settings flag.
      */
     void ewkSettingsAutofillPasswordFormEnabledSet(bool value);
@@ -267,11 +301,6 @@ public:
     bool isFullScreen() const { return m_fullscreen; };
 
     /**
-     * @brief Clear text slection return true if some selection was cleared.
-     */
-    bool clearTextSelection() const;
-
-    /**
      * @brief Exit full screen mode, return true if successful.
      */
     bool exitFullScreen() const;
@@ -281,6 +310,11 @@ public:
      */
     void ewkSettingsFormProfileDataEnabledSet(bool value);
 
+    /**
+     * @brief If true bottom and url bar hide while scrolling web page.
+     */
+    void setBarsShown(bool value) const;
+
 // signals
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>)> favIconChanged;
     boost::signals2::signal<void (std::shared_ptr<tizen_browser::tools::BrowserImage>, tizen_browser::tools::SnapshotType snapshot_type)> snapshotCaptured;
@@ -292,6 +326,9 @@ public:
     boost::signals2::signal<void ()> loadStop;
     boost::signals2::signal<void ()> loadError;
     boost::signals2::signal<void (double)> loadProgress;
+#if DUMMY_BUTTON
+    boost::signals2::signal<void ()> focusWebView;
+#endif
 
     boost::signals2::signal<void (bool)> forwardEnableChanged;
     boost::signals2::signal<void (bool)> backwardEnableChanged;
@@ -306,9 +343,22 @@ public:
 
     boost::signals2::signal<void ()> rotatePrepared;
 
-    boost::signals2::signal<void (const std::string&, const std::string&)> redirectedWebPage;
     boost::signals2::signal<void()> unsecureConnection;
     boost::signals2::signal<void(bool)> fullscreenModeSet;
+    boost::signals2::signal<void(float)> urlbarOffsetSet;
+    boost::signals2::signal<void(float)> bottombarOffsetSet;
+    boost::signals2::signal<void(int)> isPolicyUse;
+    boost::signals2::signal<void (const std::string&, bool, const TabOrigin&)> searchInNewTab;
+
+    boost::signals2::signal<void(int,int,int,int)> changeUIColor;
+
+    boost::signals2::signal<unsigned(const std::string&, const std::string&, const std::string&)> installPWA;
+    boost::signals2::signal<void(const unsigned&,const std::string&)> storePWAShortcut;
+    boost::signals2::signal<std::string(const char*, const char* )> pushSignal;
+    boost::signals2::signal<unsigned(const std::string&, const bool&)> storePermission;
+    boost::signals2::signal<unsigned(const std::string&)> getPermissionId;
+    boost::signals2::signal<bool(const int&, const bool&)> updatePermissionState;
+    boost::signals2::signal<std::map<std::string, bool>()> getPermissionsMap;
 
 protected:
     std::string getRedirectedURL() {return m_redirectedURL;};
@@ -321,14 +371,13 @@ private:
 
     static void __newWindowRequest(void * data, Evas_Object *, void *out);
     static void __closeWindowRequest(void * data, Evas_Object *, void *);
+    static void __setManifestData(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void *data);
 
-#if PWA
-    static void dataSetManifest(Evas_Object* view, Ewk_View_Request_Manifest* manifest, void*);
     static int result_cb(int ret, void *data);
     static void makeShortcut(const std::string& name, const std::string& pwaData, const std::string& icon);
     static void __file_download_finished_cb(SoupSession *session, SoupMessage *msg, gpointer data);
     static void __download_result_cb(const std::string& file_path, void *data);
-#endif
+    static void _push_cb(const char *sender_id, const char *, void *data);
 
     context_menu_type _get_menu_type(Ewk_Context_Menu *menu);
     void _customize_context_menu(Ewk_Context_Menu *menu);
@@ -345,19 +394,25 @@ private:
     static void __fullscreen_enter_cb(void *data, Evas_Object *obj, void *event_info);
     static void __fullscreen_exit_cb(void *data, Evas_Object *obj, void *event_info);
     static void __rotate_prepared_cb(void *data, Evas_Object *obj, void *event_info);
-
-    Eina_Bool handle_scheme(const char *uri);
-    Eina_Bool launch_email(const char *uri);
-    Eina_Bool launch_contact(const char *uri, const char *protocol);
-    Eina_Bool launch_dialer(const char *uri);
-    Eina_Bool launch_message(const char *uri);
-    Eina_Bool launch_tizenstore(const char *uri);
+    static void __top_controls_moved_cb(void *data, Evas_Object *obj, void *event_info);
+    static void __notification_reply_cb(void *data, Evas_Object *obj, void *event_info);
+    static void __theme_color_changed(
+        Evas_Object* o,
+        int r,
+        int g,
+        int b,
+        int a,
+        void* data
+    );
 
     // Load
     static void __loadStarted(void * data, Evas_Object * obj, void * event_info);
     static void __loadFinished(void * data, Evas_Object * obj, void * event_info);
     static void __loadProgress(void * data, Evas_Object * obj, void * event_info);
     static void __loadError(void* data, Evas_Object* obj, void *ewkError);
+#if DUMMY_BUTTON
+    static void __focusWebView(void * data, Evas_Object * obj, void * event_info);
+#endif
 
     static void __titleChanged(void * data, Evas_Object * obj, void * event_info);
     static void __urlChanged(void * data, Evas_Object * obj, void * event_info);
@@ -385,7 +440,7 @@ private:
 
     // Screenshot capture
     static void __screenshotCaptured(Evas_Object* image, void* user_data);
-private:
+
     Evas_Object * m_parent;
     TabId m_tabId;
     Evas_Object * m_ewkView;
@@ -394,7 +449,7 @@ private:
     std::string m_title;
     std::string m_redirectedURL;
     std::string m_loadingURL;
-    std::shared_ptr<tizen_browser::tools::BrowserImage> m_faviconImage;
+    tools::BrowserImagePtr m_faviconImage;
     bool m_isLoading;
     double m_loadProgress;
     bool m_loadError;
@@ -406,19 +461,21 @@ private:
     TabOrigin m_origin;
 
     std::map<CertificateConfirmationPtr, Ewk_Certificate_Policy_Decision *> m_confirmationCertificatenMap;
+    ManifestData m_manifestData;
+    bool m_manifestReady;
+    ManifestTypesVector m_manifestVector;
 
     static const std::string COOKIES_PATH;
-#if PWA
     static std::string s_pwaData;
     static std::string s_name;
     static std::string s_start_url;
     static std::string s_icon;
     static const std::string DOWNLOAD_PATH;
-#endif
 
-    int m_status_code;
-    Eina_Bool m_is_error_page;
-    DownloadControl *m_downloadControl;
+    DownloadControl* m_downloadControl;
+    int m_policyCounter;
+    bool m_imeState;
+    tools::Color m_themeColor;
 };
 
 } /* namespace webengine_service */
diff --git a/services/WebPageMin/CMakeLists.txt b/services/WebPageMin/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..55b5f60
--- /dev/null
@@ -0,0 +1,19 @@
+project(WebPageMin)
+
+set(WebPageMin_SRCS
+    WebPageMin.cpp
+    )
+
+include(Coreheaders)
+include(EFLHelpers)
+include(EWebKitHelpers)
+
+include_directories(${CMAKE_BINARY_DIR})
+include_directories(${CMAKE_SOURCE_DIR})
+
+add_library(${PROJECT_NAME} SHARED ${WebPageMin_SRCS})
+target_link_libraries(${PROJECT_NAME} ${EFL_LDFLAGS})
+
+install(TARGETS ${PROJECT_NAME}
+            LIBRARY DESTINATION services
+            ARCHIVE DESTINATION services/static)
diff --git a/services/WebPageMin/WebPageMin.cpp b/services/WebPageMin/WebPageMin.cpp
new file mode 100755 (executable)
index 0000000..9a936be
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WebPageMin.h"
+#include "Tools/EflTools.h"
+#include <Elementary.h>
+
+namespace tizen_browser {
+namespace base_ui {
+
+EXPORT_SERVICE(WebPageMin, "org.tizen.browser.webpagemin")
+
+WebPageMin::WebPageMin()
+    : m_layout(nullptr)
+{ }
+
+void WebPageMin::init(Evas_Object* parent)
+{
+    // create web layout
+    m_layout = elm_layout_add(parent);
+    tools::EflTools::setExpandHints(m_layout);
+    elm_layout_theme_set(m_layout, "layout", "application", "default");
+    evas_object_show(m_layout);
+}
+
+Evas_Object* WebPageMin::getContent()
+{
+    return m_layout;
+}
+
+void WebPageMin::showUI()
+{
+    evas_object_show(m_layout);
+}
+
+void WebPageMin::hideUI()
+{
+    evas_object_hide(m_layout);
+}
+
+void WebPageMin::setMainContent(Evas_Object* content)
+{
+    elm_layout_content_set(m_layout, "elm.swallow.content", content);
+}
+
+}   // base_ui
+}   // tizen_browser
diff --git a/services/WebPageMin/WebPageMin.h b/services/WebPageMin/WebPageMin.h
new file mode 100755 (executable)
index 0000000..0052e64
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WebPageMin_H
+#define WebPageMin_H
+
+#include "AbstractService.h"
+#include "AbstractUIComponent.h"
+#include "AbstractRotatable.h"
+#include "service_macros.h"
+
+namespace tizen_browser {
+namespace base_ui {
+
+class BROWSER_EXPORT WebPageMin
+    : public interfaces::AbstractUIComponent
+    , public core::AbstractService
+{
+public:
+    WebPageMin();
+    virtual ~WebPageMin() = default;
+    std::string getName() override;
+    void init(Evas_Object* parent) override;
+    Evas_Object* getContent() override;
+    void showUI() override;
+    void hideUI() override;
+    void setMainContent(Evas_Object* content);
+private:
+    Evas_Object* m_layout;
+};
+
+}   // base_ui
+}   // tizen_browser
+
+#endif
index 6876931..19f5850 100755 (executable)
@@ -26,9 +26,8 @@ namespace base_ui {
 
 
 ButtonBar::ButtonBar(Evas_Object* parent, const std::string& edjFile, const std::string& groupName)
+    : m_edjFilePath(EDJE_DIR + edjFile)
 {
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append(edjFile);
     elm_theme_extension_add(NULL, m_edjFilePath.c_str());
     m_layout = elm_layout_add(parent);
     Eina_Bool layoutSetResult = elm_layout_file_set(m_layout, m_edjFilePath.c_str(), groupName.c_str());
@@ -41,7 +40,6 @@ ButtonBar::ButtonBar(Evas_Object* parent, const std::string& edjFile, const std:
 
 ButtonBar::~ButtonBar()
 {
-
 }
 
 void ButtonBar::addAction(sharedAction action, const std::string& buttonName)
@@ -50,9 +48,9 @@ void ButtonBar::addAction(sharedAction action, const std::string& buttonName)
     std::shared_ptr<EAction> eAction = std::make_shared<EAction>(action);
     actionButton.eAction = eAction;
 
-    auto button = elm_button_add(m_layout);
+    Evas_Object* button { elm_button_add(m_layout) };
     elm_object_style_set(button, action->getIcon().c_str());
-    elm_object_part_text_set(button, "button_text", action->getText().c_str());
+    elm_object_translatable_part_text_set(button, "button_text", action->getText().c_str());
     elm_object_disabled_set(button, action->isEnabled() ? EINA_FALSE : EINA_TRUE);
     evas_object_smart_callback_add(button, "clicked", EAction::callbackFunction, eAction.get());
     evas_object_show(button);
@@ -78,27 +76,6 @@ void ButtonBar::onEnabledChanged(const std::string& buttonName, sharedAction act
 
 }
 
-void ButtonBar::setActionForButton(const std::string& buttonName, sharedAction newAction)
-{
-    ActionButton actionButton;
-    Evas_Object* button = m_buttonsMap[buttonName].button;
-    std::shared_ptr<EAction> eAction = std::make_shared<EAction>(newAction);
-
-    evas_object_smart_callback_del(button, "clicked", EAction::callbackFunction);
-    evas_object_smart_callback_add(button, "clicked", EAction::callbackFunction, eAction.get());
-
-
-    if (elm_object_focus_get(button)) {
-        elm_object_signal_emit(button, "elm,action,focus", "elm");
-    }
-
-    m_buttonsMap[buttonName].eAction = eAction;
-    m_actionsMap[buttonName] = newAction;
-
-    refreshButton(buttonName);
-
-}
-
 void ButtonBar::refreshButton(const std::string& buttonName)
 {
     Evas_Object* button = m_buttonsMap[buttonName].button;
@@ -110,11 +87,6 @@ Evas_Object* ButtonBar::getContent()
     return m_layout;
 }
 
-Evas_Object* ButtonBar::getButton(const std::string& buttonName)
-{
-    return m_buttonsMap[buttonName].button;
-}
-
 void ButtonBar::clearFocus()
 {
     for (auto it = m_buttonsMap.begin(); it != m_buttonsMap.end(); ++it) {
@@ -122,14 +94,6 @@ void ButtonBar::clearFocus()
     }
 }
 
-void ButtonBar::setDisabled(bool disabled)
-{
-    if (disabled) {
-        clearFocus();
-    }
-    elm_object_disabled_set(getContent(), disabled ? EINA_TRUE : EINA_FALSE);
-}
-
 void ButtonBar::setButtonsColor(bool secretMode)
 {
     std::string signal = secretMode ? "set_secret_mode" : "set_normal_mode";
index b261911..afb82a4 100755 (executable)
@@ -38,7 +38,6 @@ public:
     ButtonBar(Evas_Object* parent, const std::string& edjFile, const std::string& groupName);
     ~ButtonBar();
     void addAction(sharedAction action, const std::string& buttonName);
-    void setActionForButton(const std::string& buttonName, sharedAction newAction);
     /**
      * @brief register callback, used internally by addAction,
      *        should be called externally for all actions that will be assigned to button
@@ -48,9 +47,7 @@ public:
     void registerEnabledChangedCallback(sharedAction action, const std::string& buttonName);
 
     Evas_Object* getContent();
-    Evas_Object* getButton(const std::string& buttonName);
     void clearFocus();
-    void setDisabled(bool disabled);
     void setButtonsColor(bool secretMode);
 
 private:
index ceb8bbd..c00d027 100755 (executable)
@@ -6,12 +6,6 @@ set(WebPageUI_SRCS
     ButtonBar.cpp
     EditQuickAccessUI.cpp
     URIEntry.cpp
-    UrlHistoryList/UrlHistoryList.cpp
-    UrlHistoryList/GenlistManager.cpp
-    UrlHistoryList/GenlistManagerCallbacks.cpp
-    UrlHistoryList/TimerCallbacks.cpp
-    UrlHistoryList/UrlMatchesStyler.cpp
-    UrlHistoryList/GenlistItemsManager.cpp
     )
 
 include(Coreheaders)
@@ -60,8 +54,6 @@ set(edcFiles
     BottomButtonBar.edc
     RightButtonBar.edc
     URIEntry.edc
-    UrlHistoryList.edc
-    CustomButton.edc
     )
 
 foreach(edec ${edcFiles})
index 3d6d828..978cb1d 100755 (executable)
@@ -30,6 +30,7 @@ namespace base_ui{
 
 EditQuickAccessUI::EditQuickAccessUI()
     : m_parent(nullptr)
+    , m_layout(nullptr)
     , m_editState(QuickAccessState::Edit)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -52,10 +53,10 @@ void EditQuickAccessUI::showUI()
         BROWSER_LOGW("Missing signal value");
 
     if (m_editState == QuickAccessState::Edit) {
-        m_naviframe->setTitle(_("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"));
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DONE"));
+        m_naviframe->setTitle("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB");
+        m_naviframe->setRightButtonText("IDS_BR_SK_DONE");
         m_naviframe->setRightButtonEnabled(true);
-        auto signal = requestQuickAccessGengrid();
+        auto signal = requestQuickAccessEditLayout();
         if (signal) {
             elm_object_part_content_set(m_layout, "elm.swallow.content", *signal);
             evas_object_show(*signal);
@@ -63,10 +64,10 @@ void EditQuickAccessUI::showUI()
             BROWSER_LOGW("Missing signal value");
         }
     } else if (m_editState == QuickAccessState::DeleteMostVisited) {
-        m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
-        m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE_ABB"));
+        m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
+        m_naviframe->setRightButtonText("IDS_BR_SK_DELETE_ABB");
         m_naviframe->setRightButtonEnabled(false);
-        auto signal = requestMostVisitedGengrid();
+        auto signal = requestMostVisitedEditLayout();
         if (signal) {
             elm_object_part_content_set(m_layout, "elm.swallow.content", *signal);
             evas_object_show(*signal);
@@ -120,7 +121,7 @@ void EditQuickAccessUI::setMVSelectedItems(int count)
     if (count)
         m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str());
     else
-        m_naviframe->setTitle(_("IDS_BR_HEADER_SELECT_ITEMS_ABB2"));
+        m_naviframe->setTitle("IDS_BR_HEADER_SELECT_ITEMS_ABB2");
     m_naviframe->setRightButtonEnabled(count);
 }
 
@@ -137,9 +138,11 @@ void EditQuickAccessUI::_done_clicked(void *data, Evas_Object *, void *)
     auto self = static_cast<EditQuickAccessUI*>(data);
     self->editingFinished();
     if (self->m_editState == QuickAccessState::Edit) {
-        //TODO: save reordered items
+        self->reorderQuickAccessItems();
     } else if (self->m_editState == QuickAccessState::DeleteMostVisited) {
         self->deleteSelectedMostVisitedItems();
+
+        tools::EflTools::createToastPopup("Shortcut deleted");  //TODO: Missing translation
     }
 
     self->closeUI();
@@ -153,7 +156,7 @@ void EditQuickAccessUI::createEditLayout()
     m_naviframe = std::make_shared<NaviframeWrapper>(m_parent);
 
     m_naviframe->addLeftButton(_cancel_clicked, this);
-    m_naviframe->setLeftButtonText(_("IDS_BR_SK_CANCEL_ABB"));
+    m_naviframe->setLeftButtonText("IDS_BR_SK_CANCEL_ABB");
     m_naviframe->setLeftButtonVisible(true);
 
     m_naviframe->addRightButton(_done_clicked, this);
@@ -170,6 +173,18 @@ void EditQuickAccessUI::createEditLayout()
     m_naviframe->setContent(m_layout);
 }
 
+void EditQuickAccessUI::orientationChanged(bool landscape)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
+    Evas_Object *content = elm_object_part_content_get(m_layout, "elm.swallow.content");
+    Evas_Object *gengrid = elm_object_part_content_get(content, "view");
+    if (landscape)
+        evas_object_size_hint_min_set(gengrid, Z3_SCALE_SIZE(GENGRID_HORIZONTAL_WIDTH), 0);
+    else
+        evas_object_size_hint_min_set(gengrid, Z3_SCALE_SIZE(GENGRID_PORTRAIT_WIDTH), 0);
+}
+
 }   // namespace tizen_browser
 }   // namespace base_ui
 
index 56a20b4..284edd3 100755 (executable)
@@ -43,10 +43,12 @@ public:
     Evas_Object* getContent();
     void backPressed();
     void setMVSelectedItems(int count);
+    void orientationChanged(bool landscape);
 
-    boost::signals2::signal<Evas_Object* ()> requestQuickAccessGengrid;
-    boost::signals2::signal<Evas_Object* ()> requestMostVisitedGengrid;
+    boost::signals2::signal<Evas_Object* ()> requestQuickAccessEditLayout;
+    boost::signals2::signal<Evas_Object* ()> requestMostVisitedEditLayout;
     boost::signals2::signal<QuickAccessState ()> requestQuickAccessState;
+    boost::signals2::signal<void ()> reorderQuickAccessItems;
     boost::signals2::signal<void ()> editingFinished;
     boost::signals2::signal<void ()> deleteSelectedMostVisitedItems;
 
@@ -61,6 +63,9 @@ private:
     Evas_Object *m_layout;
     std::shared_ptr<QuickAccess> m_quickAccess;
     QuickAccessState m_editState;
+
+    static const int GENGRID_HORIZONTAL_WIDTH = 1280;
+    static const int GENGRID_PORTRAIT_WIDTH = 720;
 };
 
 }   // namespace tizen_browser
index c59f8ea..5451755 100755 (executable)
@@ -24,7 +24,6 @@
 #include "BrowserAssert.h"
 #include "BrowserLogger.h"
 #include "MenuButton.h"
-#include "SettingsPrettySignalConnector.h"
 #include "Tools/URIschemes.h"
 #include "Tools/SettingsEnums.h"
 #include "GeneralTools.h"
@@ -32,9 +31,6 @@
 namespace tizen_browser {
 namespace base_ui {
 
-#define GUIDE_TEXT_FOCUSED "Search or URL"
-#define GUIDE_TEXT_UNFOCUSED "Search or URL"
-
 const std::string keynameSelect = "Select";
 const std::string keynameClear = "Clear";
 const std::string keynameKP_Enter = "KP_Enter";
@@ -47,6 +43,7 @@ URIEntry::URIEntry(WPUStatesManagerPtrConst statesMgr)
     , m_entry(NULL)
     , m_favicon(0)
     , m_entry_layout(NULL)
+    , m_limit(nullptr)
     , m_entrySelectionState(SelectionState::SELECTION_NONE)
     , m_entryContextMenuOpen(false)
     , m_searchTextEntered(false)
@@ -59,7 +56,10 @@ URIEntry::URIEntry(WPUStatesManagerPtrConst statesMgr)
 {}
 
 URIEntry::~URIEntry()
-{}
+{
+    if (m_limit)
+        free(m_limit);
+}
 
 void URIEntry::init(Evas_Object* parent)
 {
@@ -79,11 +79,13 @@ Evas_Object* URIEntry::getContent()
         elm_layout_file_set(m_entry_layout, m_customEdjPath.c_str(), "uri_entry_layout");
 
         m_entry = elm_entry_add(m_entry_layout);
-        elm_object_style_set(m_entry, "uri_entry");
 
+        m_limit = tools::EflTools::setEntryLimit(m_entry, false);
         elm_entry_single_line_set(m_entry, EINA_TRUE);
         elm_entry_scrollable_set(m_entry, EINA_TRUE);
         elm_entry_input_panel_layout_set(m_entry, ELM_INPUT_PANEL_LAYOUT_URL);
+        elm_entry_input_panel_return_key_type_set(m_entry,ELM_INPUT_PANEL_RETURN_KEY_TYPE_GO);
+        elm_entry_text_style_user_push(m_entry, "DEFAULT='font=Tizen:style=Light font_size=42'");
 
         m_rightIcon = elm_button_add(m_entry_layout);
         elm_object_style_set(m_rightIcon, "custom");
@@ -99,7 +101,11 @@ Evas_Object* URIEntry::getContent()
         evas_object_show(m_leftIcon);
         elm_object_part_content_set(m_entry_layout, "left_icon", m_leftIcon);
 
-        setUrlGuideText(GUIDE_TEXT_UNFOCUSED);
+        //TODO: Missing translation. Remove _() and use boost::format when text is updated.
+        elm_object_translatable_part_text_set(m_entry, "elm.guide",
+            (std::string("<font=Tizen:style=Light font_size=42>") +
+             std::string(_("IDS_BR_NPBODY_SEARCH_OR_ENTER_URL_ABB")) +
+             std::string("</font>")).c_str());
 
         evas_object_smart_callback_add(m_entry, "activated", URIEntry::activated, this);
         evas_object_smart_callback_add(m_entry, "preedit,changed", URIEntry::preeditChange, this);
@@ -118,11 +124,6 @@ Evas_Object* URIEntry::getContent()
     return m_entry_layout;
 }
 
-Evas_Object* URIEntry::getEntryWidget()
-{
-    return m_entry;
-}
-
 void URIEntry::changeUri(const std::string& newUri)
 {
     BROWSER_LOGD("[%s:%d] newUri=%s", __PRETTY_FUNCTION__, __LINE__, newUri.c_str());
@@ -151,8 +152,6 @@ void URIEntry::setFavIcon(std::shared_ptr< tizen_browser::tools::BrowserImage >
         evas_object_resize(m_favicon, 36, 36);
         elm_object_part_content_set(m_entry_layout, "fav_icon", m_favicon);
         setCurrentFavIcon();
-    } else {
-        setDocIcon();
     }
 }
 
@@ -162,18 +161,6 @@ void URIEntry::setCurrentFavIcon()
     elm_object_signal_emit(m_entry_layout, "show_favicon", "model");
 }
 
-void URIEntry::setSearchIcon()
-{
-    m_currentIconType = IconTypeSearch;
-    elm_object_signal_emit(m_entry_layout, "set_search_icon", "model");
-}
-
-void URIEntry::setDocIcon()
-{
-    m_currentIconType = IconTypeDoc;
-    elm_object_signal_emit(m_entry_layout, "set_doc_icon", "model");
-}
-
 void URIEntry::selectionTool()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -209,25 +196,12 @@ void URIEntry::_uri_entry_editing_changed_user(void* data, Evas_Object* /* obj *
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     URIEntry* self = reinterpret_cast<URIEntry*>(data);
     std::string entry(elm_entry_markup_to_utf8(elm_entry_entry_get(self->m_entry)));
-    if ((entry.find("http://") == 0)
-            || (entry.find("https://") == 0)
-            || (entry.find(".") != std::string::npos)) {
-        self->setDocIcon();
-    } else {
-        self->setSearchIcon();
-    }
     self->showCancelIcon();
     if(entry.find(" ") != std::string::npos)
         return;
     self->uriEntryEditingChangedByUser(std::make_shared<std::string>(entry));
 }
 
-void URIEntry::setUrlGuideText(const char* txt) const
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    elm_object_translatable_part_text_set(m_entry, "elm.guide", txt);
-}
-
 void URIEntry::unfocused(void* data, Evas_Object*, void*)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -294,43 +268,38 @@ void URIEntry::editingCompleted()
     showSecureIcon(false, false);
 }
 
-std::string URIEntry::rewriteURI(const std::string& url)
+std::string URIEntry::rewriteURI(const std::string& url) const
 {
     BROWSER_LOGD("%s: %s", __PRETTY_FUNCTION__, url.c_str());
     boost::regex urlRegex(R"(^(https?|ftp)://[^\s/$.?#].[^\s]*$)");
+    boost::regex chromeRegex(R"(^chrome:[^\s]*$)");
+    boost::regex aboutRegex(R"(^about:[^\s]*$)");
     boost::regex fileRegex(R"(^file:///[^\s]*$)");
+    boost::regex myfilesappRegex(R"(^file:///opt/usr/media/[^\s]*$)");
 
-    if (!url.empty() && url != "about:blank" && url != "about:home") {
-        if (boost::regex_match(url, urlRegex) || boost::regex_match(url, fileRegex))
+    if (!url.empty()) {
+        if (boost::regex_match(url, urlRegex) ||
+            boost::regex_match(url, myfilesappRegex) ||
+            boost::regex_match(url, chromeRegex) ||
+            boost::regex_match(url, aboutRegex))
             return url;
-        else if (boost::regex_match(std::string("http://") + url, urlRegex) &&  url.find(".") != std::string::npos)
+        else if (boost::regex_match(std::string("http://") + url, urlRegex) &&
+            (!boost::regex_match(url, fileRegex)) &&
+            url.find(".") != std::string::npos)
             return std::string("http://") + url;
         else {
-            const std::string searchEngine  = [this]() -> std::string {
-                auto sig =
-                    SPSC.getWebEngineSettingsParamString(
-                        basic_webengine::WebEngineSettings::DEFAULT_SEARCH_ENGINE);
-                return (sig && !sig->empty()) ?
-                    *sig :
-                    Translations::Google;
-            }();
-            std::string searchString = SearchEngineTranslation::instance().get(searchEngine);
-            searchString += url;
-            std::replace(searchString.begin(), searchString.end(), ' ', '+');
-            BROWSER_LOGD("[%s:%d] Search string: %s", __PRETTY_FUNCTION__, __LINE__, searchString.c_str());
-            return searchString;
+            auto sig = createSearchQuery(url);
+            if (!sig) {
+                BROWSER_LOGD("[%s:%d] signal error!", __PRETTY_FUNCTION__, __LINE__);
+                return "";
+            }
+            return *sig;
         }
     }
 
     return url;
 }
 
-void URIEntry::editingCanceled()
-{
-    elm_entry_input_panel_hide(m_entry);
-    setCurrentFavIcon();
-}
-
 void URIEntry::loadStarted()
 {
     m_isPageLoading = true;
@@ -343,16 +312,6 @@ void URIEntry::loadFinished()
     showReloadIcon();
 }
 
-void URIEntry::AddAction(sharedAction action)
-{
-    m_actions.push_back(action);
-}
-
-std::list<sharedAction> URIEntry::actions() const
-{
-    return m_actions;
-}
-
 void URIEntry::clearFocus()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -365,15 +324,6 @@ bool URIEntry::hasFocus() const
     return elm_object_focus_get(m_entry) == EINA_TRUE ? true : false;
 }
 
-void URIEntry::setDisabled(bool disabled)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (disabled) {
-        clearFocus();
-    }
-    elm_object_disabled_set(getContent(), disabled ? EINA_TRUE : EINA_FALSE);
-}
-
 void URIEntry::_uri_entry_double_clicked(void* data, Evas_Object* /*obj*/, void* /*event_info*/)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -449,7 +399,7 @@ void URIEntry::updateSecureIcon()
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
     bool show = false, secure = false;
-    if (m_URI.find(HTTPS_SCHEME) == 0) {
+    if (m_URI.compare(0, strlen(HTTPS_SCHEME), HTTPS_SCHEME) == 0) {
         show = true;
         auto valid = isValidCert(m_URI);
         if (valid)
index e7d55a3..9229b1c 100755 (executable)
@@ -43,11 +43,10 @@ public:
         SELECTION_KEEP
         , SELECTION_NONE
     };
-    URIEntry(WPUStatesManagerPtrConst statesMgr);
+    explicit URIEntry(WPUStatesManagerPtrConst statesMgr);
     ~URIEntry();
     void init(Evas_Object* parent);
     Evas_Object* getContent();
-    Evas_Object* getEntryWidget();
 
     void changeUri(const std::string&);
     boost::signals2::signal<void (const std::string&)> uriChanged;
@@ -61,28 +60,15 @@ public:
     boost::signals2::signal<bool (const std::string&)> isValidCert;
     boost::signals2::signal<void ()> reloadPage;
     boost::signals2::signal<void ()> stopLoadingPage;
+    boost::signals2::signal<std::string (const std::string&)> createSearchQuery;
     void updateSecureIcon();
     void showSecureIcon(bool show, bool secure);
 
     void setFavIcon(std::shared_ptr<tizen_browser::tools::BrowserImage> favicon);
     void setCurrentFavIcon();
-    void setSearchIcon();
-    void setDocIcon();
     void setPageLoading(bool isLoading) { m_isPageLoading = isLoading; }
 
     /**
-     * \brief Adds Action to URI bar.
-     *
-     * All Actions will be displayed before URI entry.
-     */
-    void AddAction(sharedAction action);
-
-    /**
-     * \brief returns list of stored actions
-     */
-    std::list<sharedAction> actions() const;
-
-    /**
      * @brief Remove focus form URI
      */
     void clearFocus();
@@ -95,10 +81,8 @@ public:
     /**
      * \brief Rewrites URI to support search and prefixing http:// if needed
      */
-    std::string rewriteURI(const std::string& url);
+    std::string rewriteURI(const std::string& url) const;
 
-    void setDisabled(bool disabled);
-    void editingCanceled();
     void loadStarted();
     void loadFinished();
 
@@ -111,7 +95,6 @@ private:
     void editingCompleted();
     // TODO This method should be removed when input events will be fixed
     void selectionTool();
-    void setUrlGuideText(const char* txt) const;
 
     static void _fixed_entry_key_down_handler(void* data, Evas* e, Evas_Object* obj, void* event_info);
     static void _uri_entry_clicked(void* data, Evas_Object* obj, void* event_info);
@@ -143,6 +126,9 @@ private:
     Evas_Object* m_entry;
     Evas_Object* m_favicon;
     Evas_Object* m_entry_layout;
+
+    Elm_Entry_Filter_Limit_Size* m_limit;
+
     SelectionState m_entrySelectionState;
     std::string m_pageTitle;
     std::string m_URI;
diff --git a/services/WebPageUI/UrlHistoryList/GenlistItemsManager.cpp b/services/WebPageUI/UrlHistoryList/GenlistItemsManager.cpp
deleted file mode 100755 (executable)
index ee18444..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "GenlistItemsManager.h"
-#include "BrowserLogger.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistItemsManager::GenlistItemsManager()
-{
-    ptrMap = {
-        {   GenlistItemType::ITEM_CURRENT,
-            make_shared<Elm_Object_Item*>()},
-        {   GenlistItemType::ITEM_FIRST,
-            make_shared<Elm_Object_Item*>()},
-        {   GenlistItemType::ITEM_LAST,
-            make_shared<Elm_Object_Item*>()}
-    };
-    namesMap = {
-            { GenlistItemType::ITEM_CURRENT, "ITEM_CURRENT" },
-            { GenlistItemType::ITEM_FIRST, "ITEM_FIRST" },
-            { GenlistItemType::ITEM_LAST, "ITEM_LAST" }
-    };
-}
-
-GenlistItemsManager::~GenlistItemsManager()
-{
-}
-
-Elm_Object_Item* GenlistItemsManager::getItem(GenlistItemType type) const
-{
-    return *ptrMap.at(type);
-}
-
-void GenlistItemsManager::setItems(std::initializer_list<GenlistItemType> types,
-        Elm_Object_Item* item)
-{
-    for (auto i : types) {
-        *ptrMap.at(i) = item;
-    }
-}
-
-void GenlistItemsManager::setItemsIfNullptr(
-        std::initializer_list<GenlistItemType> types, Elm_Object_Item* item)
-{
-    for (auto i : types) {
-        if (!getItem(i)) {
-            setItems( { i }, item);
-        }
-    }
-}
-
-void GenlistItemsManager::assignItem(GenlistItemType dst, GenlistItemType src)
-{
-    setItems( { dst }, getItem(src));
-}
-
-bool GenlistItemsManager::shiftItemDown(GenlistItemType item)
-{
-    if (!getItem(item))
-        return false;
-    Elm_Object_Item* item_next = elm_genlist_item_next_get(getItem(item));
-    if (item_next) {
-        setItems( { item }, item_next);
-        return true;
-    }
-    return false;
-}
-
-bool GenlistItemsManager::shiftItemUp(GenlistItemType item)
-{
-    if (!getItem(item))
-        return false;
-    Elm_Object_Item* item_prev = elm_genlist_item_prev_get(getItem(item));
-    if (item_prev) {
-        setItems( { item }, item_prev);
-        return true;
-    }
-    return false;
-}
-
-void GenlistItemsManager::clear()
-{
-    for (auto pair : ptrMap) {
-        setItems({pair.first}, nullptr);
-    }
-}
-
-std::string GenlistItemsManager::toString(GenlistItemType item) const
-{
-    return namesMap.find(item)->second;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
diff --git a/services/WebPageUI/UrlHistoryList/GenlistItemsManager.h b/services/WebPageUI/UrlHistoryList/GenlistItemsManager.h
deleted file mode 100755 (executable)
index 59a9441..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTITEMSMANAGER_H_
-#define GENLISTITEMSMANAGER_H_
-
-#include <memory>
-#include <map>
-
-#include <Elementary.h>
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-enum class GenlistItemType
-{
-    ITEM_CURRENT, ITEM_FIRST, ITEM_LAST
-};
-
-/**
- * Stores and manipulated pointers on Elm_Object_Item for GenlistManager
- */
-class GenlistItemsManager
-{
-public:
-    GenlistItemsManager();
-    virtual ~GenlistItemsManager();
-
-    Elm_Object_Item* getItem(GenlistItemType type) const;
-    void setItems(std::initializer_list<GenlistItemType> types,
-            Elm_Object_Item* item);
-    /**
-     * Same as #setItems, except only nullptr value pointers are set
-     */
-    void setItemsIfNullptr(std::initializer_list<GenlistItemType> types,
-            Elm_Object_Item* item);
-    /**
-     * Assign src pointer value to dst.
-     */
-    void assignItem(GenlistItemType dst, GenlistItemType src);
-    /**
-     * Assign item of a given type to a elm_genlist_item_next_get item, if
-     * there is one. Return false, if value has not changed.
-     */
-    bool shiftItemDown(GenlistItemType item);
-    bool shiftItemUp(GenlistItemType item);
-
-    /**
-     * clear all pointers
-     */
-    void clear();
-
-    std::string toString(GenlistItemType item) const;
-
-
-private:
-    map<GenlistItemType, shared_ptr<Elm_Object_Item*>> ptrMap;
-    std::map<GenlistItemType, std::string> namesMap;
-
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTITEMSMANAGER_H_ */
diff --git a/services/WebPageUI/UrlHistoryList/GenlistManager.cpp b/services/WebPageUI/UrlHistoryList/GenlistManager.cpp
deleted file mode 100755 (executable)
index 9380869..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "services/HistoryService/HistoryItem.h"
-#include "GenlistManager.h"
-#include "GenlistManagerCallbacks.h"
-#include "UrlMatchesStyler.h"
-#include "GenlistItemsManager.h"
-#include "Config.h"
-#include <EflTools.h>
-#include <Edje.h>
-
-// Right now base scale in edc is 2.6, hence using 2.6 here to calculate proper
-// ITEM_H value. Probably assumptions will change and ITEM_H will have to be
-// calculated in a different way.
-#define ELM_SCALE_SIZE_Z3(x) (int)(((double)(x) * elm_config_scale_get()) / 2.6)
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistManager::GenlistManager()
-    : m_parentLayout(nullptr)
-    , m_genlist(nullptr)
-#if PROFILE_MOBILE
-    , ITEM_H(ELM_SCALE_SIZE_Z3(boost::any_cast<int>(tizen_browser::config::Config::
-            getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT))))
-#else
-    , ITEM_H(ELM_SCALE_SIZE(boost::any_cast<int>(tizen_browser::config::Config::
-        getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEM_HEIGHT))))
-#endif
-    , ITEMS_VISIBLE_NUMBER_MAX(boost::any_cast<int>(tizen_browser::config::Config::
-            getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEMS_VISIBLE_NUMBER_MAX)))
-    , m_historyItemsVisibleCurrent(0)
-    , m_historyItemClass(nullptr)
-{
-    m_urlMatchesStyler = make_shared<UrlMatchesStyler>();
-    m_itemsManager = make_shared<GenlistItemsManager>();
-    m_historyItemClass = elm_genlist_item_class_new();
-    m_historyItemClass->item_style = "url_historylist_grid_item";
-    m_historyItemClass->func.text_get = nullptr;
-    m_historyItemClass->func.content_get = m_itemClassContentGet;
-    m_historyItemClass->func.state_get = nullptr;
-    m_historyItemClass->func.del = nullptr;
-    GenlistManagerCallbacks::setGenlistManager(this);
-    m_historyItemsVisibleCurrent = ITEMS_VISIBLE_NUMBER_MAX;
-}
-
-GenlistManager::~GenlistManager()
-{
-    elm_genlist_item_class_free(m_historyItemClass);
-}
-
-void GenlistManager::setParentLayout(Evas_Object* parentLayout)
-{
-    m_parentLayout = parentLayout;
-}
-
-Evas_Object* GenlistManager::getGenlist()
-{
-    if (!m_genlist)
-        m_genlist = createGenlist(m_parentLayout);
-    return m_genlist;
-}
-
-GenlistItemsManagerPtr GenlistManager::getItemsManager()
-{
-    return m_itemsManager;
-}
-
-void GenlistManager::show(const string& editedUrl,
-        shared_ptr<services::HistoryItemVector> matchedEntries)
-{
-    clear();
-    m_genlist = createGenlist(m_parentLayout);
-
-    prepareUrlsVector(editedUrl, matchedEntries);
-
-    m_itemsManager->setItems( { GenlistItemType::ITEM_FIRST,
-            GenlistItemType::ITEM_LAST }, nullptr);
-    Elm_Object_Item* itemAppended = nullptr;
-    for (auto it : m_readyUrlPairs) {
-        itemAppended = elm_genlist_item_append(m_genlist, m_historyItemClass,
-                it.get(), nullptr, ELM_GENLIST_ITEM_NONE,
-                GenlistManagerCallbacks::_item_selected, it.get());
-        m_itemsManager->setItemsIfNullptr( { GenlistItemType::ITEM_FIRST },
-                itemAppended);
-    }
-    m_itemsManager->setItems( { GenlistItemType::ITEM_LAST }, itemAppended);
-
-    const int list_items_number = elm_genlist_items_count(m_genlist);
-    if (list_items_number != 0) {
-        Edje_Message_Int message;
-        if (list_items_number > ITEMS_VISIBLE_NUMBER_MAX)
-            message.val = ITEMS_VISIBLE_NUMBER_MAX;
-        else
-            message.val = list_items_number;
-        message.val *= ITEM_H;
-        edje_object_message_send(elm_layout_edje_get(m_parentLayout), EDJE_MESSAGE_INT, 0, &message);
-    }
-
-    evas_object_show(m_genlist);
-}
-
-void GenlistManager::hide()
-{
-    evas_object_hide(m_genlist);
-    clear();
-}
-
-void GenlistManager::clear()
-{
-    if (m_genlist && elm_genlist_items_count(m_genlist)) {
-        elm_genlist_clear(m_genlist);
-        evas_object_del(m_genlist);
-        m_genlist = nullptr;
-        m_itemsManager->clear();
-    }
-}
-
-string GenlistManager::getItemUrl(
-        std::initializer_list<GenlistItemType> types) const
-{
-    for (auto t : types) {
-        if (!m_itemsManager->getItem( { t }))
-            continue;
-        void* data = elm_object_item_data_get(m_itemsManager->getItem( { t }));
-        if (!data)
-            continue;
-        const UrlPair* const urlPair = reinterpret_cast<UrlPair*>(data);
-        if (!urlPair)
-            continue;
-        return urlPair->urlOriginal;
-    }
-    return "";
-}
-
-Evas_Object* GenlistManager::createGenlist(Evas_Object* parentLayout)
-{
-    Evas_Object* genlist = elm_genlist_add(parentLayout);
-    evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
-    0.0);
-    evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL,
-    0.0);
-    elm_scroller_bounce_set(genlist, EINA_FALSE, EINA_FALSE);
-    elm_scroller_movement_block_set(genlist,
-            ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL);
-    elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF,
-            ELM_SCROLLER_POLICY_OFF);
-    elm_object_event_callback_add(genlist,
-            GenlistManagerCallbacks::_object_event, this);
-    signalGenlistCreated(genlist);
-    return genlist;
-}
-
-Evas_Object* GenlistManager::m_itemClassContentGet(void* data, Evas_Object* obj,
-        const char* part)
-{
-    Evas_Object* layout = elm_layout_add(obj);
-    tools::EflTools::setExpandHints(layout);
-    if (strcmp(part, "matched_url") == 0) {
-        const UrlPair* const item = reinterpret_cast<UrlPair*>(data);
-        if (item) {
-            string edjFilePath = EDJE_DIR;
-            edjFilePath.append("WebPageUI/UrlHistoryList.edj");
-            elm_layout_file_set(layout, edjFilePath.c_str(),
-                    "layoutMatchedUrl");
-            elm_object_text_set(layout, item->urlHighlighted.c_str());
-        }
-    }
-    return layout;
-}
-
-void GenlistManager::prepareUrlsVector(const string& editedUrl,
-        shared_ptr<services::HistoryItemVector> matchedEntries)
-{
-    // free previously used urls. IMPORTANT: it has to be assured that previous
-    // genlist items are not using these pointers.
-    m_readyUrlPairs.clear();
-    for (auto it : *matchedEntries) {
-        UrlPair newUrlPair(it->getUrl(),
-                m_urlMatchesStyler->getUrlHighlightedMatches(it->getUrl(),
-                        editedUrl));
-        m_readyUrlPairs.push_back(make_shared < UrlPair > (newUrlPair));
-    }
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
diff --git a/services/WebPageUI/UrlHistoryList/GenlistManager.h b/services/WebPageUI/UrlHistoryList/GenlistManager.h
deleted file mode 100755 (executable)
index 7784a82..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTMANAGER_H_
-#define GENLISTMANAGER_H_
-
-#include <Elementary.h>
-#include "services/HistoryService/HistoryItemTypedef.h"
-#include <boost/signals2/signal.hpp>
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class GenlistItemsManager;
-enum class GenlistItemType;
-typedef shared_ptr<GenlistItemsManager> GenlistItemsManagerPtr;
-class UrlMatchesStyler;
-typedef shared_ptr<UrlMatchesStyler> UrlMatchesStylerPtr;
-
-typedef struct UrlPair_s
-{
-    UrlPair_s(string a, string b) :
-            urlOriginal(a), urlHighlighted(b)
-    {
-    }
-    string urlOriginal;
-    /**
-     * Url plus styling tags.
-     */
-    string urlHighlighted;
-} UrlPair;
-
-class GenlistManager
-{
-public:
-    GenlistManager();
-    ~GenlistManager();
-    void setParentLayout(Evas_Object* parentLayout);
-    Evas_Object* getGenlist();
-    GenlistItemsManagerPtr getItemsManager();
-    void show(const string& editedUrl,
-            shared_ptr<services::HistoryItemVector> matchedEntries);
-    void hide();
-
-    /**
-     * Clear genlist elements, delete genlist.
-     */
-    void clear();
-
-    /**
-     * Get url from item of a given type.
-     * @param types The types of list items: url will be searched in these item types.
-     * @return Url from the first item from the list, which has valid url. Empty if neither of items has url assigned.
-     */
-    string getItemUrl(std::initializer_list<GenlistItemType> types) const;
-    boost::signals2::signal<void(string)> signalItemSelected;
-    boost::signals2::signal<void()> signalItemFocusChange;
-
-    /// sent to UrlHistoryList.
-    boost::signals2::signal<void(Evas_Object*)> signalGenlistCreated;
-private:
-    Evas_Object* createGenlist(Evas_Object* parentLayout);
-    static Evas_Object* m_itemClassContentGet(void *data, Evas_Object *obj,
-            const char *part);
-    void prepareUrlsVector(const string& editedUrl,
-            shared_ptr<services::HistoryItemVector> matchedEntries);
-
-    Evas_Object* m_parentLayout;
-    Evas_Object* m_genlist;
-
-    // don't know how to get from edc:
-    const int ITEM_H;
-    const int ITEMS_VISIBLE_NUMBER_MAX;
-    // currently visible items number
-    int m_historyItemsVisibleCurrent;
-
-    Elm_Gengrid_Item_Class* m_historyItemClass;
-    GenlistItemsManagerPtr m_itemsManager;
-
-    /*
-     * keeps shared pointers to strings, which are ready to be displayed, so they can be
-     * passed through EFL, until they're not needed. IMPORTANT: it has to be
-     * assured, that list is not cleared until all EFL items has created their
-     * labels from these pointers in m_contentGet(). in case of segfaults, delete copy of pointers
-     * manually in m_contentGet().
-     */
-    vector<shared_ptr<UrlPair>> m_readyUrlPairs;
-    UrlMatchesStylerPtr m_urlMatchesStyler;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTMANAGER_H_ */
diff --git a/services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.cpp b/services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.cpp
deleted file mode 100755 (executable)
index 7f98300..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "GenlistManagerCallbacks.h"
-#include "GenlistItemsManager.h"
-#include <Ecore_Input.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-GenlistManager* GenlistManagerCallbacks::genlistManager = nullptr;
-
-GenlistManagerCallbacks::GenlistManagerCallbacks()
-{
-}
-
-GenlistManagerCallbacks::~GenlistManagerCallbacks()
-{
-}
-
-void GenlistManagerCallbacks::_item_selected(void* data, Evas_Object* /*obj*/,
-        void* /*event_info*/)
-{
-    const UrlPair* const item = reinterpret_cast<UrlPair*>(data);
-    if (item) {
-        if (genlistManager) {
-            genlistManager->signalItemSelected(item->urlOriginal);
-            genlistManager->hide();
-        }
-    }
-}
-
-Eina_Bool GenlistManagerCallbacks::_object_event(void* /*data*/,
-        Evas_Object* /*obj*/, Evas_Object* /*src*/, Evas_Callback_Type type,
-        void* event_info)
-{
-    if(type != EVAS_CALLBACK_KEY_UP)
-        return EINA_FALSE;
-
-    if (!genlistManager)
-        return EINA_FALSE;
-
-    Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event_info);
-    const std::string keyName = ev->keyname;
-    if (keyName.compare("Down") == 0 || keyName.compare("Up") == 0) {
-        GenlistItemsManagerPtr itemsManager = genlistManager->getItemsManager();
-        // if there is no current item, set it to first item
-        if (!itemsManager->getItem(GenlistItemType::ITEM_CURRENT)) {
-            itemsManager->assignItem(GenlistItemType::ITEM_CURRENT,
-                    GenlistItemType::ITEM_FIRST);
-        }
-        if (keyName.compare("Down") == 0) {
-            itemsManager->shiftItemDown(GenlistItemType::ITEM_CURRENT);
-        } else {
-            itemsManager->shiftItemUp(GenlistItemType::ITEM_CURRENT);
-        }
-        genlistManager->signalItemFocusChange();
-    }
-    return EINA_FALSE;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
diff --git a/services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.h b/services/WebPageUI/UrlHistoryList/GenlistManagerCallbacks.h
deleted file mode 100755 (executable)
index dbba9ee..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef GENLISTMANAGERCALLBACKS_H_
-#define GENLISTMANAGERCALLBACKS_H_
-
-#include "GenlistManager.h"
-#include <Elementary.h>
-#include <Evas.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-class GenlistManagerCallbacks
-{
-public:
-    GenlistManagerCallbacks();
-    virtual ~GenlistManagerCallbacks();
-
-    /**
-     * Handles keyboard events: up and down keys.
-     */
-    static Eina_Bool _object_event(void* data, Evas_Object* obj,
-            Evas_Object* src, Evas_Callback_Type type, void* event_info);
-    static void _item_selected(void* data, Evas_Object* obj, void* event_info);
-    static void setGenlistManager(GenlistManager* genlistManager)
-    {
-        GenlistManagerCallbacks::genlistManager = genlistManager;
-    }
-private:
-    static GenlistManager* genlistManager;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* GENLISTMANAGERCALLBACKS_H_ */
diff --git a/services/WebPageUI/UrlHistoryList/TimerCallbacks.cpp b/services/WebPageUI/UrlHistoryList/TimerCallbacks.cpp
deleted file mode 100755 (executable)
index 1a585f0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "TimerCallbacks.h"
-
-#include "BrowserLogger.h"
-#include "UrlHistoryList.h"
-#include "GenlistManager.h"
-#include "GenlistItemsManager.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-AdjustGenlistHeight::AdjustGenlistHeight()
-    : m_genlist(nullptr)
-    , m_items_visible_number_max(0)
-    , m_item_h(0)
-{
-}
-
-void AdjustGenlistHeight::set(Evas_Object* genlist, int itemsVisibleNumberMax,
-        int itemH)
-{
-    m_genlist = genlist;
-    m_items_visible_number_max = itemsVisibleNumberMax;
-    m_item_h = itemH;
-}
-
-void AdjustGenlistHeight::operator()() const
-{
-    if (!m_genlist)
-        return;
-    const int LIST_ITEMS_NUMBER = elm_genlist_items_count(m_genlist);
-    if (LIST_ITEMS_NUMBER == 0)
-        return;
-    int historyItemsVisibleCurrent = m_items_visible_number_max;
-    if (LIST_ITEMS_NUMBER < historyItemsVisibleCurrent)
-        historyItemsVisibleCurrent = LIST_ITEMS_NUMBER;
-    Evas_Coord w, h;
-    evas_object_geometry_get(m_genlist, nullptr, nullptr, &w, nullptr);
-    h = m_item_h * historyItemsVisibleCurrent;
-    evas_object_resize(m_genlist, w, h);
-}
-
-GenlistFocused::GenlistFocused()
-    : m_urlHistoryList(nullptr)
-{
-}
-
-void GenlistFocused::set(UrlHistoryList* urlHistoryList)
-{
-    m_urlHistoryList = urlHistoryList;
-}
-
-void GenlistFocused::operator ()() const
-{
-    m_urlHistoryList->onListWidgetFocusChange(true);
-}
-
-}
-}
diff --git a/services/WebPageUI/UrlHistoryList/TimerCallbacks.h b/services/WebPageUI/UrlHistoryList/TimerCallbacks.h
deleted file mode 100755 (executable)
index 43afde0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLHISTORYLIST_TIMER_CALLBACKS_H_
-#define URLHISTORYLIST_TIMER_CALLBACKS_H_
-
-#include <Elementary.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-class UrlHistoryList;
-class GenlistManager;
-
-/**
- * Used with EcoreTimerCaller. Resizes genlist according to the number of its
- * elements.
- */
-class AdjustGenlistHeight
-{
-public:
-    AdjustGenlistHeight();
-    void set(Evas_Object* genlist, int itemsVisibleNumberMax, int itemH);
-    void operator()() const;
-private:
-    Evas_Object* m_genlist;
-    int m_items_visible_number_max;
-    int m_item_h;
-};
-
-/**
- * Used with EcoreTimerCaller. Callback invoked when UrlHistoryList genlist
- * gains focus.
- */
-class GenlistFocused
-{
-public:
-    GenlistFocused();
-    void set(UrlHistoryList* urlHistoryList);
-    void operator()() const;
-private:
-    UrlHistoryList* m_urlHistoryList;
-};
-
-}
-}
-
-#endif /* URLHISTORYLIST_TIMER_CALLBACKS_H_ */
diff --git a/services/WebPageUI/UrlHistoryList/UrlHistoryList.cpp b/services/WebPageUI/UrlHistoryList/UrlHistoryList.cpp
deleted file mode 100755 (executable)
index ac28b49..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <ecore-1/Ecore.h>
-#include "UrlHistoryList.h"
-#include "GenlistManager.h"
-#include "BrowserLogger.h"
-#include "GenlistItemsManager.h"
-#include "WebPageUI/WebPageUIStatesManager.h"
-#include "Config.h"
-#include <EflTools.h>
-
-namespace tizen_browser {
-namespace base_ui {
-
-UrlHistoryList::UrlHistoryList(WPUStatesManagerPtrConst webPageUiStatesMgr)
-    : m_genlistManager(make_shared<GenlistManager>())
-    , m_webPageUiStatesMgr(webPageUiStatesMgr)
-    , ITEMS_NUMBER_MAX(boost::any_cast<int>(config::Config::
-            getInstance().get(CONFIG_KEY::URLHISTORYLIST_ITEMS_NUMBER_MAX)))
-    , KEYWORD_LENGTH_MIN(boost::any_cast<int>(tizen_browser::config::Config::
-            getInstance().get(CONFIG_KEY::URLHISTORYLIST_KEYWORD_LENGTH_MIN)))
-    , m_parent(nullptr)
-    , m_entry(nullptr)
-    , m_layout(nullptr)
-    , m_widgetFocused(false)
-{
-    m_edjFilePath = EDJE_DIR;
-    m_edjFilePath.append("WebPageUI/UrlHistoryList.edj");
-    m_genlistManager->signalItemSelected.connect(
-            boost::bind(&UrlHistoryList::onItemSelect, this, _1));
-    m_genlistManager->signalItemFocusChange.connect(
-            boost::bind(&UrlHistoryList::onItemFocusChange, this));
-    m_genlistManager->signalGenlistCreated.connect(
-            boost::bind(&UrlHistoryList::onGenlistCreated, this, _1));
-    m_genlistFocusedCallback.set(this);
-}
-
-UrlHistoryList::~UrlHistoryList()
-{
-}
-
-void UrlHistoryList::setMembers(Evas_Object* parent, Evas_Object* editedEntry)
-{
-    m_parent = parent;
-    m_entry = editedEntry;
-    evas_object_smart_callback_add(m_entry, "changed,user",
-            UrlHistoryList::_uri_entry_editing_changed_user, this);
-}
-
-void UrlHistoryList::createLayout(Evas_Object* parentLayout)
-{
-    m_layout = elm_layout_add(parentLayout);
-    tools::EflTools::setExpandHints(m_layout);
-    elm_layout_file_set(m_layout, m_edjFilePath.c_str(), "url_history_list");
-    m_genlistManager->setParentLayout(m_layout);
-}
-
-Evas_Object* UrlHistoryList::getLayout()
-{
-    if (!m_layout)
-        createLayout(m_parent);
-    return m_layout;
-}
-
-void UrlHistoryList::saveEntryAsEditedContent()
-{
-    m_entryEditedContent = elm_entry_entry_get(m_entry);
-}
-
-void UrlHistoryList::restoreEntryEditedContent()
-{
-    elm_entry_entry_set(m_entry, m_entryEditedContent.c_str());
-    elm_entry_cursor_end_set(m_entry);
-}
-
-int UrlHistoryList::getItemsNumberMax() const
-{
-    return ITEMS_NUMBER_MAX;
-}
-
-int UrlHistoryList::getKeywordLengthMin() const
-{
-    return KEYWORD_LENGTH_MIN;
-}
-
-bool UrlHistoryList::getGenlistVisible()
-{
-    return evas_object_visible_get(m_genlistManager->getGenlist());
-}
-
-void UrlHistoryList::hideWidget()
-{
-    m_genlistManager->hide();
-}
-
-void UrlHistoryList::onBackPressed()
-{
-    hideWidget();
-}
-
-bool UrlHistoryList::getWidgetFocused() const
-{
-    return m_widgetFocused;
-}
-
-void UrlHistoryList::onURLEntryEditedByUser(const string& editedUrl,
-        shared_ptr<services::HistoryItemVector> matchedEntries)
-{
-    if (matchedEntries->size() == 0) {
-        hideWidget();
-    } else {
-        m_genlistManager->show(editedUrl, matchedEntries);
-        evas_object_show(m_layout);
-    }
-}
-
-void UrlHistoryList::onItemFocusChange()
-{
-    elm_entry_entry_set(m_entry, m_genlistManager->getItemUrl( {
-            GenlistItemType::ITEM_CURRENT }).c_str());
-}
-
-void UrlHistoryList::onGenlistCreated(Evas_Object* genlist)
-{
-    elm_object_part_content_set(m_layout, "list_swallow", genlist);
-    evas_object_show(m_layout);
-}
-
-void UrlHistoryList::onItemSelect(std::string content)
-{
-    if (m_webPageUiStatesMgr->equals(WPUState::QUICK_ACCESS)) {
-        openURL(content);
-    } else {
-        uriChanged(content);
-    }
-}
-
-void UrlHistoryList::onListWidgetFocusChange(bool focused)
-{
-    m_widgetFocused = focused;
-    if (focused) {
-        string itemUrl = m_genlistManager->getItemUrl( {
-                GenlistItemType::ITEM_CURRENT, GenlistItemType::ITEM_FIRST });
-        elm_entry_entry_set(m_entry, itemUrl.c_str());
-    } else {
-        restoreEntryEditedContent();
-    }
-}
-
-void UrlHistoryList::listWidgetFocusedFromUri()
-{
-    m_widgetFocused = true;
-    m_timerGenlistFocused.addTimer(m_genlistFocusedCallback);
-}
-
-void UrlHistoryList::_uri_entry_editing_changed_user(void* data,
-        Evas_Object* /* obj */, void* /* event_info */)
-{
-    UrlHistoryList* self = reinterpret_cast<UrlHistoryList*>(data);
-    self->saveEntryAsEditedContent();
-}
-
-}/* namespace base_ui */
-} /* namespace tizen_browser */
diff --git a/services/WebPageUI/UrlHistoryList/UrlHistoryList.h b/services/WebPageUI/UrlHistoryList/UrlHistoryList.h
deleted file mode 100755 (executable)
index c02197f..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLHISTORYLIST_H_
-#define URLHISTORYLIST_H_
-
-#include <memory>
-#include <Evas.h>
-
-#include "services/HistoryService/HistoryItemTypedef.h"
-#include <boost/signals2/signal.hpp>
-#include "EcoreTimerCaller.h"
-#include "TimerCallbacks.h"
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class WebPageUIStatesManager;
-typedef std::shared_ptr<const WebPageUIStatesManager> WPUStatesManagerPtrConst;
-class GenlistManager;
-typedef shared_ptr<GenlistManager> GenlistManagerPtr;
-
-/**
- * Manages list of url matches (URL from history). Manages top layout, creates
- * widget displaying url items.
- */
-class UrlHistoryList
-{
-public:
-    UrlHistoryList(WPUStatesManagerPtrConst webPageUiStatesMgr);
-    virtual ~UrlHistoryList();
-    void setMembers(Evas_Object* parent, Evas_Object* chainObject);
-    Evas_Object* getLayout();
-    bool getGenlistVisible();
-
-    /**
-     * On uri entry widget "changed,user" signal.
-     *
-     * @param matchedEntries The entries matches for editedUrl
-     */
-    void onURLEntryEditedByUser(const string& editedUrl,
-            shared_ptr<services::HistoryItemVector> matchedEntries);
-    void hideWidget();
-    void onBackPressed();
-
-    /**
-     * @return True if widget is focused.
-     */
-    bool getWidgetFocused() const;
-    void onListWidgetFocusChange(bool focused);
-    void listWidgetFocusedFromUri();
-    void saveEntryAsEditedContent();
-    void saveEntryAsURLContent();
-    void restoreEntryEditedContent();
-    void restoreEntryURLContent();
-    int getItemsNumberMax() const;
-    int getKeywordLengthMin() const;
-    boost::signals2::signal<void (const std::string&)> openURL;
-    boost::signals2::signal<void (const std::string&)> uriChanged;
-
-private:
-    void createLayout(Evas_Object* parentLayout);
-    void onItemSelect(std::string content);
-
-    /**
-     * On genlist's item focus change.
-     */
-    void onItemFocusChange();
-
-    /**
-     * Main layout is not setting genlist as a swallow in the beginnging,
-     * because it will cover view in WebPageUi.
-     */
-    void onGenlistCreated(Evas_Object*);
-    static void _uri_entry_editing_changed_user(void* data, Evas_Object* obj, void* event_info);
-
-    GenlistManagerPtr m_genlistManager;
-    WPUStatesManagerPtrConst m_webPageUiStatesMgr;
-    // the maximum items number on a list
-    const int ITEMS_NUMBER_MAX;
-    // the minimum length of the keyword used to search matches
-    const int KEYWORD_LENGTH_MIN;
-    Evas_Object* m_parent;
-    // entry widget from which change signals are received
-    Evas_Object* m_entry;
-    Evas_Object* m_layout;
-    string m_edjFilePath;
-    // content of the edited entry, needed to restore edited value
-    string m_entryEditedContent;
-    // content of the entry before edition: needed to restore original URL value
-    string m_entryURLContent;
-    bool m_widgetFocused;
-    GenlistFocused m_genlistFocusedCallback;
-    tools::EflTools::EcoreTimerCaller<GenlistFocused> m_timerGenlistFocused;
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* URLHISTORYLIST_H_ */
diff --git a/services/WebPageUI/UrlHistoryList/UrlMatchesStyler.cpp b/services/WebPageUI/UrlHistoryList/UrlMatchesStyler.cpp
deleted file mode 100755 (executable)
index 508951b..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "UrlMatchesStyler.h"
-
-namespace tizen_browser {
-namespace base_ui {
-
-UrlMatchesStyler::UrlMatchesStyler() :
-        TAG_WHOLE_URL(
-                "<align=left><color=" + FONT_COLOR_NORMAL + "><font_size="
-                        + FONT_SIZE + ">"), TAG_WHOLE_URL_CLOSE(
-                "</color></font></align>"), TAG_HIGHLIGHT("<font_weight=bold>"),
-                TAG_HIGHLIGHT_CLOSE("</font_weight>"), TAG_COLOR(
-                "<color=" + FONT_COLOR_HIGHLIGHT + ">"), TAG_COLOR_CLOSE(
-                closeTag(TAG_COLOR)), TAG_COMPLETE(TAG_HIGHLIGHT + TAG_COLOR), TAG_COMPLETE_CLOSE(
-                TAG_HIGHLIGHT_CLOSE + TAG_COLOR_CLOSE), TAGS_COMPLETE_LEN(
-                TAG_COMPLETE.length() + TAG_COMPLETE_CLOSE.length())
-{
-}
-
-UrlMatchesStyler::~UrlMatchesStyler()
-{
-}
-
-string UrlMatchesStyler::closeTag(const string& tag) const
-{
-    string closedTag(tag);
-    return string(closedTag.insert(1, "/"));
-}
-
-string UrlMatchesStyler::getUrlHighlightedMatches(const string& styledUrl,
-        const string& highlightingKeywords) const
-{
-    vector<string> keywords;
-    splitKeywordsString(highlightingKeywords, keywords);
-
-    int_pairs rangesHighlight;
-    for (auto key : keywords) {
-        fillOccuranceRanges(styledUrl, key, rangesHighlight);
-    }
-
-    int_pairs mergedRangesHighlight;
-    mergeRanges(rangesHighlight, mergedRangesHighlight);
-    return getTaggedString(styledUrl, mergedRangesHighlight);
-}
-
-void UrlMatchesStyler::splitKeywordsString(const string& keywordsString,
-        vector<string>& resultKeywords) const
-{
-    boost::algorithm::split(resultKeywords, keywordsString,
-            boost::is_any_of("\t "), boost::token_compress_on);
-    // remove empty elements
-    for (auto it = resultKeywords.begin(); it != resultKeywords.end();) {
-        if ((*it).empty()) {
-            it = resultKeywords.erase(it);
-        } else {
-            ++it;
-        }
-    }
-}
-
-void UrlMatchesStyler::fillOccuranceRanges(const string& _checkedString,
-        const string& _searchedMatch, int_pairs& resultRanges) const
-{
-    if (_checkedString.empty() || _searchedMatch.empty())
-        return;
-
-    string checkedString(_checkedString);
-    string searchedMatch(_searchedMatch);
-    boost::algorithm::to_lower(checkedString);
-    boost::algorithm::to_lower(searchedMatch);
-
-    int len = searchedMatch.length();
-    vector<int> positions;
-    getMatchesPositions(checkedString, searchedMatch, positions);
-    for (auto pos : positions) {
-        resultRanges.push_back( { pos, pos + len - 1 });
-    }
-}
-
-void UrlMatchesStyler::getMatchesPositions(const string& checkedString,
-        const string& searchedMatch, vector<int>& resultPositions) const
-{
-    boost::regex match_regex(searchedMatch);
-    for (auto it = boost::sregex_iterator(checkedString.begin(),
-            checkedString.end(), match_regex); it != boost::sregex_iterator();
-            ++it) {
-        resultPositions.push_back(it->position());
-    }
-}
-
-void UrlMatchesStyler::mergeRanges(int_pairs& ranges, int_pairs& result) const
-{
-    if (ranges.size() == 0)
-        return;
-    sort(ranges.begin(), ranges.end());
-
-    auto current = *(ranges.begin());
-    for (auto it = ranges.begin() + 1; it != ranges.end(); ++it) {
-        if (current.second >= it->first) {
-            current.second = max(current.second, it->second);
-        } else {
-            result.push_back(current);
-            current = *it;
-        }
-    }
-    result.push_back(current);
-}
-
-string UrlMatchesStyler::getTaggedString(const string& strToHighlight,
-        const int_pairs& ranges) const
-{
-    string strResult(strToHighlight);
-    int insertOffset = 0;
-    for (auto pair : ranges) {
-        strResult.insert(pair.second + insertOffset + 1, TAG_COMPLETE_CLOSE);
-        strResult.insert(pair.first + insertOffset, TAG_COMPLETE);
-        insertOffset += TAGS_COMPLETE_LEN;
-    }
-    strResult.insert(strResult.length(), TAG_WHOLE_URL_CLOSE);
-    strResult.insert(0, TAG_WHOLE_URL);
-    return strResult;
-}
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
diff --git a/services/WebPageUI/UrlHistoryList/UrlMatchesStyler.h b/services/WebPageUI/UrlHistoryList/UrlMatchesStyler.h
deleted file mode 100755 (executable)
index 2be211f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef URLMATCHESSTYLER_H_
-#define URLMATCHESSTYLER_H_
-
-#include <string>
-#include <vector>
-#include <boost/algorithm/string.hpp>
-#include <boost/regex.hpp>
-#include "BrowserLogger.h"
-
-using namespace std;
-
-namespace tizen_browser {
-namespace base_ui {
-
-class UrlMatchesStyler
-{
-public:
-    UrlMatchesStyler();
-    virtual ~UrlMatchesStyler();
-
-    /**
-     * @brief  Get string containing EFL tags, which are highlighting given keywords.
-     * @param styledUrl url which will be styled
-     * @param highlightingKeyword keywords (entered url) indicating which
-     * fragments should be highlighted
-     * @return styledUrl enriched with EFL tags
-     */
-    string getUrlHighlightedMatches(const string& styledUrl,
-            const string& highlightingKeywords) const;
-
-private:
-    typedef vector<pair<int, int>> int_pairs;
-    const string FONT_COLOR_HIGHLIGHT = "#4088D3";
-    const string FONT_COLOR_NORMAL = "#888888";
-    const string FONT_SIZE = "35";
-    const string TAG_WHOLE_URL;
-    const string TAG_WHOLE_URL_CLOSE;
-    const string TAG_HIGHLIGHT, TAG_HIGHLIGHT_CLOSE;
-    const string TAG_COLOR, TAG_COLOR_CLOSE;
-    const string TAG_COMPLETE, TAG_COMPLETE_CLOSE;
-    const int TAGS_COMPLETE_LEN;
-
-    /**
-     * @brief adds '/' to a tag (<a> -> </a>)
-     * @param tag tag to be closed
-     * @return closed tag
-     */
-    string closeTag(const string& tag) const;
-    /**
-     * @brief splits given string by removing spaces
-     * @param keywordsString string to split
-     * @param resultKeywords vector to which result strings are stored
-     */
-    void splitKeywordsString(const string& keywordsString,
-            vector<string>& resultKeywords) const;
-    /**
-     * @brief Fills vector with ranges describing beginnings end ends of occurrences of one string in another.
-     * @param checkedString the subject of search
-     * @param searchedMatch match to be searched for
-     * @param resultRanges vector filled with found ranges
-     */
-    void fillOccuranceRanges(const string& checkedString,
-            const string& searchedMatch, int_pairs& resultRanges) const;
-    /**
-     * @brief Searches the string for positions of occurrences of another string.
-     * @param checkedString the subject of search
-     * @param searchedMatch string to be searched for
-     * @param resultPositions vector filled with result positions
-     */
-    void getMatchesPositions(const string& checkedString,
-            const string& searchedMatch, vector<int>& resultPositions) const;
-    /**
-     * @brief merges ranges
-     * @param ranges vector of ranges to merge
-     * @param result vector filled with merged ranges
-     */
-    void mergeRanges(int_pairs& ranges, int_pairs& result) const;
-    /**
-     * @brief get string enriched with opening and closing tags on given positions
-     * @param strToHighlight string to be enriched with tags
-     * @param ranges positions of opening and closing tags
-     * @param tag opening tag (for every pair.first)
-     * @param tagClose closing tag (for every pair.second)
-     * @return string with tags
-     */
-    string getTaggedString(const string& strToHighlight,
-            const int_pairs& ranges) const;
-
-};
-
-} /* namespace base_ui */
-} /* namespace tizen_browser */
-
-#endif /* URLMATCHESSTYLER_H_ */
index fdc4485..daeaba8 100755 (executable)
 #include "BrowserLogger.h"
 #include "ServiceManager.h"
 #include "BrowserAssert.h"
-#include "UrlHistoryList/UrlHistoryList.h"
 #include "WebPageUIStatesManager.h"
 #include <string>
 #include <app_control.h>
+#include <limits>
 
 namespace tizen_browser {
 namespace base_ui {
@@ -36,9 +36,14 @@ EXPORT_SERVICE(WebPageUI, "org.tizen.browser.webpageui")
 #define MAX_PROGRESS_LEVEL 20
 #define PROGRESS_STEP 0.05
 
+const double WebPageUI::PROGRESS_100 = 1.0 - std::numeric_limits<double>::epsilon();
+const tools::Color WebPageUI::DEFAULT_THEME = tools::Color();
+
 WebPageUI::WebPageUI()
     : m_parent(nullptr)
     , m_mainLayout(nullptr)
+    , m_previous_focus(nullptr)
+    , m_focus_pixel(nullptr)
 #if DUMMY_BUTTON
     , m_dummy_button(nullptr)
 #endif
@@ -47,17 +52,17 @@ WebPageUI::WebPageUI()
     , m_statesMgr(std::make_shared<WebPageUIStatesManager>(WPUState::MAIN_WEB_PAGE))
     , m_URIEntry(new URIEntry(m_statesMgr))
     , m_editQuickAccessUI(std::make_shared<EditQuickAccessUI>())
-    , m_urlHistoryList(std::make_shared<UrlHistoryList>(getStatesMgr()))
     , m_webviewLocked(false)
     , m_WebPageUIvisible(false)
-#if PWA
+    , m_desktopMode(false)
     , m_pwaInfo(nullptr)
-#endif
 #if GESTURE
     , m_gestureLayer(nullptr)
 #endif
     , m_uriBarHidden(false)
     , m_fullscreen(false)
+    , m_shouldOpenNewTab(true)
+    , m_currentTheme()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
@@ -89,11 +94,6 @@ Evas_Object* WebPageUI::getContent()
     return m_mainLayout;
 }
 
-UrlHistoryPtr WebPageUI::getUrlHistoryList()
-{
-    return m_urlHistoryList;
-}
-
 void WebPageUI::updateEngineStateUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -110,8 +110,9 @@ void WebPageUI::updateEngineStateUI()
             default:
                 BROWSER_LOGE("[%s:%d] Unknown state!", __PRETTY_FUNCTION__, __LINE__);
         }
-        m_bottomButtonBar->setButtonsColor(*state == basic_webengine::State::SECRET);
-        m_rightButtonBar->setButtonsColor(*state == basic_webengine::State::SECRET);
+        (*state == basic_webengine::State::SECRET) ?
+            changeButtonsColor(true) :
+            changeUIColor(m_currentTheme.r, m_currentTheme.g, m_currentTheme.b, m_currentTheme.a);
     } else {
         BROWSER_LOGE("[%s:%d] Wrong state value!", __PRETTY_FUNCTION__, __LINE__);
     }
@@ -134,6 +135,7 @@ void WebPageUI::showUI()
 
     if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
         setQuickAccessView();
+        changeUIColor();
     }
 
     m_WebPageUIvisible = true;
@@ -141,6 +143,7 @@ void WebPageUI::showUI()
     elm_object_event_callback_add(m_bottomButtonBar->getContent(), _cb_down_pressed_on_urlbar, this);
     elm_object_event_callback_add(m_rightButtonBar->getContent(), _cb_down_pressed_on_urlbar, this);
     elm_object_event_callback_add(m_URIEntry->getContent(), _cb_down_pressed_on_urlbar, this);
+
 #if GESTURE
     elm_gesture_layer_cb_add(m_gestureLayer, ELM_GESTURE_N_LINES, ELM_GESTURE_STATE_MOVE, _gesture_move, this);
     elm_gesture_layer_line_min_length_set(m_gestureLayer, SWIPE_MOMENTUM_TRESHOLD);
@@ -155,7 +158,7 @@ void WebPageUI::hideUI()
     m_URIEntry->loadFinished();
     evas_object_hide(m_mainLayout);
 
-    if(m_statesMgr->equals(WPUState::QUICK_ACCESS))
+    if (m_statesMgr->equals(WPUState::QUICK_ACCESS))
         hideQuickAccess();
 
     evas_object_hide(elm_object_part_content_get(m_mainLayout, "web_view"));
@@ -184,7 +187,7 @@ void WebPageUI::loadStarted()
 
 void WebPageUI::progressChanged(double progress)
 {
-    if (progress == 1.0) {
+    if (progress > PROGRESS_100) {
         hideProgressBar();
     } else {
         int level = (int)(progress * MAX_PROGRESS_LEVEL);
@@ -232,28 +235,27 @@ void WebPageUI::setMainContent(Evas_Object* content)
     evas_object_smart_callback_add(content, "mouse,down", _content_clicked, this);
 #endif
     updateManualRotation();
+
     evas_object_show(content);
 }
 
-void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string uri, bool loading)
+void WebPageUI::switchViewToWebPage(Evas_Object* content, const std::string& uri, bool loading)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if(m_statesMgr->equals(WPUState::QUICK_ACCESS))
-    {
+    if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
         hideQuickAccess();
         m_statesMgr->set(WPUState::MAIN_WEB_PAGE);
     }
     setMainContent(content);
     elm_object_signal_emit(m_mainLayout, "shiftright_uri", "ui");
-#if DUMMY_BUTTON
-    elm_object_signal_emit(m_mainLayout, "show,dummy_button", "");
-#endif
+    elm_object_signal_emit(m_mainLayout, "show,web,view", "");
     updateURIBar(uri, loading);
 }
 
 void WebPageUI::setQuickAccessView()
 {
     elm_object_signal_emit(m_mainLayout, "shiftback_uri", "ui");
+    elm_object_signal_emit(m_mainLayout, "show,quick,access", "");
     hideProgressBar();
     m_URIEntry->changeUri("");
     m_URIEntry->showSecureIcon(false, false);
@@ -265,12 +267,17 @@ void WebPageUI::switchViewToQuickAccess(Evas_Object* content)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 
-    m_statesMgr->set(WPUState::QUICK_ACCESS);
-    setMainContent(content);
-    setQuickAccessView();
-#if DUMMY_BUTTON
-    elm_object_signal_emit(m_mainLayout, "hide,dummy_button", "");
-#endif
+    if (!m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
+        Edje_Message_Int message;
+        message.val = 0;
+        edje_object_message_send(elm_layout_edje_get(m_mainLayout), EDJE_MESSAGE_INT, 0, &message);
+
+        m_statesMgr->set(WPUState::QUICK_ACCESS);
+        setMainContent(content);
+        setQuickAccessView();
+        m_shouldOpenNewTab = false;
+        elm_object_signal_emit(m_mainLayout, "show,quick,access", "");
+    }
 }
 
 void WebPageUI::setMostVisitedSelectedItemsCountInEditMode(int count)
@@ -283,7 +290,7 @@ void WebPageUI::faviconClicked(void* data, Evas_Object*, const char*, const char
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     WebPageUI* self = reinterpret_cast<WebPageUI*>(data);
-    if(!self->stateEquals({ WPUState::QUICK_ACCESS, WPUState::MAIN_ERROR_PAGE })) {
+    if (!self->stateEquals({ WPUState::QUICK_ACCESS, WPUState::MAIN_ERROR_PAGE })) {
         self->getURIEntry().clearFocus();
     }
 }
@@ -292,10 +299,10 @@ Eina_Bool WebPageUI::_cb_down_pressed_on_urlbar(void *data, Evas_Object */*obj*/
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     WebPageUI* self = reinterpret_cast<WebPageUI*>(data);
-    if(type == EVAS_CALLBACK_KEY_DOWN) {
+    if (type == EVAS_CALLBACK_KEY_DOWN) {
         Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event_info);
         const std::string keyName = ev->keyname;
-        if(!keyName.compare("Down")){
+        if (!keyName.compare("Down")) {
             self->lockWebview();
         }
     }
@@ -306,17 +313,17 @@ void WebPageUI::setTabsNumber(int tabs)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (tabs == 0) {
-        elm_object_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", "");
+        elm_object_translatable_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", "");
     } else {
-        elm_object_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
+        elm_object_translatable_part_text_set(m_bottomButtonBar->getContent(), "tabs_number", (boost::format("%1%") % tabs).str().c_str());
     }
 }
 
 void WebPageUI::lockWebview()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if(isWebPageUIvisible()) {
-        if(m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
+    if (isWebPageUIvisible()) {
+        if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
             elm_object_focus_custom_chain_unset(m_mainLayout);
             elm_object_focus_custom_chain_append(m_mainLayout, elm_object_part_content_get(m_mainLayout, "web_view"), NULL);
             m_webviewLocked = true;
@@ -324,26 +331,6 @@ void WebPageUI::lockWebview()
     }
 }
 
-void WebPageUI::lockUrlHistoryList()
-{
-    elm_object_focus_custom_chain_unset(m_mainLayout);
-    elm_object_focus_custom_chain_append(m_mainLayout,
-            getUrlHistoryList()->getLayout(), NULL);
-    getUrlHistoryList()->listWidgetFocusedFromUri();
-    elm_object_focus_set(getUrlHistoryList()->getLayout(), EINA_TRUE);
-}
-
-void WebPageUI::unlockUrlHistoryList()
-{
-    elm_object_focus_set(m_URIEntry->getEntryWidget(), EINA_TRUE);
-    getUrlHistoryList()->onListWidgetFocusChange(false);
-}
-
-void WebPageUI::setFocusOnSuspend()
-{
-    elm_object_focus_set(m_rightButtonBar->getButton("tab_button"), EINA_TRUE);
-}
-
 void WebPageUI::fullscreenModeSet(bool state)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -380,13 +367,15 @@ void WebPageUI::orientationChanged()
             if (m_uriBarHidden)
                 elm_object_signal_emit(m_mainLayout, "hide_uri_bar_vertical", "ui");
         }
+
+        if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
+            qaOrientationChanged();
+        } else if (m_statesMgr->equals(WPUState::EDIT_MODE)) {
+            m_editQuickAccessUI->orientationChanged(*landscape);
+        }
     }
     else
         BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
-
-    if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
-        qaOrientationChanged();
-    }
 }
 
 void WebPageUI::showContextMenu()
@@ -395,15 +384,20 @@ void WebPageUI::showContextMenu()
 
     boost::optional<Evas_Object*> window = getWindow();
     if (window) {
+        m_previous_focus = elm_object_focused_object_get(m_mainLayout);
+        elm_object_focus_set(m_focus_pixel, EINA_TRUE);
         createContextMenu(*window);
 
         if (m_statesMgr->equals(WPUState::QUICK_ACCESS)) {
             //TODO: Add translation
             boost::optional<bool> isMostVisitedOpt(isMostVisited());
-            if (!isMostVisitedOpt || !(*isMostVisitedOpt))
+            if (!isMostVisitedOpt || !(*isMostVisitedOpt)) {
                 elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_EDIT_QUICK_ACCESS_ABB"), nullptr, _cm_edit_qa_clicked, this);
-            else
-                elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_DELETE"), nullptr, _cm_delete_mv_clicked, this);
+            } else {
+                boost::optional<int> mostVisitedItemsCount = getMostVisitedCount();
+                if (mostVisitedItemsCount > 0)
+                    elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_SK_DELETE_ABB"), nullptr, _cm_delete_mv_clicked, this);
+            }
         } else if (m_statesMgr->equals(WPUState::MAIN_WEB_PAGE)) {
             elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_SHARE"), nullptr, _cm_share_clicked, this);
             elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_FIND_ON_PAGE"), nullptr, _cm_find_on_page_clicked, this);
@@ -415,7 +409,7 @@ void WebPageUI::showContextMenu()
                     elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REMOVE_FROM_BOOKMARKS_ABB"), nullptr,
                         _cm_delete_bookmark_clicked, this);
                 else
-                    elm_ctxpopup_item_append(m_ctxpopup, "Add to Bookmarks", nullptr,
+                    elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_BODY_ADD_TO_BOOKMARKS"), nullptr,
                         _cm_bookmark_flow_clicked, this);
             } else
                 BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
@@ -446,12 +440,27 @@ void WebPageUI::showContextMenu()
         BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__);
 }
 
+void WebPageUI::returnFocusAfterHideContextMenu()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+    if (m_previous_focus) {
+        elm_object_focus_set(m_previous_focus, EINA_TRUE);
+        m_previous_focus = nullptr;
+    }
+}
+
+void WebPageUI::dismissContextMenu()
+{
+    m_previous_focus = nullptr;
+    evas_object_smart_callback_call(m_ctxpopup, "dismissed", nullptr);
+}
+
 void WebPageUI::_cm_edit_qa_clicked(void* data, Evas_Object*, void* )
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->m_statesMgr->set(WPUState::EDIT_MODE);
         webPageUI->quickAccessEdit();
     } else
@@ -463,7 +472,7 @@ void WebPageUI::_cm_delete_mv_clicked(void *data, Evas_Object *, void *)
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->m_statesMgr->set(WPUState::EDIT_MODE);
         webPageUI->deleteMostVisited();
     } else {
@@ -476,7 +485,7 @@ void WebPageUI::_cm_share_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
 
     std::string uri = webPageUI->getURI();
     webPageUI->launch_share(uri.c_str());
@@ -489,7 +498,9 @@ void WebPageUI::_cm_find_on_page_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        elm_object_signal_emit(webPageUI->m_mainLayout, "show_findonpage", "ui");
+        webPageUI->setBarsShown(false);
+        webPageUI->dismissContextMenu();
         webPageUI->showFindOnPageUI();
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -500,7 +511,7 @@ void WebPageUI::_cm_delete_bookmark_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->deleteBookmark();
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -511,7 +522,7 @@ void WebPageUI::_cm_bookmark_flow_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->showBookmarkFlowUI();
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
@@ -522,7 +533,7 @@ void WebPageUI::_cm_add_to_qa_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         auto signal = webPageUI->getTitle();
         if (signal)
             webPageUI->addToQuickAccess(webPageUI->getURI(), *signal);
@@ -537,7 +548,7 @@ void WebPageUI::_cm_desktop_view_page_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->switchToDesktopMode();
         webPageUI->setDesktopMode(true);
     } else
@@ -549,7 +560,7 @@ void WebPageUI::_cm_mobile_view_page_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->switchToMobileMode();
         webPageUI->setDesktopMode(false);
     } else
@@ -561,12 +572,12 @@ void WebPageUI::_cm_settings_clicked(void* data, Evas_Object*, void* )
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     if (data != nullptr) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
         webPageUI->showSettingsUI();
     } else
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
 }
-#if PWA
+
 void WebPageUI::_cm_add_to_hs_clicked(void* data, Evas_Object*, void* )
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -574,7 +585,7 @@ void WebPageUI::_cm_add_to_hs_clicked(void* data, Evas_Object*, void* )
     if (data) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
         webPageUI->m_pwaInfo = std::make_shared<pwaInfo>();
-        _cm_dismissed(nullptr, webPageUI->m_ctxpopup, nullptr);
+        webPageUI->dismissContextMenu();
 
         // send request API.
         webPageUI->pwaRequestManifest();
@@ -583,9 +594,68 @@ void WebPageUI::_cm_add_to_hs_clicked(void* data, Evas_Object*, void* )
         BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
 }
-#endif
 
-std::string WebPageUI::getURI() {
+void WebPageUI::urlbarOffsetSet(const float& offset)
+{
+    BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+    Edje_Message_Int message;
+    message.val = static_cast<int>(offset);
+    if (message.val % 2 == 0)
+        edje_object_message_send(elm_layout_edje_get(m_mainLayout), EDJE_MESSAGE_INT, 0, &message);
+}
+
+void WebPageUI::bottombarOffsetSet(const float& offset)
+{
+    BROWSER_LOGD("[%s:%d] %f", __PRETTY_FUNCTION__, __LINE__, offset);
+    Edje_Message_Int message;
+    message.val = static_cast<int>(offset);
+    auto edje = elm_layout_edje_get(m_mainLayout);
+    if (message.val % 2 == 0) {
+        edje_object_message_send(edje, EDJE_MESSAGE_INT, 1, &message);
+        edje_object_message_signal_process(edje);
+    }
+}
+
+bool WebPageUI::isBrighterThanDefault(const int& r, const int& g, const int& b)
+{
+    // Calculation based on https://en.wikipedia.org/wiki/Relative_luminance
+    double luminance { 0.2126*r + 0.7152*g + 0.00722*b };
+    double defLum { 0.2126*DEFAULT_THEME.r + 0.7152*DEFAULT_THEME.g + 0.00722*DEFAULT_THEME.b };
+    return (luminance > defLum - 50);
+}
+
+void WebPageUI::changeButtonsColor(const bool& isDarkBackground)
+{
+    m_bottomButtonBar->setButtonsColor(isDarkBackground);
+    m_rightButtonBar->setButtonsColor(isDarkBackground);
+}
+
+void WebPageUI::changeUIColor(const int& r, const int& g , const int& b, const int& a)
+{
+    BROWSER_LOGD("[%s:%d] %d %d %d %d", __PRETTY_FUNCTION__, __LINE__, r, g, b, a);
+    auto state = getEngineState();
+    if (*state == basic_webengine::State::NORMAL) {
+        if (!r && !g && !b && !a) {
+            elm_color_class_color_set(
+                "defaultBg",
+                DEFAULT_THEME.r,
+                DEFAULT_THEME.g,
+                DEFAULT_THEME.b,
+                DEFAULT_THEME.a);
+            changeButtonsColor(false);
+            m_currentTheme = DEFAULT_THEME;
+        } else {
+            elm_color_class_color_set("defaultBg", r, g ,b, a);
+            m_currentTheme = tools::Color(r, g, b, a);
+            changeButtonsColor(a && !isBrighterThanDefault(r,g,b));
+        }
+    } else {
+        changeButtonsColor(true);
+    }
+}
+
+std::string WebPageUI::getURI()
+{
     auto retVal = requestCurrentPageForWebPageUI();
     if(retVal && !(*retVal).empty()) {
         return *retVal;
@@ -626,16 +696,35 @@ void WebPageUI::createLayout()
 
     elm_layout_signal_callback_add(m_URIEntry->getContent(), "slide_websearch", "elm", faviconClicked, this);
 
-//    elm_theme_extension_add(nullptr, edjePath("WebPageUI/UrlHistoryList.edj").c_str());
-//    m_urlHistoryList->setMembers(m_mainLayout, m_URIEntry->getEntryWidget());
-//    elm_object_part_content_set(m_mainLayout, "url_history_list", m_urlHistoryList->getLayout());
-
     connectActions();
 
 #if GESTURE
     // will be attatch on every 'setMainContent'
     m_gestureLayer = elm_gesture_layer_add(m_mainLayout);
 #endif
+
+    m_focus_pixel = elm_button_add(m_mainLayout);
+    elm_object_style_set(m_focus_pixel, "invisible_button");
+    evas_object_size_hint_align_set(m_focus_pixel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+    evas_object_size_hint_weight_set(m_focus_pixel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    elm_object_focus_allow_set(m_focus_pixel, EINA_TRUE);
+    evas_object_show(m_focus_pixel);
+    elm_object_part_content_set(m_mainLayout, "focus_pixel", m_focus_pixel);
+    evas_object_smart_callback_add(m_focus_pixel, "focused", _focus_pixel_focused, nullptr);
+    evas_object_smart_callback_add(m_focus_pixel, "unfocused", _focus_pixel_unfocused, nullptr);
+
+    elm_atspi_accessible_role_set(m_focus_pixel, ELM_ATSPI_ROLE_REDUNDANT_OBJECT);
+    elm_atspi_accessible_can_highlight_set(m_focus_pixel, EINA_FALSE);
+}
+
+void WebPageUI::_focus_pixel_focused(void *, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+}
+
+void WebPageUI::_focus_pixel_unfocused(void *, Evas_Object *, void *)
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
 }
 
 #if DUMMY_BUTTON
@@ -655,44 +744,60 @@ void WebPageUI::createDummyButton()
 
         evas_object_smart_callback_add(m_dummy_button, "focused", _dummy_button_focused, this);
         evas_object_smart_callback_add(m_dummy_button, "unfocused", _dummy_button_unfocused, this);
+        evas_object_smart_callback_add(m_dummy_button, "mouse,down", _dummy_button_clicked, this);
 
         elm_atspi_accessible_role_set(m_dummy_button, ELM_ATSPI_ROLE_REDUNDANT_OBJECT);
         elm_atspi_accessible_can_highlight_set(m_dummy_button, EINA_FALSE);
     }
 }
 
+void WebPageUI::setDummyButtonFocus()
+{
+    elm_object_focus_set(m_dummy_button, EINA_TRUE);
+}
+
 void WebPageUI::_dummy_button_focused(void *data, Evas_Object *, void *)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (data != nullptr) {
+    if (data) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
         webPageUI->focusWebView();
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
 }
 
 void WebPageUI::_dummy_button_unfocused(void *data, Evas_Object *, void *)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (data != nullptr) {
+    if (data) {
         WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
         webPageUI->unfocusWebView();
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
     }
 }
 
-#endif
-
-void WebPageUI::_bookmark_manager_clicked(void * data, Evas_Object *, void *)
+void WebPageUI::_dummy_button_clicked(void *data, Evas_Object *, void *)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    WebPageUI*  webpageUI = static_cast<WebPageUI*>(data);
-    webpageUI->bookmarkManagerClicked();
+    if (data) {
+        WebPageUI* webPageUI = static_cast<WebPageUI*>(data);
+        elm_object_focus_set(webPageUI->m_dummy_button, EINA_TRUE);
+    } else {
+        BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__);
+    }
 }
 
+#endif
+
 void WebPageUI::setContentFocus()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (getURIEntry().hasFocus())
+    if (getURIEntry().hasFocus()) {
         getURIEntry().clearFocus();
+        focusWebView();
+    }
 }
 
 void WebPageUI::showBottomBar(bool isShown)
@@ -718,22 +823,23 @@ void WebPageUI::_content_clicked(void *data, Evas_Object *, void *)
 void WebPageUI::createActions()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_back = sharedAction(new Action(_("IDS_BR_BUTTON_BACK_ABB")));
+    // Text must me forwarded to Action as not translated
+    m_back = sharedAction(new Action("IDS_BR_BUTTON_BACK_ABB"));
     m_back->setIcon("toolbar_prev");
 
-    m_forward = sharedAction(new Action(_("IDS_BR_SK_NEXT")));
+    m_forward = sharedAction(new Action("IDS_BR_OPT_GOFORWARD"));
     m_forward->setIcon("toolbar_next");
 
-    m_addTab = sharedAction(new Action(_("IDS_BR_BUTTON_NEW_TAB_ABB2")));
+    m_addTab = sharedAction(new Action("IDS_BR_BUTTON_NEW_TAB_ABB2"));
     m_addTab->setIcon("add_tab");
 
     m_homePage = sharedAction(new Action("Home"));
     m_homePage->setIcon("toolbar_home");
 
-    m_bookmarks = sharedAction(new Action(_("IDS_BR_BODY_BOOKMARKS")));
+    m_bookmarks = sharedAction(new Action("IDS_BR_BODY_BOOKMARKS"));
     m_bookmarks->setIcon("toolbar_bookmark");
 
-    m_tabs = sharedAction(new Action(_("IDS_BR_SK_TABS")));
+    m_tabs = sharedAction(new Action("IDS_BR_SK_TABS"));
     m_tabs->setIcon("toolbar_tabs");
 }
 
@@ -777,12 +883,6 @@ void WebPageUI::hideWebView()
     evas_object_hide(elm_object_part_content_unset(m_mainLayout, "web_view"));
 }
 
-void WebPageUI::setErrorButtons()
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    m_forward->setEnabled(false);
-}
-
 void WebPageUI::setButtonsDisabled()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
@@ -858,34 +958,8 @@ void WebPageUI::mobileEntryUnfocused()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     elm_object_signal_emit(m_mainLayout, "decrease_unfocused_uri", "ui");
-
-    // delay hiding on one efl loop iteration to enable genlist item selected callback to come
-    ecore_timer_add(0.0, _hideDelay, this);
-}
-
-Eina_Bool WebPageUI::_hideDelay(void *data)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    auto self = static_cast<WebPageUI*>(data);
-    self->m_urlHistoryList->hideWidget();
-    return ECORE_CALLBACK_CANCEL;
 }
 
-#if PWA
-void WebPageUI::setDisplayMode(WebPageUI::WebDisplayMode mode)
-{
-    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-    if (mode == WebDisplayMode::WebDisplayModeFullscreen)
-        elm_object_signal_emit(m_mainLayout, "webview_fullscreen", "ui");
-    else if (mode == WebDisplayMode::WebDisplayModeStandalone)
-        elm_object_signal_emit(m_mainLayout, "webview_fullscreen", "ui");
-    else if (mode == WebDisplayMode::WebDisplayModeMinimalUi)
-        BROWSER_LOGD("Not implemented");
-    else if (mode == WebDisplayMode::WebDisplayModeBrowser)
-        elm_object_signal_emit(m_mainLayout, "webview_default", "ui");
-}
-#endif
-
 void WebPageUI:: launch_share(const char *uri)
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
index cd8389d..2b9c331 100755 (executable)
 #include "URIEntry.h"
 #include "AbstractWebEngine/State.h"
 #include "EditQuickAccessUI.h"
+#include "core/Tools/GeneralTools.h"
 
 namespace tizen_browser {
+
 namespace base_ui {
 
 class WebPageUIStatesManager;
 enum class WPUState;
-class UrlHistoryList;
-typedef std::shared_ptr<UrlHistoryList> UrlHistoryPtr;
 
 class BROWSER_EXPORT WebPageUI
-        : public interfaces::AbstractContextMenu
-        , public tizen_browser::core::AbstractService
-        , public tizen_browser::interfaces::AbstractUIComponent
-        , public tizen_browser::interfaces::AbstractRotatable
+    : public interfaces::AbstractContextMenu
+    , public core::AbstractService
+    , public interfaces::AbstractUIComponent
+    , public interfaces::AbstractRotatable
 {
 public:
-
-#if PWA
-    typedef enum OrientationType {
+    enum orientationType {
         WebScreenOrientationLockDefault = 0, // Equivalent to unlock.
         WebScreenOrientationLockPortraitPrimary,
         WebScreenOrientationLockPortraitSecondary,
@@ -57,16 +55,16 @@ public:
         WebScreenOrientationLockLandscape,
         WebScreenOrientationLockPortrait,
         WebScreenOrientationLockNatural,
-    } orientationType;
+    };
 
-    typedef enum WebDisplayMode {
+    enum WebDisplayMode {
         WebDisplayModeUndefined = 0,
         WebDisplayModeBrowser,
         WebDisplayModeMinimalUi,
         WebDisplayModeStandalone,
         WebDisplayModeFullscreen,
         WebDisplayModeLast = WebDisplayModeFullscreen
-    } webDisplayMode;
+    };
 
     struct pwaInfo {
         std::string     id;
@@ -79,24 +77,24 @@ public:
         long            themeColor;
         long            backgroundColor;
     };
-#endif
 
     WebPageUI();
     virtual ~WebPageUI();
-    virtual std::string getName();
-    virtual void init(Evas_Object* parent);
-    virtual Evas_Object* getContent();
-    UrlHistoryPtr getUrlHistoryList();
-    virtual void showUI();
-    virtual void hideUI();
+    std::string getName() override;
+    void init(Evas_Object* parent) override;
+    Evas_Object* getContent() override;
+    void showUI() override;
+    void hideUI() override;
     void updateEngineStateUI();
 #if DUMMY_BUTTON
     void createDummyButton();
+    void setDummyButtonFocus();
 #endif
     void fullscreenModeSet(bool state);
-    virtual void orientationChanged() override;
+    void orientationChanged() override;
     //AbstractContextMenu interface implementation
-    virtual void showContextMenu() override;
+    void showContextMenu() override;
+    void returnFocusAfterHideContextMenu();
 
     void loadStarted();
     void progressChanged(double progress);
@@ -112,8 +110,10 @@ public:
      * @returns True if one of the given states equals to the manager's state
      */
     bool stateEquals(std::initializer_list<WPUState> states) const;
+    void setShouldOpenNewTab(bool should) { m_shouldOpenNewTab = should; }
+    bool shouldOpenNewTab() const { return m_shouldOpenNewTab; }
     bool isWebPageUIvisible() { return m_WebPageUIvisible; }
-    void switchViewToWebPage(Evas_Object* content, const std::string uri, bool loading);
+    void switchViewToWebPage(Evas_Object* content, const std::string& uri, bool loading);
     void switchViewToQuickAccess(Evas_Object* content);
     URIEntry& getURIEntry() const { return *m_URIEntry.get(); }
     std::shared_ptr<EditQuickAccessUI> getQuickAccessEditUI() { return m_editQuickAccessUI; }
@@ -123,19 +123,22 @@ public:
     void setBackButtonEnabled(bool enabled) { m_back->setEnabled(enabled); }
     void setForwardButtonEnabled(bool enabled) { m_forward->setEnabled(enabled); }
     void lockWebview();
-    void lockUrlHistoryList();
-    void unlockUrlHistoryList();
-    void setFocusOnSuspend();
     void mobileEntryFocused();
     void mobileEntryUnfocused();
     void setContentFocus();
     void showBottomBar(bool isShown);
-    static Eina_Bool _hideDelay(void *data);
     void setDesktopMode(bool desktopMode) {m_desktopMode = desktopMode;}
     bool getDesktopMode() { return m_desktopMode; }
-#if PWA
-    void setDisplayMode(WebDisplayMode mode);
-#endif
+    void urlbarOffsetSet(const float& offset);
+    void bottombarOffsetSet(const float& offset);
+    void changeButtonsColor(const bool& isDarkBackground);
+    void changeUIColor(
+        const int& r = DEFAULT_THEME.r,
+        const int& g = DEFAULT_THEME.g,
+        const int& b = DEFAULT_THEME.b,
+        const int& a = DEFAULT_THEME.a);
+    bool isBrighterThanDefault(const int& r, const int& g, const int& b);
+
     std::string getURI();
 
     boost::signals2::signal<void ()> backPage;
@@ -147,7 +150,6 @@ public:
     boost::signals2::signal<void ()> qaOrientationChanged;
     boost::signals2::signal<void ()> hideQuickAccess;
     boost::signals2::signal<void ()> showQuickAccess;
-    boost::signals2::signal<void ()> bookmarkManagerClicked;
     boost::signals2::signal<void ()> focusWebView;
     boost::signals2::signal<void ()> unfocusWebView;
     boost::signals2::signal<void ()> addNewTab;
@@ -155,6 +157,7 @@ public:
     //AbstractContextMenu signals
     boost::signals2::signal<bool ()> isBookmark;
     boost::signals2::signal<bool ()> isQuickAccess;
+    boost::signals2::signal<int ()> getMostVisitedCount;
     boost::signals2::signal<void ()> deleteBookmark;
     boost::signals2::signal<void ()> showBookmarkFlowUI;
     boost::signals2::signal<void ()> showFindOnPageUI;
@@ -170,23 +173,25 @@ public:
 
     boost::signals2::signal<std::string ()> requestCurrentPageForWebPageUI;
     boost::signals2::signal<basic_webengine::State ()> getEngineState;
-#if PWA
     boost::signals2::signal<void ()> pwaRequestManifest;
     boost::signals2::signal<void ()> getCountCheckSignal;
-#endif
+    boost::signals2::signal<void (bool value)> setBarsShown;
 
 private:
     static void faviconClicked(void* data, Evas_Object* obj, const char* emission, const char* source);
     static Eina_Bool _cb_down_pressed_on_urlbar(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
-    static void _bookmark_manager_clicked(void * data, Evas_Object *, void *);
+    static void _focus_pixel_focused(void *data, Evas_Object *, void *);
+    static void _focus_pixel_unfocused(void *data, Evas_Object *, void *);
 #if DUMMY_BUTTON
     static void _dummy_button_focused(void *data, Evas_Object *, void *);
     static void _dummy_button_unfocused(void *data, Evas_Object *, void *);
+    static void _dummy_button_clicked(void *data, Evas_Object *, void *);
 #endif
     static void _content_clicked(void * data, Evas_Object *, void *);
 #if GESTURE
     static Evas_Event_Flags _gesture_move(void *data, void *event_info);
 #endif
+    void dismissContextMenu();
     static void _cm_edit_qa_clicked(void*, Evas_Object*, void*);
     static void _cm_delete_mv_clicked(void*, Evas_Object*, void*);
     static void _cm_share_clicked(void*, Evas_Object*, void*);
@@ -197,9 +202,7 @@ private:
     static void _cm_desktop_view_page_clicked(void*, Evas_Object*, void*);
     static void _cm_mobile_view_page_clicked(void*, Evas_Object*, void*);
     static void _cm_settings_clicked(void*, Evas_Object*, void*);
-#if PWA
     static void _cm_add_to_hs_clicked(void*, Evas_Object*, void*);
-#endif
     static void launch_share(const char *uri);
 
     void createLayout();
@@ -209,7 +212,6 @@ private:
     void hideProgressBar();
     void hideFindOnPage();
     void hideWebView();
-    void setErrorButtons();
     void setButtonsDisabled();
     void setMainContent(Evas_Object* content);
     void updateURIBar(const std::string& uri, bool loading);
@@ -227,6 +229,8 @@ private:
 
     Evas_Object* m_parent;
     Evas_Object* m_mainLayout;
+    Evas_Object *m_previous_focus;
+    Evas_Object* m_focus_pixel;
 #if DUMMY_BUTTON
     Evas_Object* m_dummy_button;
 #endif
@@ -238,7 +242,6 @@ private:
     WPUStatesManagerPtr m_statesMgr;
     std::unique_ptr<URIEntry> m_URIEntry;
     std::shared_ptr<EditQuickAccessUI> m_editQuickAccessUI;
-    UrlHistoryPtr m_urlHistoryList;
     bool m_webviewLocked;
     bool m_WebPageUIvisible;
     bool m_desktopMode;
@@ -250,9 +253,7 @@ private:
     sharedAction m_bookmarks;
     sharedAction m_tabs;
 
-#if PWA
     std::shared_ptr<pwaInfo> m_pwaInfo;
-#endif
 
 #if GESTURE
     Evas_Object* m_gestureLayer;
@@ -261,6 +262,12 @@ private:
 #endif
     bool m_uriBarHidden;
     bool m_fullscreen;
+    bool m_shouldOpenNewTab;
+
+    tools::Color m_currentTheme;
+
+    static const double PROGRESS_100;
+    static const tools::Color DEFAULT_THEME;
 };
 
 
index 9722849..0bd2b3a 100755 (executable)
@@ -21,15 +21,13 @@ namespace tizen_browser {
 namespace base_ui {
 
 WebPageUIStatesManager::WebPageUIStatesManager(WPUState initialState) :
-        m_state(initialState)
+        m_state(initialState) ,
+        namesMap({{ WPUState::QUICK_ACCESS, "QUICK_ACCESS" },
+                  { WPUState::EDIT_MODE, "EDIT_MODE" },
+                  { WPUState::MAIN_WEB_PAGE, "MAIN_WEB_PAGE" },
+                  { WPUState::MAIN_ERROR_PAGE, "MAIN_ERROR_PAGE" },
+                  { WPUState::MAIN_INCOGNITO_PAGE, "MAIN_INCOGNITO_PAGE" }})
 {
-    namesMap = {
-        { WPUState::QUICK_ACCESS, "QUICK_ACCESS" },
-        { WPUState::EDIT_MODE, "EDIT_MODE" },
-        { WPUState::MAIN_WEB_PAGE, "MAIN_WEB_PAGE" },
-        { WPUState::MAIN_ERROR_PAGE, "MAIN_ERROR_PAGE" },
-        { WPUState::MAIN_INCOGNITO_PAGE, "MAIN_INCOGNITO_PAGE" }
-    };
 }
 
 void WebPageUIStatesManager::set(WPUState state) {
index 8b7d65f..8ca4cdf 100755 (executable)
@@ -38,7 +38,7 @@ enum class WPUState {
 class WebPageUIStatesManager
 {
 public:
-    WebPageUIStatesManager(WPUState initialState);
+    explicit WebPageUIStatesManager(WPUState initialState);
     virtual ~WebPageUIStatesManager() {}
 
     void set(WPUState state);
@@ -63,8 +63,8 @@ private:
 
 };
 
-typedef std::shared_ptr<WebPageUIStatesManager> WPUStatesManagerPtr;
-typedef std::shared_ptr<const WebPageUIStatesManager> WPUStatesManagerPtrConst;
+using WPUStatesManagerPtr = std::shared_ptr<WebPageUIStatesManager>;
+using WPUStatesManagerPtrConst = std::shared_ptr<const WebPageUIStatesManager>;
 
 } /* namespace base_ui */
 } /* namespace tizen_browser */
index e8ac74d..f594011 100755 (executable)
@@ -1,4 +1,4 @@
-#include "ImageButton.edc"
+#include "../../../core/Tools/edc/ImageButton.edc"
 #include "../../../core/Tools/edc/Spacer.edc"
 #include "../../../core/Tools/edc/ToolbarButton.edc"
 
index d7da974..ea20a79 100755 (executable)
@@ -1,4 +1,4 @@
-#include "ImageButton.edc"
+#include "../../../core/Tools/edc/ImageButton.edc"
 #include "../../../core/Tools/edc/Spacer.edc"
 #include "../../../core/Tools/edc/ToolbarButton.edc"
 
index dcf26df..d99bcb4 100755 (executable)
@@ -1,4 +1,4 @@
-#include "CustomButton.edc"
+#include "../../../core/Tools/edc/CustomButton.edc"
 
 #define URI_INPUTBOX_LENGTH 518
 #define URI_INPUTBOX_LENGTH_ENLARGED 656
@@ -7,6 +7,11 @@
 #define BORDER_WIDTH 5
 
 collections { base_scale: 2.6;
+
+    IMAGE_BUTTON("toolbar_input_ic_refresh.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_refresh.png")
+    IMAGE_BUTTON("toolbar_input_ic_security.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security.png")
+    IMAGE_BUTTON("toolbar_input_ic_security_off.png", BUTTON_ICON_DEFAULT_HEIGHT_INC, BUTTON_ICON_DEFAULT_WIDTH_INC, "toolbar_input_ic_security_off.png")
+
     group {
         name: "elm/entry/selection/browser_entry";
         parts {
@@ -90,146 +95,6 @@ collections { base_scale: 2.6;
             }
         }
     }
-    group {
-        name: "elm/entry/base-single/uri_entry";
-        color_classes {
-            color_class {
-                name: "guide_text_unselected_color";
-                color: 51 51 51 0.5;
-            }
-        }
-        styles {
-            style {
-                name: "browser-entry-uri-style-unselected";
-                base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#969696";
-                tag:  "br" "";
-            }
-            style {
-                name: "browser-entry-uri-style-selected";
-                base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#4088d3";
-                tag:  "br" "";
-            }
-            style {
-                name: "browser-entry-uri-style-selected-incognito";
-                base: "font=Sans:style=SVD_Medium font_size="40" wrap=none color=#4088d3";
-                tag:  "br" "";
-            }
-        }
-        data {
-            item: focus_highlight "off";
-        }
-        parts {
-
-            part {
-                name: "bg";
-                scale:1;
-                type: RECT;
-                mouse_events: 0;
-                description {
-                    state: "default" 0.0;
-                    color: 0 0 0 0;
-                    fixed: 0 1;
-                    min: 0 URI_INPUTBOX_HEIGHT;
-                    max: -1 URI_INPUTBOX_HEIGHT;
-                    align: 0.0 0.0;
-                }
-            }
-            part {
-                name: "label.text.clip";
-                scale:1;
-                type: RECT;
-                description {
-                    state: "default" 0.0;
-                }
-            }
-            part {
-                name: "elm.text";
-                scale: 1;
-                multiline: 0;
-                entry_mode: EDITABLE;
-                select_mode: DEFAULT;
-                cursor_mode: BEFORE;
-                type: TEXTBLOCK;
-                source: "elm/entry/selection/browser_entry";
-                source4: "elm/entry/cursor/browser_entry";
-                description {
-                    state: "default" 0.0;
-                    rel1.to: "bg";
-                    rel1.relative: 0.0 0.0;
-                    rel2.to: "bg";
-                    rel2.relative: 1.0 1.0;
-                    align: 0.0 0.0;
-                    text {
-                        style: "browser-entry-uri-style-selected";
-                        min: 0 1;
-                    }
-                }
-                description {
-                    state: "incognito" 0.0;
-                    align: 0.0 0.0;
-                    text {
-                        style: "browser-entry-uri-style-selected-incognito";
-                        min: 0 1;
-                    }
-                }
-            }
-            part {
-                name: "elm.guide";
-                scale:1;
-                type: TEXTBLOCK;
-                mouse_events: 0;
-                clip_to: "label.text.clip";
-                source4: "elm/entry/cursor/browser_entry";
-                description {
-                    state: "default" 0.0;
-                    rel1.to: "bg";
-                    rel1.relative: 0.0 0.0;
-                    rel1.offset: BORDER_WIDTH 0;
-                    rel2.relative: 1.0 1.0;
-                    max: -1 URI_INPUTBOX_HEIGHT;
-                    text {
-                        style: "browser-entry-uri-style-unselected";
-                        min: 0 1;
-                    }
-                }
-                description {
-                    state: "hidden" 0.0;
-                    inherit: "default" 0.0;
-                    visible: 0;
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focus";
-                signal: "load";
-                source: "";
-                action: FOCUS_SET;
-                target: "elm.text";
-            }
-            program {
-                name: "gdisabled";
-                signal: "elm,guide,disabled";
-                source: "elm";
-                action: STATE_SET "hidden" 0.0;
-                target: "elm.guide";
-            }
-            program {
-                name: "genabled";
-                signal: "elm,guide,enabled";
-                source: "elm";
-                action: STATE_SET "default" 0.0;
-                target: "elm.guide";
-            }
-            program {
-                name: "incognito_mode_uri_entry";
-                source: "ui";
-                signal: "uri_entry_incognito";
-                action: STATE_SET "incognito" 0.0;
-                target: "elm.text";
-            }
-        }
-    }//group
 
     group {
         name: "uri_entry_layout";
@@ -269,7 +134,7 @@ collections { base_scale: 2.6;
                     state: "default" 0.0;
                     min: 16 URI_INPUTBOX_HEIGHT;
                     max: 16 URI_INPUTBOX_HEIGHT;
-                    rel1.to: "left_spacer";
+                    rel1.to: "uri_entry_space";
                     rel1.relative: 0.0 0.0;
                     rel2.to: "uri_entry_space";
                     rel2.relative: 1.0 1.0;
diff --git a/services/WebPageUI/edc/UrlHistoryList.edc b/services/WebPageUI/edc/UrlHistoryList.edc
deleted file mode 100755 (executable)
index 386bd5c..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "../../../core/Tools/edc/SpacerRect.edc"
-
-#if PROFILE_MOBILE
-    #define HISTORY_ITEM_H 74
-#else
-    #define HISTORY_ITEM_H 82
-#endif
-
-collections {
-    #if PROFILE_MOBILE
-        base_scale: 2.6;
-    #else
-        base_scale: 2.0;
-    #endif
-    group {
-        name: "url_history_list";
-        parts
-        {
-            SPACER_RECT_VERTICAL("spacerTop", 0, 16, 0.0)
-            part {
-                name: "list_swallow";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    max: -1 -1;
-                    fixed: 0 1;
-                    align: 0.0 0.0;
-                    rel1 { relative: 0.0 1.0; to: "spacerTop"; }
-                }
-            }
-        }
-        script {
-            public message(Msg_Type:type,id, ...)
-            {
-                if((type == MSG_INT) && (id == 0))
-                {
-                    new x,y,h;
-                    h = getarg(2);
-                    custom_state(PART:"list_swallow","default",0.0);
-                    get_state_val(PART:"list_swallow",STATE_MAX,x,y);
-                    set_state_val(PART:"list_swallow",STATE_MAX,x,h);
-                    set_state(PART:"list_swallow","custom",0.0);
-                }
-            }
-        }
-    }
-
-    group {
-        name: "elm/genlist/item/url_historylist_grid_item/default";
-        data.item: "contents" "matched_url";
-        parts {
-            part {
-                name: "bg";
-                type: RECT;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    min: 0 HISTORY_ITEM_H;
-                    max: -1 HISTORY_ITEM_H;
-                    visible: 1;
-                    color: 255 255 255 255;
-                    align: 0.0 0.0;
-                }
-                description {
-                    state: "focused" 0.0;
-                    inherit: "default" 0.0;
-                    color: 0 119 246 255;
-                }
-            }
-            part {
-                name: "matched_url";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    fixed: 0 1;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    rel1 {
-                        to: "bg";
-                    }
-                    rel2 {
-                        to: "bg";
-                    }
-
-                }
-            }
-        }
-        programs {
-            program {
-                name: "focused";
-                signal: "mouse,in";
-                source: "matched_url";
-                action: STATE_SET "focused" 0.0;
-                target: "bg";
-            }
-            program {
-                name: "selected";
-                signal: "mouse,out";
-                source: "matched_url";
-                action: STATE_SET "default" 0.0;
-                target: "bg";
-            }
-        }
-    }
-
-    group {
-        name: "layoutMatchedUrl";
-        styles {
-            style {
-                name: "styleMatchedUrl";
-                base: "font=Tizen:style=Regular font_size=34 color=#333333 align=0.0 valign=1.0 ellipsis=1.0";
-            }
-        }
-        parts {
-            SPACER_RECT_HORIZONTAL("spacerLeft", 0, 48, 0.0)
-            SPACER_RECT_HORIZONTAL("spacerRight", 0, 48, 1.0)
-            part {
-                name: "elm.text";
-                type: TEXTBLOCK;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    align: 0.0 0.0;
-                    visible: 1;
-                    rel1 {
-                        relative: 1.0 0.0;
-                        to: "spacerLeft";
-                    }
-                    rel2 {
-                        relative: 0.0 1.0;
-                        to: "spacerRight";
-                    }
-                    text {
-                        style: "styleMatchedUrl";
-                    }
-                }
-            }
-        }
-    }
-}
index 7bcaf2b..777dd15 100755 (executable)
@@ -101,6 +101,104 @@ collections { base_scale: 2.6;
                 }
             }
             part {
+                name: "spacer_for_uri_bar";
+                scale: 1;
+                type: SPACER;
+                description {
+                    state: "default" 0.0;
+                    align: 0 0;
+                    min: 0 0;
+                    max: -1 108;
+                    fixed: 0 0;
+                    rel1 {
+                        to: "bg";
+                        relative: 0 0;
+                    }
+                    rel2 {
+                        to: "bg";
+                        relative: 1 1;
+                    }
+                }
+            }
+            part {
+                name: "spacer_for_bottom_bar";
+                scale: 1;
+                type: SPACER;
+                description {
+                    state: "default" 0.0;
+                    align: 0 1;
+                    min: 0 0;
+                    max: -1 96;
+                    fixed: 0 0;
+                    rel1 {
+                        to: "bg";
+                        relative: 0 0;
+                    }
+                    rel2 {
+                        to: "bg";
+                        relative: 1 1;
+                    }
+                }
+                description { "hidden";
+                    inherit: "default" 0.0;
+                    max: -1 0;
+                    rel1.relative: 1 1;
+                }
+            }
+            part {
+                name: "web_view";
+                type: SWALLOW;
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    min: 0 0;
+                    max: -1 -1;
+                    rel1 { relative: 0.0 0.0; to: "bg"; }
+                    rel2 { relative: 1.0 1.0; to: "bg"; }
+                }
+                description {
+                    state: "fullscreen" 0.0;
+                    inherit: "default" 0.0;
+                    rel1 { relative: 0.0 0.0; to: "bg"; }
+                    rel2 { relative: 1.0 1.0; to: "bg"; }
+                }
+                description { "quick_access";
+                    inherit: "default" 0.0;
+                    rel1 { relative: 0.0 1.0; to: "spacer_for_uri_bar";}
+                    rel2 { relative: 1.0 0.0; to: "spacer_for_bottom_bar";}
+                }
+                description { "findonpage_margin" 0.0;
+                    inherit: "default" 0.0;
+                    rel1 { relative: 0.0 1.0; to: "findonpage"; }
+                }
+
+            }
+
+#if DUMMY_BUTTON
+            swallow { "web_view_dummy_button"; scale;
+                mouse_events: 1;
+                repeat_events: 1;
+                description { "default";
+                    visible: 1;
+                    align: 0.0 0.0;
+                    fixed: 0 0;
+                    min: 0 0;
+                    max: -1 -1;
+                    rel1 { relative: 0.0 0.0; to: "web_view"; }
+                    rel2 { relative: 1.0 1.0; to: "web_view"; }
+                }
+                description { "quick_access";
+                    inherit: "default";
+                    visible: 0;
+                }
+            }
+#endif
+
+// URI BAR
+            part {
                 name: "uri_bar_bg";
                 type : RECT;
                 scale: 1;
@@ -111,18 +209,23 @@ collections { base_scale: 2.6;
                     align: 0 0;
                     min: 0 URI_BG_HEIGHT;
                     max: -1 URI_BG_HEIGHT;
+                    rel1 {relative: 0.0 0.0; to:"web_view";}
+                    rel2 {relative: 1.0 1.0; to:"web_view";}
+                }
+                description { "quick_access";
+                    inherit: "default" 0.0;
                     rel1 {relative: 0.0 0.0; to:"bg";}
                     rel2 {relative: 1.0 1.0; to:"bg";}
                 }
                 description {
                     state: "hidden_vertical" 0.0;
                     inherit: "default" 0.0;
-                    rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/1228); to:"bg";}
+                    rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/1228); to:"web_view";}
                 }
                 description {
                     state: "hidden_landscape" 0.0;
                     inherit: "default" 0.0;
-                    rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/668); to:"bg";}
+                    rel1 {relative: 0.0 -2*(URI_BG_HEIGHT/668); to:"web_view";}
                 }
             }
 
@@ -144,6 +247,46 @@ collections { base_scale: 2.6;
                 }
             }
 
+            rect {
+                name: "uri_bar_upper_bound";
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    color_class: "defaultBg";
+                    min: 0 1;
+                    max: -1 1;
+                    fixed: 1 1;
+                    rel2 {relative: 1.0 0.0; to:"uri_bar_bg";}
+                }
+                description {
+                    state: "secret" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: "secret";
+                }
+            }
+
+            rect {
+                name: "bottom_bar_lower_bound";
+                scale: 1;
+                description {
+                    state: "default" 0.0;
+                    visible: 1;
+                    align: 0 0;
+                    color_class: "defaultBg";
+                    min: 0 1;
+                    max: -1 1;
+                    fixed: 1 1;
+                    rel1 {relative: 0.0 1.0; to:"bottom_toolbar_bg_color";}
+                }
+                description {
+                    state: "secret" 0.0;
+                    inherit: "default" 0.0;
+                    color_class: "secret";
+                }
+            }
+
             part {
                 name: "right_spacer";
                 type: RECT;
@@ -249,25 +392,7 @@ collections { base_scale: 2.6;
                 }
             }
 
-            rect {
-                name: "bottom_toolbar";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 1.0;
-                    min: 0 0;
-                    max: -1 BOTTOM_TOOLBAR_HEIGHT;
-                    color_class: "defaultBg";
-                    rel1 { relative: 0.0 0.0; to: "bg"; }
-                    rel2 { relative: 1.0 1.0; to: "bg"; }
-                }
-                description {
-                    state: "hidden" 0.0;
-                    inherit: "default" 0.0;
-                    rel1 {relative: 1.0 1.0; to:"bg";}
-                }
-            }
+// BOTTOM BAR
             rect {
                 name: "bottom_toolbar_bg_color";
                 scale: 1;
@@ -276,8 +401,11 @@ collections { base_scale: 2.6;
                     visible: 1;
                     align: 0.0 0.0;
                     color_class: "defaultBg";
-                    rel1 { relative: 0.0 0.0; to: "bottom_toolbar"; }
-                    rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
+                    min: 0 0;
+                    max: -1 BOTTOM_TOOLBAR_HEIGHT;
+                    fixed: 0 0;
+                    rel1 { relative: 0.0 0.0; to: "bottom_swallow"; }
+                    rel2 { relative: 1.0 1.0; to: "bottom_swallow"; }
                 }
                 description {
                     state: "secret" 0.0;
@@ -285,19 +413,6 @@ collections { base_scale: 2.6;
                     color_class: "secret";
                 }
             }
-            rect {
-                name: "swallow_spacer";
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 0;
-                    min: 0 2;
-                    max: -1 2;
-                    align: 0.0 0.0;
-                    rel1 { relative: 0.0 0.0; to: "bottom_toolbar"; }
-                    rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
-                }
-            }
             part {
                 name: "bottom_swallow";
                 type: SWALLOW;
@@ -305,49 +420,24 @@ collections { base_scale: 2.6;
                 description {
                     state: "default" 0.0;
                     visible: 1;
-                    rel1 { relative: 0.0 1.0; to: "swallow_spacer"; }
-                    rel2 { relative: 1.0 1.0; to: "bottom_toolbar"; }
-                }
-            }
-
-            part {
-                name: "web_view";
-                type: SWALLOW;
-                scale: 1;
-                description {
-                    state: "default" 0.0;
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
-                    min: 0 0;
-                    max: -1 -1;
-                    rel1 { relative: 0.0 1.0; to: "uri_bar_bg"; }
-                    rel2 { relative: 1.0 0.0; to: "bottom_toolbar"; }
-                }
-                description {
-                    state: "fullscreen" 0.0;
-                    inherit: "default" 0.0;
-                    rel1 { relative: 0.0 0.0; to: "bg"; }
-                    rel2 { relative: 1.0 1.0; to: "bg"; }
-                }
-            }
-            swallow { "web_view_dummy_button"; scale;
-                mouse_events: 1;
-                repeat_events: 1;
-                description { "default";
-                    visible: 1;
-                    align: 0.0 0.0;
-                    fixed: 0 0;
+                    align: 0.0 1.0;
                     min: 0 0;
-                    max: -1 -1;
+                    max: -1 BOTTOM_TOOLBAR_HEIGHT;
                     rel1 { relative: 0.0 0.0; to: "web_view"; }
                     rel2 { relative: 1.0 1.0; to: "web_view"; }
                 }
-                description { "hidden";
-                    inherit: "default";
-                    visible: 0;
+                description { "quick_access";
+                    inherit: "default" 0.0;
+                    rel1 {relative: 0.0 0.0; to:"bg";}
+                    rel2 {relative: 1.0 1.0; to:"bg";}
+                }
+                description {
+                    "hidden";
+                    rel1 {relative: 1.0 1.0;}
                 }
             }
+
+// PROGRESSBAR
             part { name: "progressbar_bg";
                 type: IMAGE;
                 scale: 1;
@@ -357,10 +447,10 @@ collections { base_scale: 2.6;
                     fixed: 0 1;
                     min: 0 5;
                     max: -1 5;
-                    align: 0.5 1;
+                    align: 0.5 0;
                     image.normal: PROGRESS_BG_IMAGE;
-                    rel1 { relative: 0.0 0.0; to: "uri_bar_bg";}
-                    rel2 { relative: 1.0 1.0; to: "uri_bar_bg";}
+                    rel1 { relative: 0.0 1.0; to: "uri_bar_bg";}
+                    rel2 { relative: 1.0 1.0;}
                 }
                 description {
                     state: "progress" 0.0;
@@ -381,18 +471,74 @@ collections { base_scale: 2.6;
                 }
                 PROGRESS_DESCRIPTIONS
             }
+            part {
+               name: "findonpage";
+               type: SWALLOW;
+               scale: 1;
+               mouse_events: 1;
+               description {
+                  state: "default" 0.0;
+                  visible: 0;
+                  align: 0 0;
+                  fixed: 1 1;
+                  color: 244 244 244 255;
+                  min: 0 FINDONPAGE_HEIGHT;
+                  max: -1 FINDONPAGE_HEIGHT;
+                  rel1 {
+                      relative: 0 0;
+                      to: "bg";
+                  }
+                  rel2 {
+                      relative: 1 1;
+                      to: "bg";
+                  }
+               }
+               description {
+                   state: "findonpage_margin" 0.0;
+                   inherit: "default" 0.0;
+                   visible: 1;
+               }
+            }
+            script
+            {
+                public message(Msg_Type:type,id, ...)
+                {
+                    if((type == MSG_INT) && (id == 0))
+                    {
+                        new offset;
+                        offset = getarg(2)+1; // +1 added due to rounding error
+                        custom_state(PART:"uri_bar_bg","default",0.0);
+                        set_state_val(PART:"uri_bar_bg", STATE_REL1_OFFSET, 0, offset);
+                        set_state_val(PART:"uri_bar_bg", STATE_REL2_OFFSET, 0, offset);
+                        set_state(PART:"uri_bar_bg","custom",0.0);
+                    }
+                    if((type == MSG_INT) && (id == 1))
+                    {
+                        new offset;
+                        new arg;
+                        arg = -getarg(2);
+                        offset = (arg*BOTTOM_TOOLBAR_HEIGHT/URI_BG_HEIGHT)-2; // -2 added due to rounding error
+                        custom_state(PART:"bottom_swallow","default",0.0);
+                        set_state_val(PART:"bottom_swallow", STATE_REL1_OFFSET, 0, offset);
+                        set_state_val(PART:"bottom_swallow", STATE_REL2_OFFSET, 0, offset);
+                        set_state(PART:"bottom_swallow","custom",0.0);
+                        if (arg == 2*URI_BG_HEIGHT)
+                        {
+                            set_state(PART:"spacer_for_bottom_bar","hidden",0.0);
+                        }
+                        if (arg == URI_BG_HEIGHT)
+                        {
+                            set_state(PART:"spacer_for_bottom_bar","default",0.0);
+                        }
+                    }
+                }
+            }
             programs {
                 program { name: "hide,progress";
                     signal: "hide,progress,signal";
                     transition: DECELERATE 0.1;
                     action: STATE_SET "default" 0.0;
                     target: "progress_bar";
-                    target: "bg";
-                }
-                program { name: "show,progress";
-                    signal: "show,progress,signal";
-                    action: STATE_SET "progress" 0.0;
-                    target: "bg";
                 }
                 program { name: "update,progress,0.00";
                     signal: "update,progress,0.00,signal";
@@ -409,53 +555,46 @@ collections { base_scale: 2.6;
                 program { name: "hide,bottom";
                     signal: "hide,bottom";
                     action: STATE_SET "hidden" 0.0;
-                    target: "bottom_toolbar";
+                    target: "bottom_swallow";
                 }
                 program { name: "show,bottom";
                     signal: "show,bottom";
                     action: STATE_SET "default" 0.0;
-                    target: "bottom_toolbar";
+                    target: "bottom_swallow";
                 }
-                program { name: "show,dummy_button";
-                    signal: "show,dummy_button";
+                program { name: "show,web,view";
+                    signal: "show,web,view";
                     action: STATE_SET "default" 0.0;
+                    target: "web_view";
+                    target: "uri_bar_bg";
+                    target: "bottom_swallow";
+#if DUMMY_BUTTON
                     target: "web_view_dummy_button";
-                }
-                program { name: "hide,dummy_button";
-                    signal: "hide,dummy_button";
-                    action: STATE_SET "hidden" 0.0;
+#endif
+                }
+                program { name: "show,quick,access";
+                    signal: "show,quick,access";
+                    action: STATE_SET "quick_access" 0.0;
+                    target: "web_view";
+                    target: "uri_bar_bg";
+                    target: "bottom_swallow";
+#if DUMMY_BUTTON
                     target: "web_view_dummy_button";
+#endif
                 }
             }
-
-            #include "WebPageUIUrlHistoryList.edc"
-            part {
-               name: "findonpage";
-               type: SWALLOW;
-               scale: 1;
-               mouse_events: 1;
-               description {
-                  state: "default" 0.0;
-                  visible: 0;
-                  align: 0 0;
-                  fixed: 1 1;
-                  color: 244 244 244 255;
-                  min: 0 FINDONPAGE_HEIGHT;
-                  max: -1 FINDONPAGE_HEIGHT;
-                  rel1 {
-                      relative: 0 0;
-                      to: "web_view";
-                  }
-                  rel2 {
-                      relative: 1 1;
-                      to: "web_view";
-                  }
-               }
-               description {
-                   state: "visible" 0.0;
-                   inherit: "default";
-                   visible: 1;
-               }
+            swallow { "focus_pixel"; scale;
+                mouse_events: 1;
+                repeat_events: 1;
+                description { "default";
+                    visible: 1;
+                    align: 0.0 0.0;
+                    fixed: 1 1;
+                    min: 1 1;
+                    max: 1 1;
+                    rel1 { relative: 0.0 0.0; to: "bg"; }
+                    rel2 { relative: 1.0 1.0; to: "bg"; }
+                }
             }
         }
         programs {
@@ -515,7 +654,6 @@ collections { base_scale: 2.6;
                 source: "ui";
                 action: STATE_SET "default" 0.0;
                 target: "uri_bar_bg";
-                target: "bottom_toolbar";
                 transition: LINEAR 0.15;
             }
             program {
@@ -524,13 +662,15 @@ collections { base_scale: 2.6;
                 source: "ui";
                 action: STATE_SET "default" 0.0;
                 target: "findonpage";
+                target: "web_view";
             }
             program {
                 name: "show_findonpage";
                 signal: "show_findonpage";
                 source: "ui";
-                action: STATE_SET "visible" 0.0;
+                action: STATE_SET "findonpage_margin" 0.0;
                 target: "findonpage";
+                target: "web_view";
             }
             program {
                 name: "set_normal_mode";
diff --git a/services/WebPageUI/edc/WebPageUIUrlHistoryList.edc b/services/WebPageUI/edc/WebPageUIUrlHistoryList.edc
deleted file mode 100755 (executable)
index 19ae23f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-// included in WebPageUi.edc
-
-/*
-  Swallow is on the top and its dimensions can hold maximum
-  dimensions of its content. Its dimensions are changed in
-  UrlHistoryList.edc
-*/
-part {
-    name: "url_history_list";
-    type: SWALLOW;
-    scale: 1;
-    description {
-        state: "default" 0.0;
-        visible: 1;
-        fixed: 0 0;
-        rel1 {
-            relative: 0.0 1.0;
-            to: "uri_entry";
-        }
-        rel2 {
-            relative: 0.0 1.0;
-            to: "spacer_url_history_list_right";
-        }
-    }
-}
-rect {
-    "spacer_url_history_list_right";
-    scale: 1;
-    mouse_events: 1;
-    repeat_events: 1;
-    desc {
-        "default";
-        visible: 0;
-        rel1 {
-            relative: 1.0 0.0;
-            to: "uri_entry";
-        }
-    }
-}
index 57741b2..85e6f74 100755 (executable)
@@ -29,13 +29,12 @@ BOOST_AUTO_TEST_CASE(bookm_item_set_get)
 {
     BROWSER_LOGI("[UT] BookmarkItem - bookm_item_set_get - START --> ");
 
-    std::string retstr = "";
     std::unique_ptr<tizen_browser::services::BookmarkItem>
          bitem(new tizen_browser::services::BookmarkItem());
 
     //Check empty address and title
     bitem->setAddress("");
-    retstr= bitem->getAddress();
+    std::string retstr = bitem->getAddress();
     BOOST_CHECK_EQUAL("",retstr);
     bitem->setTitle("");
     retstr= bitem->getTitle();
index f5a0160..a922aad 100755 (executable)
@@ -58,10 +58,7 @@ BOOST_AUTO_TEST_CASE(config_boundary_conditions)
 {
     BROWSER_LOGI(TAG "config_boundary_conditions - START --> ");
 
-    std::string retstring;
-
 // Wrong keys tests
-    BOOST_CHECK(retstring.empty());
     boost::any retany;
     try{
     retany = tizen_browser::config::Config::getInstance().get(NULL);
@@ -72,7 +69,7 @@ BOOST_AUTO_TEST_CASE(config_boundary_conditions)
     }
 
     try{
-       retstring = boost::any_cast<std::string>(retany);
+       std::string retstring = boost::any_cast<std::string>(retany);
        BOOST_CHECK(retstring.empty());
     }catch(boost::bad_any_cast & e){
        /// \todo Need to resolve bad type (void *) from boost::any(empty_string))
index 329bb49..4bfa9fd 100755 (executable)
@@ -334,14 +334,6 @@ BOOST_AUTO_TEST_CASE(ZoomAndAutofit)
 
     BOOST_TEST_MESSAGE(TAG "Zoom factor at start:" << webEngineService->getZoomFactor());
 
-    webEngineService->setZoomFactor(200);
-
-    BOOST_TEST_MESSAGE(TAG "Zoom factor after setting 200:" << webEngineService->getZoomFactor());
-
-    webEngineService->setZoomFactor(100);
-
-    BOOST_TEST_MESSAGE(TAG "Zoom factor after setting 100:" << webEngineService->getZoomFactor());
-
     BOOST_TEST_MESSAGE(TAG "Print closeTab():" << webEngineService->closeTab());
 
     BROWSER_LOGI(TAG "--> END - ZoomAndAutofit");