diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Configuration.hpp | 22 | ||||
| -rw-r--r-- | src/LuaRuntime.cpp | 7 | ||||
| -rw-r--r-- | src/LuaRuntime.hpp | 3 | ||||
| -rw-r--r-- | src/WindowActionRouter.cpp | 5 | ||||
| -rw-r--r-- | src/WindowMediator.cpp | 6 | ||||
| -rw-r--r-- | src/WindowMediator.hpp | 1 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.cpp | 3 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.cpp | 4 |
9 files changed, 39 insertions, 14 deletions
diff --git a/src/Configuration.hpp b/src/Configuration.hpp index 1f861fa..7c97b72 100644 --- a/src/Configuration.hpp +++ b/src/Configuration.hpp @@ -15,6 +15,7 @@ private: {"user_agent", QWebEngineProfile::defaultProfile()->httpUserAgent()}, {"downloads_dir", QWebEngineProfile::defaultProfile()->downloadPath()}, {"app_data_dir", QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)}, + {"permissions_persistance", "always"}, }; QDir config_dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation)); @@ -42,6 +43,22 @@ public: QString new_view_url() const { return get_config("new_view_url").toString(); } QString user_agent() const { return get_config("user_agent").toString(); } QString downloads_dir() const { return get_config("downloads_dir").toString(); } + QString permissions_persistance() const { + return get_config("permissions_persistance").toString(); + } + + QWebEngineProfile::PersistentPermissionsPolicy permission_persistance_policy() const { + return to_permission_persistance_policy(permissions_persistance()); + } + + static QWebEngineProfile::PersistentPermissionsPolicy + to_permission_persistance_policy(const QString &persistance) { + if (persistance == "session") + return QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory; + if (persistance == "never") + return QWebEngineProfile::PersistentPermissionsPolicy::AskEveryTime; + return QWebEngineProfile::PersistentPermissionsPolicy::StoreOnDisk; + } DEFINE_GETTER(get_config_dir, config_dir) DEFINE_SETTER(set_config_dir, config_dir) @@ -53,11 +70,14 @@ private: void on_update(const QString &name, const QVariant &value) { if (name == "user_agent") emit user_agent_updated(value.toString()); - if (name == "downloads_dir") + else if (name == "downloads_dir") emit downloads_dir_updated(value.toString()); + else if (name == "permissions_persistance") + emit permissions_persistance_updated(value.toString()); } signals: void user_agent_updated(const QString &value); void downloads_dir_updated(const QString &value); + void permissions_persistance_updated(const QString &value); }; diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp index 07ddb67..e9dc86f 100644 --- a/src/LuaRuntime.cpp +++ b/src/LuaRuntime.cpp @@ -35,7 +35,8 @@ void LuaRuntime::start_event_loop() { luv_set_loop(state, event_loop->get_uv_loop()); luv_set_callback(state, &luv_callback); luaopen_luv(state); - lua_setglobal(state, uv_global_name); + lua_setglobal(state, "uv"); + luaL_dostring(state, "web.uv = uv"); } void LuaRuntime::stop_event_loop() { @@ -46,13 +47,13 @@ void LuaRuntime::stop_event_loop() { // Clear the uv global lua_pushnil(state); - lua_setglobal(state, uv_global_name); + lua_setglobal(state, "uv"); lua_gc(state, LUA_GCCOLLECT, 0); } void LuaRuntime::init_web_api() { luaL_newlib(state, internals_api); - lua_setglobal(state, internals_global_name); + lua_setglobal(state, "__internals"); require_module("null-browser.api"); } diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp index 2af61f7..527501e 100644 --- a/src/LuaRuntime.hpp +++ b/src/LuaRuntime.hpp @@ -23,9 +23,6 @@ class LuaRuntime : public QObject { Q_OBJECT - const char *uv_global_name = "uv"; - const char *internals_global_name = "__internals"; - public: static LuaRuntime &instance() { static LuaRuntime runtime; diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp index 721a3e7..7270855 100644 --- a/src/WindowActionRouter.cpp +++ b/src/WindowActionRouter.cpp @@ -34,6 +34,11 @@ void WindowActionRouter::initialize(Configuration *config) { for (auto &win_match : window_map) win_match.second->mediator()->update_downloads_dir(downloads_dir); }); + connect(configuration, &Configuration::permissions_persistance_updated, this, + [this](const QString &persistance) { + for (auto &win_match : window_map) + win_match.second->mediator()->update_permissions_persistance(persistance); + }); // History connect(&runtime, &LuaRuntime::history_back_requested, this, diff --git a/src/WindowMediator.cpp b/src/WindowMediator.cpp index cb677ee..fa9a25e 100644 --- a/src/WindowMediator.cpp +++ b/src/WindowMediator.cpp @@ -23,6 +23,12 @@ void WindowMediator::update_downloads_dir(const QString &downloads_dir) { profile->setDownloadPath(downloads_dir); } +void WindowMediator::update_permissions_persistance(const QString &persistance) { + auto *profile = webview_stack->get_profile(); + auto persistance_policy = Configuration::to_permission_persistance_policy(persistance); + profile->setPersistentPermissionsPolicy(persistance_policy); +} + WindowMediator::~WindowMediator() { disconnect(this); delete webview_stack; diff --git a/src/WindowMediator.hpp b/src/WindowMediator.hpp index 0a27f2e..163ab7a 100644 --- a/src/WindowMediator.hpp +++ b/src/WindowMediator.hpp @@ -34,6 +34,7 @@ signals: public slots: void update_user_agent(const QString &user_agent); void update_downloads_dir(const QString &downloads_dir); + void update_permissions_persistance(const QString &persistance); private: WebViewStack *webview_stack; diff --git a/src/main.cpp b/src/main.cpp index dc67c8a..ee94ad3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,7 +12,7 @@ QCommandLineParser *create_cli_parser() { parser->addPositionalArgument("url", "URL(s) to open", "[url]"); parser->addOptions({ {{"e", "expr"}, "Lua expression to execute", "lua"}, - {{"c", "config-dir"}, "Config directory for null browser", "dir"}, + {{"C", "config-dir"}, "Config directory for null browser", "dir"}, }); return parser; diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp index 32ac598..54fd44a 100644 --- a/src/widgets/BrowserApp.cpp +++ b/src/widgets/BrowserApp.cpp @@ -41,8 +41,7 @@ BrowserApp::BrowserApp(Configuration &configuration) : configuration(configurati auto *event = new NotificationReceivedEvent(std::move(notification)); WindowActionRouter::instance().dispatch_event(event); }); - profile->setPersistentPermissionsPolicy( - QWebEngineProfile::PersistentPermissionsPolicy::StoreInMemory); + profile->setPersistentPermissionsPolicy(configuration.permission_persistance_policy()); } connect(&window_action_router, &WindowActionRouter::new_window_requested, this, diff --git a/src/widgets/BrowserWindow.cpp b/src/widgets/BrowserWindow.cpp index d1b9c44..8e1555f 100644 --- a/src/widgets/BrowserWindow.cpp +++ b/src/widgets/BrowserWindow.cpp @@ -22,10 +22,6 @@ BrowserWindow::BrowserWindow(const Configuration &configuration, QWebEngineProfi layout->setSpacing(0); centralWidget()->setLayout(layout); - // Webengine profile - profile->setDownloadPath(configuration.downloads_dir()); - profile->setHttpUserAgent(configuration.user_agent()); - // Stack of web views auto *webview_stack = new WebViewStack(&configuration, profile); layout->addWidget(webview_stack); |
