Open PWA as Secret tab 32/93132/12
authorKamil Nowac <k.nowac@samsung.com>
Thu, 20 Oct 2016 10:34:18 +0000 (12:34 +0200)
committerHye Kyoung Hwang <cookie@samsung.com>
Mon, 24 Oct 2016 07:16:07 +0000 (00:16 -0700)
[Issue]    http://suprem.sec.samsung.net/jira/browse/TWF-2330
[Problem]  PWA are not separated from normal tabs
[Solution] Changed state of the pwa
[Verify]   1. Open normal browser with a tab
           tab should be stored normally
           2. Press home, and open pwa
           pwa should be stored with secret mode tabs
           3. press home and open browser with browser icon
           pwa should not be visible as normal tab
           4. kill browser with task manager
           open browser normally -> tabs should be restored
           open pwa -> only opened tab should be in tabs manager
[Remarks]  pwa must not be in fullscreen display mode to test it

Change-Id: I62469a518d48ba60a05cc00cfe28e3b772b2e917

CMakeLists.txt
services/SimpleUI/SimpleUI.cpp
services/SimpleUI/SimpleUI.h
services/WebPageUI/WebPageUI.cpp
services/WebPageUI/WebPageUI.h

index 18c4636410c21bb8feb8efdbbb2399a4fde89f3a..cee5784060ad7cad51650c8b69b29120639bab86 100755 (executable)
@@ -118,7 +118,7 @@ if(TIZEN_BUILD)
 
     if (${PROFILE} MATCHES "mobile")
         ADD_DEFINITIONS(-DPROFILE_MOBILE=1)
-        ADD_DEFINITIONS(-DPWA=0)
+        ADD_DEFINITIONS(-DPWA=1)
         ADD_DEFINITIONS(-DDUMMY_BUTTON=1)
     endif (${PROFILE} MATCHES "mobile")
 
index 840ab0fddabaa03e9be43ec8c347e9e8966c7224..a9d766e5e24d1512135a87522e3a700439c8ec86 100755 (executable)
@@ -81,6 +81,7 @@ SimpleUI::SimpleUI()
     , m_wvIMEStatus(false)
 #if PWA
     , m_pwa()
+    , m_alreadyOpenedPWA(false)
 #endif
     , m_manualRotation(false)
     , m_current_angle(0)
@@ -188,6 +189,30 @@ 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::portrait_primary)
+            rotationType(rotationLock::portrait);
+        else if (m_pwa.getPWAinfo().orientation == WebPageUI::landscape_primary)
+            rotationType(rotationLock::landscape);
+        return startUrl;
+    }
+    return std::string();
+}
+#endif
 
 int SimpleUI::exec(const std::string& _url, const std::string& _caller)
 {
@@ -200,29 +225,13 @@ int SimpleUI::exec(const std::string& _url, const std::string& _caller)
             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());
-        }
-#if PWA
-            // Progressive web app
-            if (!strncmp(url.c_str(), "browser_shortcut::", strlen("browser_shortcut::"))) {
-                BROWSER_LOGD("Progressive web app");
-                m_pwa.preparePWAParameters(url);
-                url = m_pwa.getPWAinfo().uri;
-                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::portrait_primary)
-                    rotationType(rotationLock::portrait);
-                else if (m_pwa.getPWAinfo().orientation == WebPageUI::landscape_primary)
-                    rotationType(rotationLock::landscape);
+                // Register H/W back key callback
+                m_platformInputManager->registerHWKeyCallback(m_viewManager.getContent());
             }
-#endif
+
             if (url.empty()) {
                 BROWSER_LOGD("[%s]: restore last session", __func__);
                 switchViewToQuickAccess();
@@ -230,10 +239,29 @@ int SimpleUI::exec(const std::string& _url, const std::string& _caller)
             }
             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 (!url.empty() && !m_alreadyOpenedExecURL) {
+        if (!pwaUrl.empty() || (!url.empty() && !m_alreadyOpenedExecURL)) {
             BROWSER_LOGD("[%s]: open new tab", __func__);
-            openNewTab(url);
+            auto taburl = pwaUrl.empty() ? url : pwaUrl;
+#if PWA
+            // Allow for only one instance of PWA
+            if (m_alreadyOpenedPWA)
+                m_webEngine->closeTab();
+            m_alreadyOpenedPWA = !pwaUrl.empty();
+#endif
+
+            openNewTab(taburl);
             m_alreadyOpenedExecURL = true;
         }
     };
