f810ddd5b61a7499087d0b2545b18c48b98e68cf
[profile/tv/apps/web/browser.git] / services / SimpleUI / SimpleUI.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "browser_config.h"
18
19 #if defined(USE_EWEBKIT)
20 #include <ewk_chromium.h>
21 #endif
22
23 #include <boost/any.hpp>
24 #include <memory>
25 #include <algorithm>
26 #include <Elementary.h>
27 #include <Ecore.h>
28 #include <Ecore_Wayland.h>
29 #include <Edje.h>
30 #include <Evas.h>
31 #include "Config.h"
32
33 #include "BrowserLogger.h"
34 #include "ServiceManager.h"
35 #include "AbstractWebEngine.h"
36 #include "TabId.h"
37 #include "Tools/EflTools.h"
38 #include "BrowserImage.h"
39 #include "SimpleUI.h"
40 #include "WebPageUIStatesManager.h"
41 #include "BookmarkItem.h"
42 #include "Tools/EflTools.h"
43 #include "BrowserImage.h"
44 #include "HistoryItem.h"
45 #include "boost/date_time/gregorian/gregorian.hpp"
46 #include "boost/date_time/posix_time/posix_time.hpp"
47 #include "SqlStorage.h"
48 #include "DetailPopup.h"
49 #include "UrlHistoryList/UrlHistoryList.h"
50 #include "NotificationPopup.h"
51
52
53 namespace tizen_browser{
54 namespace base_ui{
55
56 EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui")
57
58 const std::string HomePageURL = "about:home";
59 const int ROOT_FOLDER = 0;
60
61
62 SimpleUI::SimpleUI()
63     : AbstractMainWindow()
64     , m_popup(nullptr)
65     , m_webPageUI()
66     , m_moreMenuUI()
67     , m_bookmarkManagerUI()
68     , m_quickAccess()
69     , m_historyUI()
70     , m_settingsUI()
71     , m_tabUI()
72     , m_initialised(false)
73     , m_wvIMEStatus(false)
74     , m_ewkContext(ewk_context_new())
75 {
76     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
77     elm_init(0, nullptr);
78
79     config::DefaultConfig config;
80     config.load("");
81     if (config.isMobileProfile()) {
82         elm_config_scale_set(boost::any_cast<double>(config.get("mobile_scale")));
83     }
84
85     Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp");
86     if (main_window == nullptr)
87         BROWSER_LOGE("Failed to create main window");
88
89     setMainWindow(main_window);
90     m_viewManager = new ViewManager(main_window);
91     evas_object_size_hint_weight_set(main_window, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
92     evas_object_size_hint_align_set (main_window, EVAS_HINT_FILL, EVAS_HINT_FILL);
93
94     elm_win_resize_object_add(main_window, m_viewManager->getContent());
95     evas_object_show(main_window);
96 }
97
98 SimpleUI::~SimpleUI() {
99     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
100     m_sessionService->getStorage()->deleteSession(m_currentSession);
101     evas_object_del(m_window.get());
102     ewk_context_delete(m_ewkContext);
103 }
104
105 void SimpleUI::destroyUI()
106 {
107     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
108     evas_object_del(m_window.get());
109 }
110
111 std::string SimpleUI::edjePath(const std::string &file)
112 {
113     return std::string(EDJE_DIR) + file;
114 }
115
116 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarks(int folder_id)
117 {
118     return m_favoriteService->getBookmarks(folder_id);
119 }
120
121 std::shared_ptr<services::HistoryItemVector> SimpleUI::getMostVisitedItems()
122 {
123     return m_historyService->getMostVisitedHistoryItems();
124 }
125
126 std::shared_ptr<services::HistoryItemVector> SimpleUI::getHistory()
127 {
128     return m_historyService->getHistoryToday();
129 }
130
131 int SimpleUI::exec(const std::string& _url)
132 {
133     BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised);
134     std::string url = _url;
135
136     if(!m_initialised){
137         if (m_window.get()) {
138             config::DefaultConfig config;
139             config.load("");
140             m_tabLimit = boost::any_cast <int> (config.get("TAB_LIMIT"));
141             m_favoritesLimit = boost::any_cast <int> (config.get("FAVORITES_LIMIT"));
142
143
144             loadUIServices();
145             loadModelServices();
146
147             // initModelServices() needs to be called after initUIServices()
148             initUIServices();
149             initModelServices();
150
151
152             connectModelSignals();
153             connectUISignals();
154
155             //Push first view to stack.
156             m_viewManager->pushViewToStack(m_webPageUI.get());
157         }
158         m_initialised = true;
159     }
160
161     m_currentSession = std::move(m_sessionService->getStorage()->createSession());
162
163     if (url.empty())
164     {
165         BROWSER_LOGD("[%s]: changing to homeUrl", __func__);
166         switchViewToQuickAccess();
167         restoreLastSession();
168     } else {
169         openNewTab(url);
170     }
171
172     BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str());
173     return 0;
174 }
175
176 void SimpleUI::restoreLastSession()
177 {
178     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
179     M_ASSERT(m_sessionService);
180     Session::Session lastSession = std::move(m_sessionService->getStorage()->getLastSession());
181     if(lastSession.items().size() >= 1)
182     {
183         for(auto iter=lastSession.items().begin(), end=lastSession.items().end(); iter != end; ++iter)
184         {
185             openNewTab(iter->second);
186         }
187         m_sessionService->getStorage()->deleteSession(lastSession);
188     }
189 }
190
191
192 //TODO: Move all service creation here:
193 void SimpleUI::loadUIServices()
194 {
195     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
196
197     m_webPageUI =
198         std::dynamic_pointer_cast
199         <tizen_browser::base_ui::WebPageUI,tizen_browser::core::AbstractService>
200         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webpageui"));
201
202     m_quickAccess =
203         std::dynamic_pointer_cast
204         <tizen_browser::base_ui::QuickAccess,tizen_browser::core::AbstractService>
205         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.quickaccess"));
206
207     m_tabUI =
208         std::dynamic_pointer_cast
209         <tizen_browser::base_ui::TabUI,tizen_browser::core::AbstractService>
210         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.tabui"));
211
212     m_historyUI =
213         std::dynamic_pointer_cast
214         <tizen_browser::base_ui::HistoryUI,tizen_browser::core::AbstractService>
215         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyui"));
216
217     m_settingsUI =
218         std::dynamic_pointer_cast
219         <tizen_browser::base_ui::SettingsUI,tizen_browser::core::AbstractService>
220         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.settingsui"));
221
222     m_moreMenuUI =
223         std::dynamic_pointer_cast
224         <tizen_browser::base_ui::MoreMenuUI,tizen_browser::core::AbstractService>
225         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui"));
226
227     m_bookmarkManagerUI =
228         std::dynamic_pointer_cast
229         <tizen_browser::base_ui::BookmarkManagerUI,tizen_browser::core::AbstractService>
230         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.bookmarkmanagerui"));
231
232     m_zoomUI =
233         std::dynamic_pointer_cast
234         <tizen_browser::base_ui::ZoomUI, tizen_browser::core::AbstractService>
235         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.zoomui"));
236 }
237
238 void SimpleUI::connectUISignals()
239 {
240     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
241
242     M_ASSERT(m_webPageUI.get());
243     m_webPageUI->getURIEntry().uriChanged.connect(boost::bind(&SimpleUI::filterURL, this, _1));
244     m_webPageUI->getURIEntry().uriEntryEditingChangedByUser.connect(boost::bind(&SimpleUI::onURLEntryEditedByUser, this, _1));
245     m_webPageUI->getUrlHistoryList()->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1));
246     m_webPageUI->backPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
247     m_webPageUI->backPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::back, m_webEngine.get()));
248     m_webPageUI->backPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
249     m_webPageUI->reloadPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
250     m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::showTabUI, this));
251     m_webPageUI->showMoreMenu.connect(boost::bind(&SimpleUI::showMoreMenu, this));
252     m_webPageUI->forwardPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::forward, m_webEngine.get()));
253     m_webPageUI->forwardPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
254     m_webPageUI->stopLoadingPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::stopLoading, m_webEngine.get()));
255     m_webPageUI->reloadPage.connect(boost::bind(&tizen_browser::basic_webengine::AbstractWebEngine<Evas_Object>::reload, m_webEngine.get()));
256     m_webPageUI->reloadPage.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
257     m_webPageUI->showQuickAccess.connect(boost::bind(&SimpleUI::showQuickAccess, this));
258     m_webPageUI->hideQuickAccess.connect(boost::bind(&QuickAccess::hideUI, m_quickAccess));
259     m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this));
260     m_webPageUI->showZoomNavigation.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
261
262     M_ASSERT(m_quickAccess.get());
263     m_quickAccess->getDetailPopup().openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2));
264     m_quickAccess->openURLInNewTab.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, _2));
265     m_quickAccess->mostVisitedTileClicked.connect(boost::bind(&SimpleUI::onMostVisitedTileClicked, this, _1, _2));
266     m_quickAccess->mostVisitedClicked.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
267     m_quickAccess->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this));
268     m_quickAccess->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this));
269
270     M_ASSERT(m_tabUI.get());
271     m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this));
272     m_tabUI->closeTabUIClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
273     m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
274     m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
275     m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
276     m_tabUI->newIncognitoTabClicked.connect(boost::bind(&SimpleUI::openNewTab, this, "", false, true));
277     m_tabUI->tabsCount.connect(boost::bind(&SimpleUI::tabsCount, this));
278
279     M_ASSERT(m_historyUI.get());
280     m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryClicked, this));
281     m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this));
282     // desktop mode as default
283     m_historyUI->historyItemClicked.connect(boost::bind(&SimpleUI::onOpenURLInNewTab, this, _1, true));
284
285     M_ASSERT(m_settingsUI.get());
286     m_settingsUI->closeSettingsUIClicked.connect(boost::bind(&SimpleUI::closeSettingsUI, this));
287     m_settingsUI->deleteSelectedDataClicked.connect(boost::bind(&SimpleUI::settingsDeleteSelectedData, this,_1));
288     m_settingsUI->resetMostVisitedClicked.connect(boost::bind(&SimpleUI::settingsResetMostVisited, this));
289     m_settingsUI->resetBrowserClicked.connect(boost::bind(&SimpleUI::settingsResetBrowser, this));
290
291     M_ASSERT(m_moreMenuUI.get());
292     m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this));
293     m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this));
294     m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this));
295     m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this));
296     m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&ZoomUI::showNavigation, m_zoomUI.get()));
297     m_moreMenuUI->switchToMobileMode.connect(boost::bind(&SimpleUI::switchToMobileMode, this));
298     m_moreMenuUI->switchToDesktopMode.connect(boost::bind(&SimpleUI::switchToDesktopMode, this));
299     m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addToBookmarks, this, _1));
300     m_moreMenuUI->isBookmark.connect(boost::bind(&SimpleUI::checkBookmark, this));
301     m_moreMenuUI->deleteBookmark.connect(boost::bind(&SimpleUI::deleteBookmark, this));
302     m_moreMenuUI->zoomUIClicked.connect(boost::bind(&SimpleUI::showZoomUI, this));
303
304     M_ASSERT(m_bookmarkManagerUI.get());
305     m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerUI, this));
306     m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
307
308     M_ASSERT(m_zoomUI.get());
309     m_zoomUI->setZoom.connect(boost::bind(&SimpleUI::setZoomFactor, this, _1));
310     m_zoomUI->getZoom.connect(boost::bind(&SimpleUI::getZoomFactor, this));
311     m_zoomUI->scrollView.connect(boost::bind(&SimpleUI::scrollView, this, _1, _2));
312 }
313
314 void SimpleUI::loadModelServices()
315 {
316     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
317
318     m_webEngine =
319         std::dynamic_pointer_cast
320         <basic_webengine::AbstractWebEngine<Evas_Object>,tizen_browser::core::AbstractService>
321         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice"));
322
323     m_favoriteService =
324         std::dynamic_pointer_cast
325         <tizen_browser::interfaces::AbstractFavoriteService,tizen_browser::core::AbstractService>
326         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.favoriteservice"));
327
328     m_historyService =
329         std::dynamic_pointer_cast
330         <tizen_browser::services::HistoryService,tizen_browser::core::AbstractService>
331         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.historyservice"));
332
333     m_platformInputManager =
334         std::dynamic_pointer_cast
335         <tizen_browser::services::PlatformInputManager,tizen_browser::core::AbstractService>
336         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.platforminputmanager"));
337
338     m_sessionService =
339         std::dynamic_pointer_cast
340         <tizen_browser::services::SessionStorage,tizen_browser::core::AbstractService>
341         (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.sessionStorageService"));
342 }
343
344 void SimpleUI::initUIServices()
345 {
346     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
347     M_ASSERT (m_viewManager);
348
349     M_ASSERT(m_webPageUI.get());
350     m_webPageUI->init(m_viewManager->getContent());
351
352     M_ASSERT(m_quickAccess.get());
353     m_quickAccess->init(m_webPageUI->getContent());
354
355     M_ASSERT(m_tabUI.get());
356     m_tabUI->init(m_viewManager->getContent());
357
358     M_ASSERT(m_historyUI.get());
359     m_historyUI->init(m_viewManager->getContent());
360
361     M_ASSERT(m_moreMenuUI.get());
362     m_moreMenuUI->init(m_viewManager->getContent());
363
364     M_ASSERT(m_settingsUI.get());
365     m_settingsUI->init(m_viewManager->getContent());
366
367     M_ASSERT(m_bookmarkManagerUI.get());
368     m_bookmarkManagerUI->init(m_viewManager->getContent());
369
370     M_ASSERT(m_zoomUI.get());
371     m_zoomUI->init(m_viewManager->getContent());
372 }
373
374 void SimpleUI::initModelServices()
375 {
376     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
377
378     M_ASSERT(m_webEngine);
379     M_ASSERT(m_webPageUI->getContent());
380     m_webEngine->init(m_webPageUI->getContent());
381
382     M_ASSERT(m_favoriteService);
383     m_favoriteService->synchronizeBookmarks();
384     m_favoriteService->getBookmarks();
385
386     M_ASSERT(m_platformInputManager);
387     m_platformInputManager->init(m_window.get());
388 }
389
390 void SimpleUI::connectModelSignals()
391 {
392     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
393
394     m_webEngine->uriChanged.connect(boost::bind(&SimpleUI::webEngineURLChanged, this, _1));
395     m_webEngine->uriChanged.connect(boost::bind(&URIEntry::changeUri, &m_webPageUI->getURIEntry(), _1));
396     m_webEngine->webViewClicked.connect(boost::bind(&URIEntry::clearFocus, &m_webPageUI->getURIEntry()));
397     m_webEngine->backwardEnableChanged.connect(boost::bind(&WebPageUI::setBackButtonEnabled, m_webPageUI.get(), _1));
398     m_webEngine->forwardEnableChanged.connect(boost::bind(&WebPageUI::setForwardButtonEnabled, m_webPageUI.get(), _1));
399     m_webEngine->loadStarted.connect(boost::bind(&SimpleUI::loadStarted, this));
400     m_webEngine->loadProgress.connect(boost::bind(&SimpleUI::progressChanged,this,_1));
401     m_webEngine->loadFinished.connect(boost::bind(&SimpleUI::loadFinished, this));
402     m_webEngine->loadStop.connect(boost::bind(&SimpleUI::loadStopped, this));
403     m_webEngine->loadError.connect(boost::bind(&SimpleUI::loadError, this));
404     m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1));
405     m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this));
406     m_webEngine->checkIfCreate.connect(boost::bind(&SimpleUI::checkIfCreate, this));
407     m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1));
408     m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1));
409     m_webEngine->titleChanged.connect(boost::bind(&WebPageUI::setPageTitle, m_webPageUI.get(), _1));
410
411     m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1));
412     m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1));
413
414     m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1));
415
416     m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
417     m_platformInputManager->backPressed.connect(boost::bind(&SimpleUI::onBackPressed, this));
418     m_platformInputManager->escapePressed.connect(boost::bind(&SimpleUI::onEscapePressed, this));
419     m_platformInputManager->mouseClicked.connect(
420             boost::bind(&SimpleUI::onMouseClick, this));
421     m_platformInputManager->redPressed.connect(boost::bind(&SimpleUI::onRedKeyPressed, this));
422
423 }
424
425 void SimpleUI::switchViewToWebPage()
426 {
427     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
428     M_ASSERT(m_viewManager);
429     if(m_webEngine->isSuspended())
430         m_webEngine->resume();
431     m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->getTitle());
432 }
433
434 void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId)
435 {
436     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
437     if(m_webEngine->currentTabId() != tabId) {
438         BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
439         m_webEngine->switchToTab(tabId);
440     }
441     if(m_webEngine->isLoadError()){
442         BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__);
443         loadError();
444         return;
445     }
446     BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__);
447     switchViewToWebPage();
448     m_zoomUI->showNavigation();
449 }
450
451 void SimpleUI::showQuickAccess()
452 {
453     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
454     m_quickAccess->showMostVisited(getMostVisitedItems());
455     m_quickAccess->showUI();
456 }
457
458 void SimpleUI::switchViewToQuickAccess()
459 {
460     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
461     M_ASSERT(m_viewManager);
462
463     m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
464     m_webEngine->disconnectCurrentWebViewSignals();
465     m_viewManager->popStackTo(m_webPageUI.get());
466 }
467
468 void SimpleUI::switchViewToIncognitoPage()
469 {
470     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
471     M_ASSERT(m_viewManager);
472     m_webPageUI->toIncognito(true);
473     m_webPageUI->switchViewToIncognitoPage();
474     m_viewManager->popStackTo(m_webPageUI.get());
475 }
476
477 void SimpleUI::openNewTab(const std::string &uri, bool desktopMode, bool incognitoMode)
478 {
479     BROWSER_LOGD("[%s:%d] uri =%s", __PRETTY_FUNCTION__, __LINE__, uri.c_str());
480     tizen_browser::basic_webengine::TabId tab = m_webEngine->addTab(uri, nullptr, desktopMode, incognitoMode);
481     switchToTab(tab);
482     m_webPageUI->toIncognito(incognitoMode);
483     if (incognitoMode)
484         switchViewToIncognitoPage();
485 }
486
487 void SimpleUI::closeTab()
488 {
489     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
490     auto tabId = m_webEngine->currentTabId();
491     closeTab(tabId);
492 }
493
494 void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id)
495 {
496     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
497     m_currentSession.removeItem(id.toString());
498     m_webEngine->closeTab(id);
499     updateView();
500 }
501
502 bool SimpleUI::checkBookmark()
503 {
504     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
505     if(m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
506         return false;
507
508     if(m_favoriteService->bookmarkExists(m_webEngine->getURI())) {
509         BROWSER_LOGD("[%s] There is bookmark for this site [%s], set indicator on!", __func__, m_webEngine->getURI().c_str());
510         return true;
511     }
512     else {
513         BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str());
514         return false;
515     }
516 }
517 // Consider removing these functions
518 void SimpleUI::onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem>)
519 {
520     if (m_moreMenuUI) {
521         m_moreMenuUI->changeBookmarkStatus(true);
522         m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" added to bookmark")).c_str() );
523     }
524 }
525
526 void SimpleUI::onBookmarkRemoved(const std::string& uri)
527 {
528     BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
529     if (m_moreMenuUI) {
530         m_moreMenuUI->changeBookmarkStatus(false);
531         m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" removed from bookmark")).c_str() );
532     }
533 }
534
535 void SimpleUI::onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
536 {
537     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
538     m_viewManager->popStackTo(m_webPageUI.get());
539     std::string historyAddress = historyItem->getUrl();
540     openNewTab(historyAddress, desktopMode);
541 }
542
543 void SimpleUI::onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem)
544 {
545     onOpenURLInNewTab(historyItem, m_quickAccess->isDesktopMode());
546 }
547
548 void SimpleUI::onMostVisitedTileClicked(std::shared_ptr< services::HistoryItem > historyItem, int itemsNumber)
549 {
550     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
551     m_quickAccess->openDetailPopup(historyItem, m_historyService->getHistoryItemsByURL(historyItem->getUrl(), itemsNumber));
552 }
553
554 void SimpleUI::onClearHistoryClicked()
555 {
556     BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
557     m_historyService->clearAllHistory();
558 }
559
560 void SimpleUI::onMostVisitedClicked()
561 {
562    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
563    m_quickAccess->showMostVisited(getMostVisitedItems());
564 }
565
566 void SimpleUI::onBookmarkButtonClicked()
567 {
568    BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
569    m_quickAccess->showBookmarks(getBookmarks());
570 }
571
572 void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
573 {
574     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
575     M_ASSERT(m_viewManager);
576     m_viewManager->popStackTo(m_webPageUI.get());
577     std::string bookmarkAddress = bookmarkItem->getAddress();
578     if (!m_webEngine->isPrivateMode(m_webEngine->currentTabId()))
579         openNewTab(bookmarkAddress);
580     else {
581         std::string bookmarkTitle = bookmarkItem->getTittle();
582         m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), bookmarkAddress, bookmarkTitle);
583         m_webEngine->setURI(bookmarkAddress);
584         m_webPageUI->setPageTitle(bookmarkTitle);
585         m_webPageUI->getURIEntry().clearFocus();
586         closeBookmarkManagerUI();
587     }
588 }
589
590 void SimpleUI::onHistoryRemoved(const std::string& uri)
591 {
592     BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
593 }
594
595 void SimpleUI::onReturnPressed(MenuButton *m)
596 {
597     BROWSER_LOGD("[%s]", __func__);
598     m_platformInputManager->returnPressed.disconnect_all_slots();
599     m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
600     m->hidePopup();
601 }
602
603 void SimpleUI::setwvIMEStatus(bool status)
604 {
605     BROWSER_LOGD("[%s]", __func__);
606     m_wvIMEStatus = status;
607 }
608
609 void SimpleUI::onBackPressed()
610 {
611     BROWSER_LOGD("[%s]", __func__);
612     if (m_zoomUI->isVisible()) {
613         m_zoomUI->escapeZoom();
614     } else if ((m_viewManager->topOfStack() == m_tabUI.get()) && m_tabUI->isEditMode()) {
615         m_tabUI->onBackKey();
616     } else if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
617         m_quickAccess->backButtonClicked();
618     } else if ((m_viewManager->topOfStack() == m_webPageUI.get()) && !m_webPageUI->getURIEntry().hasFocus() && !m_wvIMEStatus) {
619         m_webEngine->backButtonClicked();
620     } else {
621         m_viewManager->popTheStack();
622     }
623 }
624
625 void SimpleUI::onEscapePressed()
626 {
627     BROWSER_LOGD("[%s]", __func__);
628     m_zoomUI->escapeZoom();
629 }
630
631 void SimpleUI::reloadEnable(bool enable)
632 {
633     m_webPageUI->setReloadButtonEnabled(enable);
634 }
635
636 void SimpleUI::stopEnable(bool enable)
637 {
638     m_webPageUI->setStopButtonEnabled(enable);
639 }
640
641 void SimpleUI::loadStarted()
642 {
643     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
644     if (!m_webEngine->isPrivateMode(m_webEngine->currentTabId()))
645         m_currentSession.updateItem(m_webEngine->currentTabId().toString(), m_webEngine->getURI());
646     m_webPageUI->loadStarted();
647 }
648
649 void SimpleUI::progressChanged(double progress)
650 {
651     m_webPageUI->progressChanged(progress);
652 }
653
654 void SimpleUI::loadFinished()
655 {
656     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
657
658     if (!m_webEngine->isPrivateMode(m_webEngine->currentTabId()))
659         m_historyService->addHistoryItem(std::make_shared<tizen_browser::services::HistoryItem>(m_webEngine->getURI(),
660                                                                                                 m_webEngine->getTitle(),
661                                                                                                 m_webEngine->getFavicon()),
662                                                                                                 m_webEngine->getSnapshotData(
663                                                                                                     QuickAccess::MAX_THUMBNAIL_WIDTH,
664                                                                                                     QuickAccess::MAX_THUMBNAIL_HEIGHT));
665     m_webPageUI->loadFinished();
666 }
667
668 void SimpleUI::loadStopped()
669 {
670     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
671
672     if (!m_webEngine->isPrivateMode(m_webEngine->currentTabId())) {
673         m_historyService->addHistoryItem(std::make_shared<tizen_browser::services::HistoryItem>(
674                                              m_webEngine->getURI(),
675                                              m_webEngine->getURI(),
676                                              std::make_shared<tizen_browser::tools::BrowserImage>()),
677                                          std::make_shared<tizen_browser::tools::BrowserImage>());
678     }
679     m_webPageUI->loadStopped();
680 }
681
682 void SimpleUI::loadError()
683 {
684     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
685     m_webPageUI->switchViewToErrorPage();
686 }
687
688 void SimpleUI::filterURL(const std::string& url)
689 {
690     BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
691     //check for special urls (like:  'about:home')
692     //if there will be more addresses may be we should
693     //create some kind of std::man<std::string url, bool *(doSomethingWithUrl)()>
694     //and then just map[url]() ? m_webEngine->setURI(url) : /*do nothing*/;;
695     if(/*url.empty() ||*/ url == HomePageURL){
696         m_webPageUI->getURIEntry().changeUri("");
697     } else if (!url.empty()){
698
699     //check if url is in favorites
700
701     //check if url is in blocked
702
703     //no filtering
704
705         if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
706             openNewTab(url);
707         else
708             m_webEngine->setURI(url);
709
710         if (m_webEngine->isPrivateMode(m_webEngine->currentTabId()))
711             switchViewToWebPage();
712     }
713     m_webPageUI->getURIEntry().clearFocus();
714 }
715
716 void SimpleUI::onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr)
717 {
718     string editedUrl(*editedUrlPtr);
719     int historyItemsVisibleMax =
720             m_webPageUI->getUrlHistoryList()->getVisibleItemsMax();
721     int minKeywordLength =
722             m_webPageUI->getUrlHistoryList()->getMinKeywordLength();
723     std::shared_ptr<services::HistoryItemVector> result =
724             m_historyService->getHistoryItemsByKeywordsString(editedUrl,
725                     historyItemsVisibleMax, minKeywordLength);
726     m_webPageUI->getUrlHistoryList()->onURLEntryEditedByUser(editedUrl, result);
727 }
728
729 void SimpleUI::onMouseClick()
730 {
731     m_webPageUI->getUrlHistoryList()->onMouseClick();
732 }
733
734 void SimpleUI::onRedKeyPressed()
735 {
736     m_webPageUI->onRedKeyPressed();
737 }
738
739 void SimpleUI::webEngineURLChanged(const std::string url)
740 {
741     BROWSER_LOGD("webEngineURLChanged:%s", url.c_str());
742     m_webPageUI->getURIEntry().clearFocus();
743 }
744
745 void SimpleUI::showZoomUI()
746 {
747     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
748     if(! m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
749         M_ASSERT(m_viewManager);
750         m_viewManager->popStackTo(m_webPageUI.get());
751         m_webPageUI->showTabUI.connect(boost::bind(&SimpleUI::closeZoomUI, this));
752         m_webPageUI->showMoreMenu.connect(boost::bind(&SimpleUI::closeZoomUI, this));
753         m_zoomUI->show(m_window.get());
754     }
755 }
756
757 void SimpleUI::closeZoomUI()
758 {
759     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
760     M_ASSERT(m_zoomUI);
761     m_zoomUI->hideUI();
762 }
763
764 void SimpleUI::setZoomFactor(int level)
765 {
766     BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
767     m_webEngine->setZoomFactor(level);
768 }
769
770 int SimpleUI::getZoomFactor()
771 {
772     BROWSER_LOGD("[%s:%d] %d", __PRETTY_FUNCTION__, __LINE__, m_webEngine->getZoomFactor());
773     return m_webEngine->getZoomFactor();
774 }
775
776 void SimpleUI::scrollView(const int& dx, const int& dy)
777 {
778     m_webEngine->scrollView(dx, dy);
779 }
780
781 void SimpleUI::showTabUI()
782 {
783     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
784     M_ASSERT(m_viewManager);
785     m_viewManager->pushViewToStack(m_tabUI.get());
786     m_tabUI->addTabItems(m_webEngine->getTabContents());
787 }
788
789 void SimpleUI::closeTabUI()
790 {
791     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
792     M_ASSERT(m_viewManager);
793     if (m_viewManager->topOfStack() == m_tabUI.get())
794         m_viewManager->popTheStack();
795 }
796
797 void SimpleUI::newTabClicked()
798 {
799     if (!checkIfCreate())
800         return;
801
802     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
803     m_webPageUI->toIncognito(false);
804     switchViewToQuickAccess();
805 }
806
807 void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
808 {
809     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
810     m_viewManager->popStackTo(m_webPageUI.get());
811     m_webPageUI->toIncognito(m_webEngine->isPrivateMode(tabId));
812     switchToTab(tabId);
813 }
814
815 void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId)
816 {
817     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
818     m_webEngine->closeTab(tabId);
819 }
820
821 int SimpleUI::tabsCount()
822 {
823     return m_webEngine->tabsCount();
824 }
825
826 void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
827 {
828     BROWSER_LOGD("%s", __func__);
829     switch(webConfirmation->getConfirmationType())
830     {
831         case basic_webengine::WebConfirmation::ConfirmationType::Authentication:
832         {
833         basic_webengine::AuthenticationConfirmationPtr auth = std::dynamic_pointer_cast<basic_webengine::AuthenticationConfirmation, basic_webengine::WebConfirmation>(webConfirmation);
834
835         Evas_Object *popup_content = elm_layout_add(m_webPageUI->getContent());
836         std::string edjFilePath = EDJE_DIR;
837         edjFilePath.append("SimpleUI/AuthenticationPopup.edj");
838         Eina_Bool layoutSetResult = elm_layout_file_set(popup_content, edjFilePath.c_str(), "authentication_popup");
839         if (!layoutSetResult)
840             throw std::runtime_error("Layout file not found: " + edjFilePath);
841
842     #if PLATFORM(TIZEN)
843         elm_object_translatable_part_text_set(popup_content, "login_label", "Login");
844         elm_object_translatable_part_text_set(popup_content, "password_label", "Password");
845     #else
846         elm_object_part_text_set(popup_content, "login_label", "Login");
847         elm_object_part_text_set(popup_content, "password_label", "Password");
848     #endif
849
850         Evas_Object *loginEntry = elm_entry_add(popup_content);
851         elm_object_part_content_set(popup_content, "login", loginEntry);
852
853         Evas_Object *passwordEntry = elm_entry_add(popup_content);
854         elm_object_part_content_set(popup_content, "password", passwordEntry);
855
856         SimplePopup *popup = SimplePopup::createPopup();
857         popup->setTitle("Authentication request");
858         popup->addButton(OK);
859         popup->addButton(CANCEL);
860         popup->setContent(popup_content);
861         std::shared_ptr<AuthenticationPopupData> popupData = std::make_shared<AuthenticationPopupData>();
862         popupData->loginEntry = loginEntry;
863         popupData->passwordEntry = passwordEntry;
864         popupData->auth = auth;
865         popup->setData(popupData);
866         popup->buttonClicked.connect(boost::bind(&SimpleUI::authPopupButtonClicked, this, _1, _2));
867         popup->show();
868         break;
869         }
870         case basic_webengine::WebConfirmation::ConfirmationType::CertificateConfirmation:
871         case basic_webengine::WebConfirmation::ConfirmationType::Geolocation:
872         case basic_webengine::WebConfirmation::ConfirmationType::UserMedia:
873         case basic_webengine::WebConfirmation::ConfirmationType::Notification:
874         {
875         // Implicitly accepted
876         BROWSER_LOGE("NOT IMPLEMENTED: popups to confirm Ceritificate, Geolocation, UserMedia, Notification");
877         webConfirmation->setResult(tizen_browser::basic_webengine::WebConfirmation::ConfirmationResult::Confirmed);
878         m_webEngine->confirmationResult(webConfirmation);
879         break;
880         }
881
882     default:
883         break;
884     }
885 }
886
887 void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData)
888 {
889     std::shared_ptr<AuthenticationPopupData> authPopupData = std::dynamic_pointer_cast<AuthenticationPopupData, PopupData>(popupData);
890     switch(button){
891         case OK:
892             authPopupData->auth->setLogin(elm_entry_entry_get(authPopupData->loginEntry) ? elm_entry_entry_get(authPopupData->loginEntry) : "");
893             authPopupData->auth->setPassword(elm_entry_entry_get(authPopupData->passwordEntry) ? elm_entry_entry_get(authPopupData->passwordEntry) : "");
894             authPopupData->auth->setResult(basic_webengine::WebConfirmation::ConfirmationResult::Confirmed);
895             m_webEngine->confirmationResult(authPopupData->auth);
896             break;
897         case CANCEL:
898             authPopupData->auth->setResult(basic_webengine::WebConfirmation::ConfirmationResult::Rejected);
899             m_webEngine->confirmationResult(authPopupData->auth);
900             break;
901     case YES:
902     case NO:
903     case CLOSE:
904     case CONNECT:
905         break;
906     default:
907         break;
908     }
909 }
910
911 void SimpleUI::showHistoryUI()
912 {
913     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
914     M_ASSERT(m_viewManager);
915     m_viewManager->pushViewToStack(m_historyUI.get());
916     m_historyUI->addHistoryItems(getHistory());
917 }
918
919 void SimpleUI::closeHistoryUI()
920 {
921     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
922     M_ASSERT(m_viewManager);
923     if (m_viewManager->topOfStack() == m_historyUI.get())
924         m_viewManager->popTheStack();
925 }
926
927 void SimpleUI::showSettingsUI()
928 {
929     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
930     M_ASSERT(m_viewManager);
931     m_viewManager->pushViewToStack(m_settingsUI.get());
932 }
933
934 void SimpleUI::closeSettingsUI()
935 {
936     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
937     M_ASSERT(m_viewManager);
938     if (m_viewManager->topOfStack() == m_settingsUI.get())
939         m_viewManager->popTheStack();
940 }
941
942 void SimpleUI::showMoreMenu()
943 {
944     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
945     M_ASSERT(m_viewManager);
946
947     bool desktopMode = m_webPageUI->stateEquals(WPUState::QUICK_ACCESS) ? m_quickAccess->isDesktopMode() : m_webEngine->isDesktopMode();
948     m_moreMenuUI->setDesktopMode(desktopMode);
949     m_viewManager->pushViewToStack(m_moreMenuUI.get());
950     m_moreMenuUI->showCurrentTab();
951
952     if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
953         m_moreMenuUI->setFavIcon(m_webEngine->getFavicon());
954         m_moreMenuUI->setWebTitle(m_webEngine->getTitle());
955         m_moreMenuUI->setURL(m_webEngine->getURI());
956     }
957     else {
958         m_moreMenuUI->setHomePageInfo();
959     }
960 }
961
962 void SimpleUI::closeMoreMenu()
963 {
964     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
965     M_ASSERT(m_viewManager);
966     if (m_viewManager->topOfStack() == m_moreMenuUI.get())
967         m_viewManager->popTheStack();
968     else
969         BROWSER_LOGD("[%s:%d] WARNING!!! closeMoreMenu is not topOfStack", __PRETTY_FUNCTION__, __LINE__);
970 }
971
972 void SimpleUI::switchToMobileMode()
973 {
974     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
975     if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
976         m_webEngine->switchToMobileMode();
977         m_viewManager->popStackTo(m_webPageUI.get());
978         m_webEngine->reload();
979     } else {
980         m_quickAccess->setDesktopMode(false);
981     }
982 }
983
984 void SimpleUI::switchToDesktopMode()
985 {
986     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
987     if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
988         m_webEngine->switchToDesktopMode();
989         m_webEngine->reload();
990     } else {
991         m_quickAccess->setDesktopMode(true);
992     }
993 }
994
995 void SimpleUI::showBookmarkManagerUI()
996 {
997     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
998     M_ASSERT(m_viewManager);
999     m_viewManager->pushViewToStack(m_bookmarkManagerUI.get());
1000     m_bookmarkManagerUI->addBookmarkItems(getBookmarks(ROOT_FOLDER));
1001 }
1002
1003 void SimpleUI::closeBookmarkManagerUI()
1004 {
1005     BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
1006     M_ASSERT(m_viewManager);
1007     if (m_viewManager->topOfStack() == m_bookmarkManagerUI.get())
1008     m_viewManager->popTheStack();
1009 }
1010
1011 void SimpleUI::settingsDeleteSelectedData(const std::string& str)
1012 {
1013     BROWSER_LOGD("[%s]: Deleting selected data", __func__);
1014     M_ASSERT(m_viewManager);
1015     NotificationPopup *popup = NotificationPopup::createNotificationPopup(m_viewManager->getContent());
1016     popup->show("Delete Web Browsing Data");
1017     onDeleteSelectedDataButton(str);
1018     popup->dismiss();
1019 }
1020
1021 void SimpleUI::onDeleteSelectedDataButton(const std::string& dataText)
1022 {
1023         BROWSER_LOGD("[%s]: TYPE : %s", __func__, dataText.c_str());
1024         if (dataText.find("CACHE") != std::string::npos)
1025                 m_webEngine->clearPrivateData();
1026         if (dataText.find("COOKIES") != std::string::npos)
1027                 m_webEngine->clearPrivateData();
1028         if (dataText.find("HISTORY") != std::string::npos)
1029                 m_historyService->clearAllHistory();
1030 }
1031
1032 void SimpleUI::settingsResetMostVisited()
1033 {
1034     BROWSER_LOGD("[%s]: Deleting most visited sites", __func__);
1035     M_ASSERT(m_viewManager);
1036     NotificationPopup *popup = NotificationPopup::createNotificationPopup(m_viewManager->getContent());
1037     popup->show("Reset Most Visited Sites");
1038     onDeleteMostVisitedButton(nullptr);
1039     popup->dismiss();
1040 }
1041
1042 void SimpleUI::onDeleteMostVisitedButton(std::shared_ptr< PopupData > /*popupData*/)
1043 {
1044     BROWSER_LOGD("[%s]: Deleting most visited", __func__);
1045     m_historyService->cleanMostVisitedHistoryItems();
1046 }
1047
1048 void SimpleUI::settingsResetBrowser()
1049 {
1050     BROWSER_LOGD("[%s]: Resetting browser", __func__);
1051     SimplePopup *popup = SimplePopup::createPopup();
1052     popup->setTitle("Reset browser");
1053     popup->addButton(OK);
1054     popup->addButton(CANCEL);
1055     popup->setMessage("Are you sure you want to reset browser?");
1056     popup->buttonClicked.connect(boost::bind(&SimpleUI::onResetBrowserButton, this, _1, _2));
1057     popup->show();
1058 }
1059
1060 void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1061 {
1062     if (button == OK) {
1063         BROWSER_LOGD("[%s]: OK", __func__);
1064         BROWSER_LOGD("[%s]: Resetting browser", __func__);
1065         M_ASSERT(m_viewManager);
1066
1067         NotificationPopup *popup = NotificationPopup::createNotificationPopup(m_viewManager->getContent());
1068         popup->show("Reset Browser");
1069
1070         m_webEngine->clearPrivateData();
1071         m_historyService->clearAllHistory();
1072         m_favoriteService->deleteAllBookmarks();
1073
1074         // Close all openend tabs
1075         std::vector<std::shared_ptr<tizen_browser::basic_webengine::TabContent>> openedTabs = m_webEngine->getTabContents();
1076         for (auto it = openedTabs.begin(); it < openedTabs.end(); ++it) {
1077             tizen_browser::basic_webengine::TabId id = it->get()->getId();
1078             m_currentSession.removeItem(id.toString());
1079             m_webEngine->closeTab(id);
1080         }
1081         //TODO: add here any missing functionality that should be cleaned.
1082
1083         popup->dismiss();
1084     }
1085 }
1086
1087 void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1088 {
1089     if (button == CLOSE_TAB) {
1090         BROWSER_LOGD("[%s]: CLOSE TAB", __func__);
1091         closeTab();
1092     }
1093 }
1094
1095 void SimpleUI::tabCreated()
1096 {
1097     int tabs = m_webEngine->tabsCount();
1098     m_webPageUI->setTabsNumber(tabs);
1099 }
1100
1101 bool SimpleUI::checkIfCreate()
1102 {
1103     int tabs = m_webEngine->tabsCount();
1104
1105     if (tabs >= m_tabLimit) {
1106         SimplePopup *popup = SimplePopup::createPopup();
1107         popup->setTitle("Maximum tab count reached.");
1108         popup->addButton(OK);
1109         popup->setMessage("Close other tabs to open another new tab");
1110         popup->buttonClicked.connect(boost::bind(&SimpleUI::tabLimitPopupButtonClicked, this, _1, _2));
1111         popup->show();
1112         return false;
1113     }
1114     else
1115         return true;
1116 }
1117
1118 void SimpleUI::updateView() {
1119     int tabs = m_webEngine->tabsCount();
1120     BROWSER_LOGD("[%s] Opened tabs: %d", __func__, tabs);
1121     if (tabs == 0) {
1122         switchViewToQuickAccess();
1123     } else if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
1124         switchViewToWebPage();
1125     }
1126     m_webPageUI->setTabsNumber(tabs);
1127 }
1128
1129 void SimpleUI::tabClosed(const tizen_browser::basic_webengine::TabId& id) {
1130     m_currentSession.removeItem(id.toString());
1131     updateView();
1132 }
1133
1134 void SimpleUI::searchWebPage(std::string &text, int flags)
1135 {
1136     m_webEngine->searchOnWebsite(text, flags);
1137 }
1138
1139 void SimpleUI::addToBookmarks(int folder_id)
1140 {
1141     BROWSER_LOGD("[%s,%d],", __func__, __LINE__);
1142     if (m_favoriteService)
1143     {
1144         if (m_webEngine && !m_webEngine->getURI().empty())
1145          {
1146                m_favoriteService->addToBookmarks(m_webEngine->getURI(), m_webEngine->getTitle(), std::string(),
1147                                                  m_webEngine->getSnapshotData(373, 240),
1148                                                  m_webEngine->getFavicon(),(unsigned int)folder_id);
1149          }
1150     }
1151 }
1152
1153 //TODO: Replace by direct call.
1154 void SimpleUI::deleteBookmark()
1155 {
1156         if (m_favoriteService)
1157                 m_favoriteService->deleteBookmark(m_webEngine->getURI());
1158 }
1159 }
1160 }