m_webPageUI->getQuickAccessEditUI()->deleteSelectedMostVisitedItems.connect(
boost::bind(&QuickAccess::deleteSelectedMostVisitedItems, m_quickAccess.get()));
m_webPageUI->getQuickAccessEditUI()->closeUI.connect(
- boost::bind(&SimpleUI::closeTopView, this));
+ boost::bind(&SimpleUI::popTheStack, this));
m_webPageUI->focusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::setFocus, m_webEngine.get()));
m_webPageUI->unfocusWebView.connect(boost::bind(&basic_webengine::AbstractWebEngine::clearFocus, m_webEngine.get()));
m_webPageUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
void SimpleUI::connectQuickAccessSignals()
{
M_ASSERT(m_quickAccess.get());
- m_quickAccess->openURL.connect(boost::bind(&SimpleUI::onOpenURL, this, _1, _2));
+ m_quickAccess->openURL.connect(boost::bind(&SimpleUI::openURL, this, _1, _2));
m_quickAccess->getMostVisitedItems.connect(boost::bind(&SimpleUI::onMostVisitedClicked, this));
m_quickAccess->getQuickAccessItems.connect(boost::bind(&SimpleUI::onQuickAccessClicked, this));
m_quickAccess->switchViewToWebPage.connect(boost::bind(&SimpleUI::switchViewToWebPage, this));
void SimpleUI::connectTabsSignals()
{
M_ASSERT(m_tabUI.get());
- m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::closeTabUI, this));
+ m_tabUI->closeTabUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
m_tabUI->newTabClicked.connect(boost::bind(&SimpleUI::newTabClicked, this));
m_tabUI->tabClicked.connect(boost::bind(&SimpleUI::tabClicked, this,_1));
m_tabUI->closeTabsClicked.connect(boost::bind(&SimpleUI::closeTabsClicked, this,_1));
&m_storageService->getSettingsStorage(), _1, ""));
m_tabUI->showPasswordUI.connect(boost::bind(&SimpleUI::showPasswordUI, this));
m_tabUI->showNoPasswordWarning.connect(boost::bind(&SimpleUI::onFirstSecretMode, this));
- m_tabUI->getPasswordUI().closeUI.connect(boost::bind(&SimpleUI::closeTopView, this));
+ m_tabUI->getPasswordUI().closeUI.connect(boost::bind(&SimpleUI::popTheStack, this));
m_tabUI->getPasswordUI().setDBStringParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsString,
&m_storageService->getSettingsStorage(), _1, _2));
m_tabUI->getPasswordUI().setDBBoolParamValue.connect(boost::bind(&storage::SettingsStorage::setSettingsBool,
M_ASSERT(m_historyUI.get());
m_historyUI->clearHistoryClicked.connect(boost::bind(&SimpleUI::onClearHistoryAllClicked, this));
m_historyUI->signalDeleteHistoryItems.connect(boost::bind(&SimpleUI::onDeleteHistoryItems, this, _1));
- m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::closeHistoryUI, this));
- m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::onOpenURL, this, _1, _2, false));
+ m_historyUI->closeHistoryUIClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
+ m_historyUI->signalHistoryItemClicked.connect(boost::bind(&SimpleUI::openURL, this, _1, _2, false));
m_historyUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
}
void SimpleUI::connectBookmarkFlowSignals()
{
M_ASSERT(m_bookmarkFlowUI.get());
- m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::closeBookmarkFlowUI, this));
+ m_bookmarkFlowUI->closeBookmarkFlowClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
m_bookmarkFlowUI->saveBookmark.connect(boost::bind(&SimpleUI::addBookmark, this, _1));
m_bookmarkFlowUI->editBookmark.connect(boost::bind(&SimpleUI::editBookmark, this, _1));
m_bookmarkFlowUI->showSelectFolderUI.connect(boost::bind(&SimpleUI::showBookmarkManagerUI, this,
void SimpleUI::connectBookmarkManagerSignals()
{
M_ASSERT(m_bookmarkManagerUI.get());
- m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerUI, this));
+ m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::popTheStack, this));
m_bookmarkManagerUI->folderSelected.connect(boost::bind(&BookmarkFlowUI::setFolder, m_bookmarkFlowUI.get(), _1));
m_bookmarkManagerUI->getWindow.connect(boost::bind(&SimpleUI::getMainWindow, this));
m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1));
// SETTINGS OVERALL
m_settingsManager->connectOpenSignals();
SPSC.closeSettingsUIClicked.connect(
- boost::bind(&SimpleUI::closeSettingsUI, this));
+ boost::bind(&SimpleUI::popTheStack, this));
SPSC.showSettings.connect(
boost::bind(&SimpleUI::showSettings, this,_1));
SPSC.getWebEngineSettingsParam.connect(
void SimpleUI::popTheStack()
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_viewManager.popTheStack();
enableManualRotation(isManualRotation(m_viewManager.topOfStack()));
}
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_webEngine->isSuspended())
m_webEngine->resume();
- m_webEngine->connectCurrentWebViewSignals();
m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
}
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webEngine->switchToTab(tabId);
- switchViewToWebPage();
+ m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), m_webEngine->getURI(), m_webEngine->isLoading());
}
void SimpleUI::showQuickAccess()
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
- m_webEngine->disconnectCurrentWebViewSignals();
+ m_webEngine->suspend();
popStackTo(m_webPageUI);
}
return checkBookmark();
}
-void SimpleUI::onOpenURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
+void SimpleUI::openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode)
{
- onOpenURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
+ openURL(historyItem->getUrl(), historyItem->getTitle(), desktopMode);
}
-void SimpleUI::onOpenURL(const std::string& url)
+void SimpleUI::openURL(const std::string& url)
{
// TODO: desktop mode should be checked in WebView or QuickAcces
// (depends on which view is active)
- onOpenURL(url, "", m_quickAccess->isDesktopMode());
+ openURL(url, "", m_quickAccess->isDesktopMode());
}
-void SimpleUI::onOpenURL(const std::string& url, const std::string& title, bool desktopMode)
+void SimpleUI::openURL(const std::string& url, const std::string& title, bool desktopMode)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
if (m_webPageUI) {
if (bookmarkItem->is_folder())
m_bookmarkManagerUI->addBookmarkItems(bookmarkItem, m_favoriteService->getAllBookmarkItems(bookmarkItem->getId()));
else {
- std::string bookmarkAddress = bookmarkItem->getAddress();
-
- if (tabsCount() == 0)
- openNewTab(bookmarkAddress);
- else {
- std::string bookmarkTitle = bookmarkItem->getTitle();
- m_webEngine->setURI(bookmarkAddress);
- m_webPageUI->switchViewToWebPage(m_webEngine->getLayout(), bookmarkAddress, m_webEngine->isLoading());
- m_webPageUI->getURIEntry().clearFocus();
- closeBookmarkManagerUI();
- }
- popStackTo(m_webPageUI);
+ openURL(bookmarkItem->getAddress());
}
}
} else {
m_webEngine->backButtonClicked();
}
- } else if (m_viewManager.topOfStack() == m_settingsUI) {
- closeSettingsUI();
} else {
popTheStack();
}
void SimpleUI::filterURL(const std::string& url)
{
BROWSER_LOGD("[%s:%d] url=%s", __PRETTY_FUNCTION__, __LINE__, url.c_str());
- //check for special urls (like: 'about:home')
- //if there will be more addresses may be we should
- //create some kind of std::man<std::string url, bool *(doSomethingWithUrl)()>
- //and then just map[url]() ? m_webEngine->setURI(url) : /*do nothing*/;;
- if(/*url.empty() ||*/ url == HomePageURL){
- m_webPageUI->getURIEntry().changeUri("");
- } else if (!url.empty()){
-
- //check if url is in favorites
-
- //check if url is in blocked
-
- //no filtering
- if (m_webPageUI->stateEquals(WPUState::QUICK_ACCESS))
- openNewTab(url, "", boost::none, false, basic_webengine::TabOrigin::QUICKACCESS);
- else
- m_webEngine->setURI(url);
-
- if (m_webEngine->isSecretMode() ||
- m_webPageUI->stateEquals(WPUState::MAIN_ERROR_PAGE))
- switchViewToWebPage();
+ if (url == HomePageURL) {
+ m_webPageUI->getURIEntry().changeUri("");
+ switchViewToQuickAccess();
+ } else if (!url.empty()) {
+ openURL(url);
}
m_webPageUI->getURIEntry().clearFocus();
}
onGenerateThumb(m_webEngine->currentTabId());
}
-void SimpleUI::closeTabUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_viewManager.topOfStack() == m_tabUI)
- popTheStack();
-}
-
void SimpleUI::refetchTabUIData() {
auto tabsContents = m_webEngine->getTabContents();
m_tabService->fillThumbs(tabsContents);
return ret;
}
-void SimpleUI::closeHistoryUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_viewManager.topOfStack() == m_historyUI)
- popTheStack();
-}
-
void SimpleUI::showSettings(unsigned s)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
pushViewToStack(m_settingsUI);
}
-void SimpleUI::closeSettingsUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- popTheStack();
-}
-
void SimpleUI::onDefSearchEngineClicked()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
pushViewToStack(m_bookmarkFlowUI);
}
-void SimpleUI::closeBookmarkFlowUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_viewManager.topOfStack() == m_bookmarkFlowUI)
- popTheStack();
-}
-
void SimpleUI::showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
BookmarkManagerState state)
{
m_historyService->clearURLHistory(oldUrl);
}
-void SimpleUI::closeBookmarkManagerUI()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- if (m_viewManager.topOfStack() == m_bookmarkManagerUI)
- popTheStack();
-}
-
void SimpleUI::settingsDeleteSelectedData(const std::map<int, bool>& options)
{
BROWSER_LOGD("[%s]: Deleting selected data", __func__);
void SimpleUI::changeEngineState()
{
m_webEngine->changeState();
- m_webEngine->disconnectCurrentWebViewSignals();
m_webPageUI->switchViewToQuickAccess(m_quickAccess->getContent());
updateView();
}
pushViewToStack(sAUI(&m_tabUI->getPasswordUI()));
}
-void SimpleUI::closeTopView()
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
- popTheStack();
-}
-
void SimpleUI::onFirstSecretMode()
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
NotificationPopup::createNotificationPopup(m_viewManager.getContent());
popup->show("Open a webpage to perform this operation.");
popup->dismiss();
- closeSettingsUI();
+ popTheStack();
return;
}
m_webEngine->setUserAgent(newUA);
popup->show("UserAgent updated..");
popup->dismiss();
- closeSettingsUI();
+ popTheStack();
}
}
static void onUrlIMEClosed(void* data, Evas_Object*, void*);
void onHistoryRemoved(const std::string& uri);
- void onOpenURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
+ void openURL(std::shared_ptr<tizen_browser::services::HistoryItem> historyItem, bool desktopMode);
/**
* @brief Handles 'openUrlInNewTab' signals. Uses QuickAccess to indicate
* desktop/mobile mode.
* TODO: desktop mode should be checked in WebView or QuickAcces (depends
* on which view is active)
*/
- void onOpenURL(const std::string& url);
- void onOpenURL(const std::string& url, const std::string& title, bool desktopMode);
+ void openURL(const std::string& url);
+ void openURL(const std::string& url, const std::string& title, bool desktopMode);
void onClearHistoryAllClicked();
void onDeleteHistoryItems(int id);
void scrollView(const int& dx, const int& dy);
void showTabUI();
- void closeTabUI();
void refetchTabUIData();
void switchToMobileMode();
void switchToDesktopMode();
void deleteMostVisited();
void addQuickAccess();
Evas_Object* showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper naviframe, bool removeMode = false);
- void closeHistoryUI();
void showSettings(unsigned);
- void closeSettingsUI();
void onDefSearchEngineClicked();
void onSaveContentToClicked();
std::string requestSettingsCurrentPage();
void onEditOtherPagePopupClicked(const std::string& newName);
void showBookmarkFlowUI();
- void closeBookmarkFlowUI();
void showFindOnPageUI(const std::string& str);
void showCertificatePopup();
void showCertificatePopup(const std::string& host, const std::string& pem, services::CertificateContents::HOST_TYPE type);
static void __orientation_changed(void* data, Evas_Object*, void*);
Evas_Object* getMainWindow();
- void closeBookmarkManagerUI();
void showBookmarkManagerUI(std::shared_ptr<services::BookmarkItem> parent,
BookmarkManagerState state);
void showHomePage();
void searchWebPage(std::string &text, int flags);
void showPasswordUI();
- void closeTopView();
void onFirstSecretMode();
std::string edjePath(const std::string &);
, m_guiParent(nullptr)
, m_stopped(false)
, m_webViewCacheInitialized(false)
- , m_currentTabId(TabId::NONE)
, m_currentWebView(nullptr)
, m_stateStruct(&m_normalStateStruct)
, m_tabIdCreated(-1)
+ , m_signalsConnected(false)
, m_downloadControl(nullptr)
{
m_stateStruct->mostRecentTab.clear();
void WebEngineService::connectSignals(std::shared_ptr<WebView> webView)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__)
M_ASSERT(webView);
+
+ if (m_signalsConnected) {
+ BROWSER_LOGW("[%s:%d] Signals already connected!", __PRETTY_FUNCTION__, __LINE__);
+ return;
+ }
+
webView->favIconChanged.connect(boost::bind(&WebEngineService::_favIconChanged, this, _1));
webView->uriChanged.connect(boost::bind(&WebEngineService::_uriChanged, this, _1));
webView->loadFinished.connect(boost::bind(&WebEngineService::_loadFinished, this));
webView->rotatePrepared.connect([this](){rotatePrepared();});
webView->unsecureConnection.connect(boost::bind(&WebEngineService::_unsecureConnection, this));
webView->findOnPage.connect(boost::bind(&WebEngineService::_findOnPage, this, _1));
+ m_signalsConnected = true;
}
void WebEngineService::disconnectSignals(std::shared_ptr<WebView> webView)
webView->rotatePrepared.disconnect_all_slots();
webView->unsecureConnection.disconnect(boost::bind(&WebEngineService::_unsecureConnection, this));
webView->findOnPage.disconnect(boost::bind(&WebEngineService::_findOnPage, this, _1));
-}
-
-void WebEngineService::disconnectCurrentWebViewSignals()
-{
- if (m_currentWebView.get())
- disconnectSignals(m_currentWebView);
-}
-
-void WebEngineService::connectCurrentWebViewSignals()
-{
- if (m_currentWebView)
- connectSignals(m_currentWebView);
- else
- BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
+ m_signalsConnected = false;
}
int WebEngineService::createTabId()
BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
return;
}
+ disconnectSignals(m_currentWebView);
m_currentWebView->suspend();
unregisterHWKeyCallback();
}
BROWSER_LOGD("[%s:%d:%s] ", __PRETTY_FUNCTION__, __LINE__,"m_currentWebView is null");
return;
}
- m_currentWebView->resume();
+ if (!m_signalsConnected)
+ connectSignals(m_currentWebView);
+ if (m_currentWebView->isSuspended())
+ m_currentWebView->resume();
registerHWKeyCallback();
}
TabId WebEngineService::currentTabId() const
{
- return m_currentTabId;
+ return m_stateStruct->currentTabId;
}
std::vector<TabContentPtr> WebEngineService::getTabContents() const {
return false;
}
- if (newTabId != m_currentTabId) {
+ if (newTabId != m_stateStruct->currentTabId) {
// if there was any running WebView
- if (m_currentWebView) {
- disconnectSignals(m_currentWebView);
+ if (m_currentWebView)
suspend();
- }
closeFindOnPage();
m_currentWebView = m_stateStruct->tabs[newTabId];
- m_currentTabId = newTabId;
+ m_stateStruct->currentTabId = newTabId;
m_stateStruct->mostRecentTab.erase(
std::remove(m_stateStruct->mostRecentTab.begin(),
m_stateStruct->mostRecentTab.end(),
newTabId),
m_stateStruct->mostRecentTab.end());
m_stateStruct->mostRecentTab.push_back(newTabId);
-
}
- connectSignals(m_currentWebView);
resume();
uriChanged(m_currentWebView->getURI());
bool WebEngineService::closeTab()
{
- BROWSER_LOGD("[%s:%d] closing tab=%s", __PRETTY_FUNCTION__, __LINE__, m_currentTabId.toString().c_str());
- bool res = closeTab(m_currentTabId);
- return res;
+ BROWSER_LOGD("[%s:%d] closing tab=%s", __PRETTY_FUNCTION__, __LINE__,
+ m_stateStruct->currentTabId.toString().c_str());
+ return closeTab(m_stateStruct->currentTabId);
}
bool WebEngineService::closeTab(TabId id) {
closingTabId),
m_stateStruct->mostRecentTab.end());
- if (closingTabId == m_currentTabId) {
+ if (closingTabId == m_stateStruct->currentTabId) {
if (m_currentWebView)
m_currentWebView.reset();
}
if (m_stateStruct->tabs.size() == 0) {
- m_currentTabId = TabId::NONE;
+ m_stateStruct->currentTabId = TabId::NONE;
}
- else if (closingTabId == m_currentTabId && m_stateStruct->mostRecentTab.size()){
+ else if (closingTabId == m_stateStruct->currentTabId && m_stateStruct->mostRecentTab.size()){
res = switchToTab(m_stateStruct->mostRecentTab.back());
}
return;
}
- if (m_currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
+ if (m_stateStruct->currentTabId == TabId::NONE || m_currentWebView->clearTextSelection())
return;
if (m_currentWebView->isFullScreen()) {
void WebEngineService::changeState()
{
+ suspend();
+
if (m_state == State::NORMAL) {
m_state = State::SECRET;
m_stateStruct = &m_secretStateStruct;
m_state = State::NORMAL;
m_stateStruct = &m_normalStateStruct;
}
+
+ if (m_stateStruct->tabs.empty())
+ m_currentWebView = nullptr;
+ else
+ m_currentWebView = m_stateStruct->tabs[m_stateStruct->currentTabId];
}
} /* end of webengine_service */
void WebView::registerCallbacks()
{
evas_object_smart_callback_add(m_ewkView, "load,started", __loadStarted, this);
- evas_object_smart_callback_add(m_ewkView, "load,stop", __loadStop, this);
evas_object_smart_callback_add(m_ewkView, "load,finished", __loadFinished, this);
evas_object_smart_callback_add(m_ewkView, "load,progress", __loadProgress, this);
evas_object_smart_callback_add(m_ewkView, "load,error", __loadError, this);
void WebView::unregisterCallbacks()
{
evas_object_smart_callback_del_full(m_ewkView, "load,started", __loadStarted, this);
- evas_object_smart_callback_del_full(m_ewkView, "load,stop", __loadStop, this);
evas_object_smart_callback_del_full(m_ewkView, "load,finished", __loadFinished, this);
evas_object_smart_callback_del_full(m_ewkView, "load,progress", __loadProgress, this);
evas_object_smart_callback_del_full(m_ewkView, "load,error", __loadError, this);
void WebView::stopLoading(void)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_isLoading = false;
ewk_view_stop(m_ewkView);
loadStop();
void WebView::reload(void)
{
+ BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
m_isLoading = true;
if(m_loadError)
{
self->loadStarted();
}
-void WebView::__loadStop(void * data, Evas_Object * /* obj */, void * /* event_info */)
-{
- BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
-
- WebView * self = reinterpret_cast<WebView *>(data);
- self->m_isLoading = false;
-
- self->loadStop();
-}
-
void WebView::__loadFinished(void * data, Evas_Object * /* obj */, void * /* event_info */)
{
BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);