From a9d0e79eeb358092ca6db79f845fc3bbe6f77c64 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Thu, 24 Sep 2015 23:08:55 +0200 Subject: [PATCH] RecoveryJsObject: Use safer method to get BrowserWindow from WebPage --- src/lib/session/recoveryjsobject.cpp | 21 ++++++++++++++++++--- src/lib/session/recoveryjsobject.h | 3 +++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/lib/session/recoveryjsobject.cpp b/src/lib/session/recoveryjsobject.cpp index 3827276bd..b5c9890dd 100644 --- a/src/lib/session/recoveryjsobject.cpp +++ b/src/lib/session/recoveryjsobject.cpp @@ -38,14 +38,29 @@ void RecoveryJsObject::setPage(WebPage *page) void RecoveryJsObject::startNewSession() { - m_page->load(static_cast(m_page->view())->browserWindow()->homepageUrl()); + BrowserWindow *window = getBrowserWindow(); + if (!window) + return; + + m_page->load(window->homepageUrl()); mApp->destroyRestoreManager(); } void RecoveryJsObject::restoreSession() { - if (!mApp->restoreSession(static_cast(m_page->view())->browserWindow() , m_manager->restoreData())) { + BrowserWindow *window = getBrowserWindow(); + if (!window) + return; + + bool ok = mApp->restoreSession(window , m_manager->restoreData()); + + if (!ok) startNewSession(); - } +} + +BrowserWindow *RecoveryJsObject::getBrowserWindow() const +{ + TabbedWebView *view = qobject_cast(m_page->view()); + return view ? view->browserWindow() : Q_NULLPTR; } diff --git a/src/lib/session/recoveryjsobject.h b/src/lib/session/recoveryjsobject.h index d916ec728..908387250 100644 --- a/src/lib/session/recoveryjsobject.h +++ b/src/lib/session/recoveryjsobject.h @@ -22,6 +22,7 @@ #include class WebPage; +class BrowserWindow; class RestoreManager; class RecoveryJsObject : public QObject @@ -37,6 +38,8 @@ public slots: void restoreSession(); private: + BrowserWindow *getBrowserWindow() const; + RestoreManager *m_manager; WebPage *m_page; };