2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include "browser_config.h"
19 #if defined(USE_EWEBKIT)
20 #include <ewk_chromium.h>
23 #include <boost/any.hpp>
26 #include <Elementary.h>
28 #include <Ecore_Wayland.h>
33 #include "BrowserLogger.h"
34 #include "ServiceManager.h"
35 #include "AbstractWebEngine.h"
37 #include "Tools/EflTools.h"
38 #include "BrowserImage.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"
53 namespace tizen_browser{
56 EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui")
58 const std::string HomePageURL = "about:home";
59 const int ROOT_FOLDER = 0;
63 : AbstractMainWindow()
67 , m_bookmarkManagerUI()
72 , m_initialised(false)
73 , m_wvIMEStatus(false)
74 , m_ewkContext(ewk_context_new())
76 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
79 config::DefaultConfig config;
81 if (config.isMobileProfile()) {
82 elm_config_scale_set(boost::any_cast<double>(config.get("mobile_scale")));
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");
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);
94 elm_win_resize_object_add(main_window, m_viewManager->getContent());
95 evas_object_show(main_window);
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);
105 void SimpleUI::destroyUI()
107 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
108 evas_object_del(m_window.get());
111 std::string SimpleUI::edjePath(const std::string &file)
113 return std::string(EDJE_DIR) + file;
116 std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > SimpleUI::getBookmarks(int folder_id)
118 return m_favoriteService->getBookmarks(folder_id);
121 std::shared_ptr<services::HistoryItemVector> SimpleUI::getMostVisitedItems()
123 return m_historyService->getMostVisitedHistoryItems();
126 std::shared_ptr<services::HistoryItemVector> SimpleUI::getHistory()
128 return m_historyService->getHistoryToday();
131 int SimpleUI::exec(const std::string& _url)
133 BROWSER_LOGD("[%s] _url=%s, initialised=%d", __func__, _url.c_str(), m_initialised);
134 std::string url = _url;
137 if (m_window.get()) {
138 config::DefaultConfig config;
140 m_tabLimit = boost::any_cast <int> (config.get("TAB_LIMIT"));
141 m_favoritesLimit = boost::any_cast <int> (config.get("FAVORITES_LIMIT"));
147 // initModelServices() needs to be called after initUIServices()
152 connectModelSignals();
155 //Push first view to stack.
156 m_viewManager->pushViewToStack(m_webPageUI.get());
158 m_initialised = true;
161 m_currentSession = std::move(m_sessionService->getStorage()->createSession());
165 BROWSER_LOGD("[%s]: changing to homeUrl", __func__);
166 switchViewToQuickAccess();
167 restoreLastSession();
172 BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str());
176 void SimpleUI::restoreLastSession()
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)
183 for(auto iter=lastSession.items().begin(), end=lastSession.items().end(); iter != end; ++iter)
185 openNewTab(iter->second);
187 m_sessionService->getStorage()->deleteSession(lastSession);
192 //TODO: Move all service creation here:
193 void SimpleUI::loadUIServices()
195 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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"));
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"));
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"));
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"));
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"));
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"));
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"));
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"));
238 void SimpleUI::connectUISignals()
240 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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()));
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));
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));
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));
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));
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));
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));
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));
314 void SimpleUI::loadModelServices()
316 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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"));
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"));
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"));
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"));
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"));
344 void SimpleUI::initUIServices()
346 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
347 M_ASSERT (m_viewManager);
349 M_ASSERT(m_webPageUI.get());
350 m_webPageUI->init(m_viewManager->getContent());
352 M_ASSERT(m_quickAccess.get());
353 m_quickAccess->init(m_webPageUI->getContent());
355 M_ASSERT(m_tabUI.get());
356 m_tabUI->init(m_viewManager->getContent());
358 M_ASSERT(m_historyUI.get());
359 m_historyUI->init(m_viewManager->getContent());
361 M_ASSERT(m_moreMenuUI.get());
362 m_moreMenuUI->init(m_viewManager->getContent());
364 M_ASSERT(m_settingsUI.get());
365 m_settingsUI->init(m_viewManager->getContent());
367 M_ASSERT(m_bookmarkManagerUI.get());
368 m_bookmarkManagerUI->init(m_viewManager->getContent());
370 M_ASSERT(m_zoomUI.get());
371 m_zoomUI->init(m_viewManager->getContent());
374 void SimpleUI::initModelServices()
376 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
378 M_ASSERT(m_webEngine);
379 M_ASSERT(m_webPageUI->getContent());
380 m_webEngine->init(m_webPageUI->getContent());
382 M_ASSERT(m_favoriteService);
383 m_favoriteService->synchronizeBookmarks();
384 m_favoriteService->getBookmarks();
386 M_ASSERT(m_platformInputManager);
387 m_platformInputManager->init(m_window.get());
390 void SimpleUI::connectModelSignals()
392 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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));
411 m_favoriteService->bookmarkAdded.connect(boost::bind(&SimpleUI::onBookmarkAdded, this,_1));
412 m_favoriteService->bookmarkDeleted.connect(boost::bind(&SimpleUI::onBookmarkRemoved, this, _1));
414 m_historyService->historyDeleted.connect(boost::bind(&SimpleUI::onHistoryRemoved, this,_1));
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));
425 void SimpleUI::switchViewToWebPage()
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());
434 void SimpleUI::switchToTab(const tizen_browser::basic_webengine::TabId& tabId)
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);
441 if(m_webEngine->isLoadError()){
442 BROWSER_LOGD("[%s:%d] LOAD ERROR!", __PRETTY_FUNCTION__, __LINE__);
446 BROWSER_LOGD("[%s:%d] swiching to web_view ", __PRETTY_FUNCTION__, __LINE__);
447 switchViewToWebPage();
448 m_zoomUI->showNavigation();
451 void SimpleUI::showQuickAccess()
453 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
454 m_quickAccess->showMostVisited(getMostVisitedItems());
455 m_quickAccess->showUI();
458 void SimpleUI::switchViewToQuickAccess()
460 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
461 M_ASSERT(m_viewManager);
463 m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
464 m_webEngine->disconnectCurrentWebViewSignals();
465 m_viewManager->popStackTo(m_webPageUI.get());
468 void SimpleUI::switchViewToIncognitoPage()
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());
477 void SimpleUI::openNewTab(const std::string &uri, bool desktopMode, bool incognitoMode)
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);
482 m_webPageUI->toIncognito(incognitoMode);
484 switchViewToIncognitoPage();
487 void SimpleUI::closeTab()
489 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
490 auto tabId = m_webEngine->currentTabId();
494 void SimpleUI::closeTab(const tizen_browser::basic_webengine::TabId& id)
496 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
497 m_currentSession.removeItem(id.toString());
498 m_webEngine->closeTab(id);
502 bool SimpleUI::checkBookmark()
504 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
505 if(m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
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());
513 BROWSER_LOGD("[%s] There is no bookmark for this site [%s], set indicator off", __func__, m_webEngine->getURI().c_str());
517 // Consider removing these functions
518 void SimpleUI::onBookmarkAdded(std::shared_ptr<tizen_browser::services::BookmarkItem>)
521 m_moreMenuUI->changeBookmarkStatus(true);
522 m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" added to bookmark")).c_str() );
526 void SimpleUI::onBookmarkRemoved(const std::string& uri)
528 BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
530 m_moreMenuUI->changeBookmarkStatus(false);
531 m_moreMenuUI->createToastPopup( (std::string(m_webEngine->getTitle()) + std::string(" removed from bookmark")).c_str() );
535 void SimpleUI::onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
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);
543 void SimpleUI::onOpenURLInNewTab(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem)
545 onOpenURLInNewTab(historyItem, m_quickAccess->isDesktopMode());
548 void SimpleUI::onMostVisitedTileClicked(std::shared_ptr< services::HistoryItem > historyItem, int itemsNumber)
550 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
551 m_quickAccess->openDetailPopup(historyItem, m_historyService->getHistoryItemsByURL(historyItem->getUrl(), itemsNumber));
554 void SimpleUI::onClearHistoryClicked()
556 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
557 m_historyService->clearAllHistory();
560 void SimpleUI::onMostVisitedClicked()
562 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
563 m_quickAccess->showMostVisited(getMostVisitedItems());
566 void SimpleUI::onBookmarkButtonClicked()
568 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
569 m_quickAccess->showBookmarks(getBookmarks());
572 void SimpleUI::onBookmarkClicked(std::shared_ptr<tizen_browser::services::BookmarkItem> bookmarkItem)
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);
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();
590 void SimpleUI::onHistoryRemoved(const std::string& uri)
592 BROWSER_LOGD("[%s] deleted %s", __func__, uri.c_str());
595 void SimpleUI::onReturnPressed(MenuButton *m)
597 BROWSER_LOGD("[%s]", __func__);
598 m_platformInputManager->returnPressed.disconnect_all_slots();
599 m_platformInputManager->returnPressed.connect(boost::bind(&elm_exit));
603 void SimpleUI::setwvIMEStatus(bool status)
605 BROWSER_LOGD("[%s]", __func__);
606 m_wvIMEStatus = status;
609 void SimpleUI::onBackPressed()
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();
621 m_viewManager->popTheStack();
625 void SimpleUI::onEscapePressed()
627 BROWSER_LOGD("[%s]", __func__);
628 m_zoomUI->escapeZoom();
631 void SimpleUI::reloadEnable(bool enable)
633 m_webPageUI->setReloadButtonEnabled(enable);
636 void SimpleUI::stopEnable(bool enable)
638 m_webPageUI->setStopButtonEnabled(enable);
641 void SimpleUI::loadStarted()
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();
649 void SimpleUI::progressChanged(double progress)
651 m_webPageUI->progressChanged(progress);
654 void SimpleUI::loadFinished()
656 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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();
668 void SimpleUI::loadStopped()
670 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
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>());
679 m_webPageUI->loadStopped();
682 void SimpleUI::loadError()
684 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
685 m_webPageUI->switchViewToErrorPage();
688 void SimpleUI::filterURL(const std::string& url)
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()){
699 //check if url is in favorites
701 //check if url is in blocked
705 if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
708 m_webEngine->setURI(url);
710 if (m_webEngine->isPrivateMode(m_webEngine->currentTabId()))
711 switchViewToWebPage();
713 m_webPageUI->getURIEntry().clearFocus();
716 void SimpleUI::onURLEntryEditedByUser(const std::shared_ptr<std::string> editedUrlPtr)
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);
729 void SimpleUI::onMouseClick()
731 m_webPageUI->getUrlHistoryList()->onMouseClick();
734 void SimpleUI::onRedKeyPressed()
736 m_webPageUI->onRedKeyPressed();
739 void SimpleUI::webEngineURLChanged(const std::string url)
741 BROWSER_LOGD("webEngineURLChanged:%s", url.c_str());
742 m_webPageUI->getURIEntry().clearFocus();
745 void SimpleUI::showZoomUI()
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());
757 void SimpleUI::closeZoomUI()
759 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
764 void SimpleUI::setZoomFactor(int level)
766 BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__);
767 m_webEngine->setZoomFactor(level);
770 int SimpleUI::getZoomFactor()
772 BROWSER_LOGD("[%s:%d] %d", __PRETTY_FUNCTION__, __LINE__, m_webEngine->getZoomFactor());
773 return m_webEngine->getZoomFactor();
776 void SimpleUI::scrollView(const int& dx, const int& dy)
778 m_webEngine->scrollView(dx, dy);
781 void SimpleUI::showTabUI()
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());
789 void SimpleUI::closeTabUI()
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();
797 void SimpleUI::newTabClicked()
799 if (!checkIfCreate())
802 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
803 m_webPageUI->toIncognito(false);
804 switchViewToQuickAccess();
807 void SimpleUI::tabClicked(const tizen_browser::basic_webengine::TabId& tabId)
809 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
810 m_viewManager->popStackTo(m_webPageUI.get());
811 m_webPageUI->toIncognito(m_webEngine->isPrivateMode(tabId));
815 void SimpleUI::closeTabsClicked(const tizen_browser::basic_webengine::TabId& tabId)
817 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
818 m_webEngine->closeTab(tabId);
821 int SimpleUI::tabsCount()
823 return m_webEngine->tabsCount();
826 void SimpleUI::handleConfirmationRequest(basic_webengine::WebConfirmationPtr webConfirmation)
828 BROWSER_LOGD("%s", __func__);
829 switch(webConfirmation->getConfirmationType())
831 case basic_webengine::WebConfirmation::ConfirmationType::Authentication:
833 basic_webengine::AuthenticationConfirmationPtr auth = std::dynamic_pointer_cast<basic_webengine::AuthenticationConfirmation, basic_webengine::WebConfirmation>(webConfirmation);
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);
843 elm_object_translatable_part_text_set(popup_content, "login_label", "Login");
844 elm_object_translatable_part_text_set(popup_content, "password_label", "Password");
846 elm_object_part_text_set(popup_content, "login_label", "Login");
847 elm_object_part_text_set(popup_content, "password_label", "Password");
850 Evas_Object *loginEntry = elm_entry_add(popup_content);
851 elm_object_part_content_set(popup_content, "login", loginEntry);
853 Evas_Object *passwordEntry = elm_entry_add(popup_content);
854 elm_object_part_content_set(popup_content, "password", passwordEntry);
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));
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:
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);
887 void SimpleUI::authPopupButtonClicked(PopupButtons button, std::shared_ptr<PopupData> popupData)
889 std::shared_ptr<AuthenticationPopupData> authPopupData = std::dynamic_pointer_cast<AuthenticationPopupData, PopupData>(popupData);
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);
898 authPopupData->auth->setResult(basic_webengine::WebConfirmation::ConfirmationResult::Rejected);
899 m_webEngine->confirmationResult(authPopupData->auth);
911 void SimpleUI::showHistoryUI()
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());
919 void SimpleUI::closeHistoryUI()
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();
927 void SimpleUI::showSettingsUI()
929 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
930 M_ASSERT(m_viewManager);
931 m_viewManager->pushViewToStack(m_settingsUI.get());
934 void SimpleUI::closeSettingsUI()
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();
942 void SimpleUI::showMoreMenu()
944 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
945 M_ASSERT(m_viewManager);
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();
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());
958 m_moreMenuUI->setHomePageInfo();
962 void SimpleUI::closeMoreMenu()
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();
969 BROWSER_LOGD("[%s:%d] WARNING!!! closeMoreMenu is not topOfStack", __PRETTY_FUNCTION__, __LINE__);
972 void SimpleUI::switchToMobileMode()
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();
980 m_quickAccess->setDesktopMode(false);
984 void SimpleUI::switchToDesktopMode()
986 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
987 if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
988 m_webEngine->switchToDesktopMode();
989 m_webEngine->reload();
991 m_quickAccess->setDesktopMode(true);
995 void SimpleUI::showBookmarkManagerUI()
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));
1003 void SimpleUI::closeBookmarkManagerUI()
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();
1011 void SimpleUI::settingsDeleteSelectedData(const std::string& str)
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);
1021 void SimpleUI::onDeleteSelectedDataButton(const std::string& dataText)
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();
1032 void SimpleUI::settingsResetMostVisited()
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);
1042 void SimpleUI::onDeleteMostVisitedButton(std::shared_ptr< PopupData > /*popupData*/)
1044 BROWSER_LOGD("[%s]: Deleting most visited", __func__);
1045 m_historyService->cleanMostVisitedHistoryItems();
1048 void SimpleUI::settingsResetBrowser()
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));
1060 void SimpleUI::onResetBrowserButton(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1063 BROWSER_LOGD("[%s]: OK", __func__);
1064 BROWSER_LOGD("[%s]: Resetting browser", __func__);
1065 M_ASSERT(m_viewManager);
1067 NotificationPopup *popup = NotificationPopup::createNotificationPopup(m_viewManager->getContent());
1068 popup->show("Reset Browser");
1070 m_webEngine->clearPrivateData();
1071 m_historyService->clearAllHistory();
1072 m_favoriteService->deleteAllBookmarks();
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);
1081 //TODO: add here any missing functionality that should be cleaned.
1087 void SimpleUI::tabLimitPopupButtonClicked(PopupButtons button, std::shared_ptr< PopupData > /*popupData*/)
1089 if (button == CLOSE_TAB) {
1090 BROWSER_LOGD("[%s]: CLOSE TAB", __func__);
1095 void SimpleUI::tabCreated()
1097 int tabs = m_webEngine->tabsCount();
1098 m_webPageUI->setTabsNumber(tabs);
1101 bool SimpleUI::checkIfCreate()
1103 int tabs = m_webEngine->tabsCount();
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));
1118 void SimpleUI::updateView() {
1119 int tabs = m_webEngine->tabsCount();
1120 BROWSER_LOGD("[%s] Opened tabs: %d", __func__, tabs);
1122 switchViewToQuickAccess();
1123 } else if (!m_webPageUI->stateEquals(WPUState::QUICK_ACCESS)) {
1124 switchViewToWebPage();
1126 m_webPageUI->setTabsNumber(tabs);
1129 void SimpleUI::tabClosed(const tizen_browser::basic_webengine::TabId& id) {
1130 m_currentSession.removeItem(id.toString());
1134 void SimpleUI::searchWebPage(std::string &text, int flags)
1136 m_webEngine->searchOnWebsite(text, flags);
1139 void SimpleUI::addToBookmarks(int folder_id)
1141 BROWSER_LOGD("[%s,%d],", __func__, __LINE__);
1142 if (m_favoriteService)
1144 if (m_webEngine && !m_webEngine->getURI().empty())
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);
1153 //TODO: Replace by direct call.
1154 void SimpleUI::deleteBookmark()
1156 if (m_favoriteService)
1157 m_favoriteService->deleteBookmark(m_webEngine->getURI());