@@ -1870,6 +1898,8 @@ 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();
@@ -1878,12 +1908,16 @@ void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button)
 
 void SimpleUI::tabCreated()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     int tabs = m_webEngine->tabsCount();
     m_webPageUI->setTabsNumber(tabs);
 }
 
 bool SimpleUI::checkIfCreate()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     int tabs = m_webEngine->tabsCount();
 
     if (tabs >= m_tabLimit) {
@@ -1903,6 +1937,8 @@ bool SimpleUI::checkIfCreate()
 
 void SimpleUI::updateView()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     int tabs = m_webEngine->tabsCount();
     BROWSER_LOGD("[%s] Opened tabs: %d", __func__, tabs);
     if (m_viewManager.topOfStack() == m_webPageUI) {
@@ -1917,9 +1953,15 @@ void SimpleUI::updateView()
 
 void SimpleUI::changeEngineState()
 {
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
+
     m_webEngine->changeState();
-    m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
+#if PWA
+    if (!m_alreadyOpenedPWA)
+#endif
+        m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
     updateView();
+
 }
 
 void SimpleUI::windowCreated()
index 9dac5a0e3e96e0fb23397f00093d6ab544660e22..a9a98eafda6028e1f7d6c8adcfc96829336be74e 100644 (file)
@@ -85,8 +85,8 @@ class BROWSER_EXPORT SimpleUI : public AbstractMainWindow<Evas_Object>
 public:
     SimpleUI(/*Evas_Object *window*/);
     virtual ~SimpleUI();
-    virtual int exec(const std::string& _url, const std::string& _caller);
-    virtual std::string getName();
+    int exec(const std::string& _url, const std::string& _caller) final override;
+    std::string getName() final override;
     void suspend();
     void resume();
     void destroyUI();
@@ -100,6 +100,9 @@ public:
 private:
     // setup functions
     void prepareServices();
+#if PWA
+    std::string preparePWA(const std::string& url);
+#endif
     void loadUIServices();
     void connectUISignals();
     void loadModelServices();
@@ -366,6 +369,7 @@ private:
     Evas_Object *main_window;
 #if PWA
     ProgressiveWebApp m_pwa;
+    bool m_alreadyOpenedPWA;
 #endif
     SharedNaviframeWrapper m_QAEditNaviframe;
     Evas_Object *m_conformant;
index c26044734236e0b01d01204be236e04cefd4d683..f8423e2a9ec4b6d0578679f992ec12ee61ee9096 100755 (executable)
@@ -94,10 +94,9 @@ UrlHistoryPtr WebPageUI::getUrlHistoryList()
     return m_urlHistoryList;
 }
 
-void WebPageUI::showUI()
+void WebPageUI::updateEngineStateUI()
 {
     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
     auto state = getEngineState();
     if (state) {
         switch (*state) {
@@ -116,8 +115,15 @@ void WebPageUI::showUI()
     } else {
         BROWSER_LOGE("[%s:%d] Wrong state value!", __PRETTY_FUNCTION__, __LINE__);
     }
+}
 
+void WebPageUI::showUI()
+{
+    BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
     M_ASSERT(m_mainLayout);
+
+    updateEngineStateUI();
+
     evas_object_show(m_mainLayout);
 
     evas_object_show(elm_object_part_content_get(m_mainLayout, "web_view"));
index a22f5b4d0e01706f46ec333dcb43b99f4fb5389f..99d208275da697a4fbac5eea6ed0e8a5d57923d3 100755 (executable)
@@ -84,6 +84,7 @@ public:
     UrlHistoryPtr getUrlHistoryList();
     virtual void showUI();
     virtual void hideUI();
+    void updateEngineStateUI();
 #if DUMMY_BUTTON
     void createDummyButton();
 #endif