def get_context(self, key): if (key in self.contexts): return self.contexts[key] context_data_path = os.path.join(self.application_service.data_path, "WebKit", key) data_manager = WebKit2.WebsiteDataManager( base_cache_directory=os.path.join(context_data_path, "cache"), base_data_directory=os.path.join(context_data_path, "data"), disk_cache_directory=os.path.join(context_data_path, "disk"), indexeddb_directory=os.path.join(context_data_path, "indexed_db"), local_storage_directory=os.path.join(context_data_path, "local_storage"), offline_application_cache_directory=os.path.join( context_data_path, "application_cache"), websql_directory=os.path.join(context_data_path, "websql"), is_ephemeral=False) context = WebKit2.WebContext.new_with_website_data_manager( data_manager) cookie_manager = context.get_cookie_manager() cookie_manager.set_accept_policy(WebKit2.CookieAcceptPolicy.ALWAYS) cookie_manager.set_persistent_storage( os.path.join(context_data_path, "cookies.db"), WebKit2.CookiePersistentStorage.SQLITE) self.contexts[key] = context return context
def _website_data_manager(self): from os import path as P print("Creating WebsiteDataManager...") app_id = self.application.get_application_id() cache_dir = P.join(GLib.get_user_cache_dir(), "revolt", app_id) data_dir = P.join(GLib.get_user_data_dir(), "revolt", app_id) return WebKit2.WebsiteDataManager(base_cache_directory=cache_dir, base_data_directory=data_dir)
def init(self): """ Init main application """ self.__is_fs = False if Gtk.get_minor_version() > 18: cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application.css') else: cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application-legacy.css') cssProvider = Gtk.CssProvider() cssProvider.load_from_file(cssProviderFile) screen = Gdk.Screen.get_default() styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.settings = Settings.new() self.history = DatabaseHistory() self.bookmarks = DatabaseBookmarks() # We store cursors for main thread SqlCursor.add(self.history) SqlCursor.add(self.bookmarks) self.bookmarks.import_firefox() adblock = DatabaseAdblock() adblock.update() self.art = Art() self.search = Search() self.downloads_manager = DownloadsManager() shortcut_action = Gio.SimpleAction.new('shortcut', GLib.VariantType.new('s')) shortcut_action.connect('activate', self.__on_shortcut_action) self.add_action(shortcut_action) self.set_accels_for_action("app.shortcut::uri", ["<Control>l"]) self.set_accels_for_action("app.shortcut::new_page", ["<Control>t"]) self.set_accels_for_action("app.shortcut::close_page", ["<Control>w"]) # Set some WebKit defaults context = WebKit2.WebContext.get_default() GLib.setenv('PYTHONPATH', self.__extension_dir, True) context.set_web_extensions_directory(self.__extension_dir) data_manager = WebKit2.WebsiteDataManager() context.new_with_website_data_manager(data_manager) context.set_process_model( WebKit2.ProcessModel.MULTIPLE_SECONDARY_PROCESSES) context.set_cache_model(WebKit2.CacheModel.WEB_BROWSER) d = Gio.File.new_for_path(self.__FAVICONS_PATH) if not d.query_exists(): d.make_directory_with_parents() context.set_favicon_database_directory(self.__FAVICONS_PATH) cookie_manager = context.get_cookie_manager() cookie_manager.set_accept_policy( WebKit2.CookieAcceptPolicy.NO_THIRD_PARTY) cookie_manager.set_persistent_storage( self.__COOKIES_PATH, WebKit2.CookiePersistentStorage.SQLITE)
def new(window): """ New webview @param window as Window """ data_manager = WebKit2.WebsiteDataManager() context = WebKit2.WebContext.new_with_website_data_manager( data_manager) Context(context) view = WebKit2.WebView.new_with_context(context) view.__class__ = WebViewMeta view.__init(None, window) return view
def __init__(self, uri, icon=None, window_size='800x600', resizable=True, fullscreen=False, frameless=False, maximized=False, stylesheet_content="", script_content="", debug=False, external_links=False, parent=None): super(WebWindow, self).__init__(parent=parent) self.is_fullscreen = False self.initial_uri = uri self.script_content = script_content self.external_links = external_links self.set_border_width(0) width, height = list(map(int, window_size.split('x'))) self.set_default_size(width, height) self.set_resizable(resizable) if not resizable: self.set_size_request(width, height) if maximized: self.maximize() self.set_position(Gtk.WindowPosition.CENTER) if frameless: self.set_decorated(False) if icon: self.set_icon_from_file(icon) self.connect('delete-event', Gtk.main_quit) self.connect('key-press-event', self.on_key_press) self.connect('window-state-event', self.on_window_state_change) scrolled_window = Gtk.ScrolledWindow() self.add(scrolled_window) wdm = WebKit2.WebsiteDataManager( # local_storage_directory="ls" ) self.context = WebKit2.WebContext.new_with_website_data_manager(wdm) # self.context.set_additional_plugins_directory('plugins') if "http_proxy" in os.environ: proxy = WebKit2.NetworkProxySettings.new(os.environ["http_proxy"]) self.context.set_network_proxy_settings( WebKit2.NetworkProxyMode.CUSTOM, proxy) # WebKit2.CookieManager.set_persistent_storage( # self.context.get_cookie_manager(), # 'cookies', # WebKit2.CookiePersistentStorage(0), # ) self.webview = WebKit2.WebView.new_with_context(self.context) settings = self.webview.get_settings() settings.set_enable_plugins(False) settings.set_enable_webaudio(True) settings.set_enable_webgl(True) settings.set_enable_media_capabilities(True) settings.set_enable_media_stream(True) settings.set_enable_mediasource(True) settings.set_enable_accelerated_2d_canvas(True) settings.set_allow_file_access_from_file_urls(True) settings.set_enable_write_console_messages_to_stdout(True) settings.set_hardware_acceleration_policy( WebKit2.HardwareAccelerationPolicy.ALWAYS) if stylesheet_content: stylesheet = WebKit2.UserStyleSheet.new( stylesheet_content, WebKit2.UserContentInjectedFrames.TOP_FRAME, WebKit2.UserStyleLevel.USER, None, None) self.webview.get_user_content_manager().add_style_sheet(stylesheet) self.webview.connect("load-changed", self.on_navigation) self.webview.connect("notify::title", self.on_title_change) self.webview.connect("close", lambda ev: self.close()) self.webview.connect("decide-policy", self.on_decide_policy) scrolled_window.add(self.webview) # self.context.get_plugins(None, self.on_get_plugins) if debug: self.webview.get_settings().props.enable_developer_extras = True else: # self.webview.connect('context-menu', lambda a, b, c, d: True) # Disable context menu pass self.webview.load_uri(self.initial_uri) self.show_all() if fullscreen: self.fullscreen()
def init(self): """ Init main application """ self.__is_fs = False self.__setup_app_menu() self.set_app_menu(self.__menu) cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application.css') cssProvider = Gtk.CssProvider() cssProvider.load_from_file(cssProviderFile) screen = Gdk.Screen.get_default() styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.settings = Settings.new() self.history = DatabaseHistory() self.bookmarks = DatabaseBookmarks() # We store cursors for main thread SqlCursor.add(self.history) SqlCursor.add(self.bookmarks) try: from eolie.mozilla_sync import SyncWorker self.sync_worker = SyncWorker() self.sync_worker.sync() GLib.timeout_add_seconds(3600, self.sync_worker.sync) except Exception as e: print("Application::init():", e) self.sync_worker = None self.adblock = DatabaseAdblock() self.adblock.update() self.art = Art() self.search = Search() self.download_manager = DownloadManager() shortcut_action = Gio.SimpleAction.new('shortcut', GLib.VariantType.new('s')) shortcut_action.connect('activate', self.__on_shortcut_action) self.add_action(shortcut_action) self.set_accels_for_action("win.shortcut::uri", ["<Control>l"]) self.set_accels_for_action("win.shortcut::new_page", ["<Control>t"]) self.set_accels_for_action("app.shortcut::new_window", ["<Control>n"]) self.set_accels_for_action("win.shortcut::private", ["<Control><Shift>p"]) self.set_accels_for_action("win.shortcut::close_page", ["<Control>w"]) self.set_accels_for_action("win.shortcut::save", ["<Control>s"]) self.set_accels_for_action("win.shortcut::filter", ["<Control>i"]) self.set_accels_for_action("win.shortcut::reload", ["<Control>r"]) self.set_accels_for_action("win.shortcut::find", ["<Control>f"]) self.set_accels_for_action("win.shortcut::print", ["<Control>p"]) self.set_accels_for_action("win.shortcut::settings", ["<Control>e"]) self.set_accels_for_action("win.shortcut::backward", ["<Alt>Left"]) self.set_accels_for_action("win.shortcut::forward", ["<Alt>Right"]) self.set_accels_for_action("win.shortcut::next", ["<Control>Tab"]) self.set_accels_for_action("win.shortcut::previous", ["<Control><Shift>Tab"]) # Set some WebKit defaults context = WebKit2.WebContext.get_default() GLib.setenv('PYTHONPATH', self.__extension_dir, True) context.set_web_extensions_directory(self.__extension_dir) data_manager = WebKit2.WebsiteDataManager() context.new_with_website_data_manager(data_manager) context.set_process_model( WebKit2.ProcessModel.MULTIPLE_SECONDARY_PROCESSES) context.set_cache_model(WebKit2.CacheModel.WEB_BROWSER) d = Gio.File.new_for_path(self.__FAVICONS_PATH) if not d.query_exists(): d.make_directory_with_parents() context.set_favicon_database_directory(self.__FAVICONS_PATH) cookie_manager = context.get_cookie_manager() cookie_manager.set_accept_policy( self.settings.get_enum("cookie-storage")) cookie_manager.set_persistent_storage( self.__COOKIES_PATH, WebKit2.CookiePersistentStorage.SQLITE) helper = DBusHelper() helper.connect(self.__on_extension_signal, None)
def __init(self): """ Init main application """ # First init sync worker try: from eolie.mozilla_sync import SyncWorker self.sync_worker = SyncWorker() self.sync_worker.sync() GLib.timeout_add_seconds(3600, self.sync_worker.sync) except Exception as e: print("Application::init():", e) self.sync_worker = None if self.prefers_app_menu(): menu = self.get_app_menu() self.set_app_menu(menu) cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application.css') cssProvider = Gtk.CssProvider() cssProvider.load_from_file(cssProviderFile) screen = Gdk.Screen.get_default() styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.settings = Settings.new() self.history = DatabaseHistory() self.bookmarks = DatabaseBookmarks() # We store cursors for main thread SqlCursor.add(self.history) SqlCursor.add(self.bookmarks) self.adblock = DatabaseAdblock() self.adblock.update() self.phishing = DatabasePhishing() self.adblock_exceptions = DatabaseExceptions("adblock") self.popup_exceptions = DatabaseExceptions("popup") self.image_exceptions = DatabaseExceptions("image") self.phishing.update() self.art = Art() self.search = Search() self.download_manager = DownloadManager() self.pages_menu = PagesMenu(self) # Db upgrade db_version = self.settings.get_value("db-version").get_int32() upgrade = DatabaseUpgrade(db_version) db_version = upgrade.do_db_upgrade() self.settings.set_value("db-version", GLib.Variant("i", db_version)) shortcut_action = Gio.SimpleAction.new('shortcut', GLib.VariantType.new('s')) shortcut_action.connect('activate', self.__on_shortcut_action) self.add_action(shortcut_action) self.set_accels_for_action("win.exceptions::site", ["<Control>e"]) self.set_accels_for_action("win.shortcut::uri", ["<Control>l"]) self.set_accels_for_action("win.shortcut::new_page", ["<Control>t"]) self.set_accels_for_action("win.shortcut::last_page", ["<Control><Shift>t"]) self.set_accels_for_action("app.shortcut::new_window", ["<Control>n"]) self.set_accels_for_action("win.shortcut::private", ["<Control><Shift>p"]) self.set_accels_for_action("win.shortcut::close_page", ["<Control>w"]) self.set_accels_for_action("win.shortcut::quit", ["<Control>q"]) self.set_accels_for_action("win.shortcut::save", ["<Control>s"]) self.set_accels_for_action("win.shortcut::filter", ["<Control>i"]) self.set_accels_for_action("win.shortcut::reload", ["<Control>r"]) self.set_accels_for_action("win.shortcut::find", ["<Control>f"]) self.set_accels_for_action("win.shortcut::print", ["<Control>p"]) self.set_accels_for_action("win.shortcut::source", ["<Control><Shift>c"]) self.set_accels_for_action("win.shortcut::fullscreen", ["F11"]) self.set_accels_for_action("app.settings", ["<Control><Shift>s"]) self.set_accels_for_action("win.shortcut::backward", ["<Alt>Left", "XF86Back"]) self.set_accels_for_action("win.shortcut::forward", ["<Alt>Right", "XF86Forward"]) self.set_accels_for_action("win.shortcut::next", ["<Control>Tab"]) self.set_accels_for_action("win.shortcut::previous", ["<Control><Shift>Tab"]) self.set_accels_for_action("win.shortcut::zoom_in", ["<Control>KP_Add", "<Control>plus"]) self.set_accels_for_action("win.shortcut::zoom_out", ["<Control>KP_Subtract", "<Control>minus"]) self.set_accels_for_action("win.panel_mode(0)", ["<Control><Alt>0", "<Control><Alt>KP_0"]) self.set_accels_for_action("win.panel_mode(1)", ["<Control><Alt>1", "<Control><Alt>KP_1"]) self.set_accels_for_action("win.panel_mode(2)", ["<Control><Alt>2", "<Control><Alt>KP_2"]) # Set some WebKit defaults context = WebKit2.WebContext.get_default() Context(context) GLib.setenv('PYTHONPATH', self.__extension_dir, True) context.set_web_extensions_directory(self.__extension_dir) data_manager = WebKit2.WebsiteDataManager() context.new_with_website_data_manager(data_manager) context.set_process_model( WebKit2.ProcessModel.MULTIPLE_SECONDARY_PROCESSES) context.set_cache_model(WebKit2.CacheModel.WEB_BROWSER) d = Gio.File.new_for_path(self.__FAVICONS_PATH) if not d.query_exists(): d.make_directory_with_parents() context.set_favicon_database_directory(self.__FAVICONS_PATH) cookie_manager = context.get_cookie_manager() cookie_manager.set_accept_policy( self.settings.get_enum("cookie-storage")) cookie_manager.set_persistent_storage( self.__COOKIES_PATH, WebKit2.CookiePersistentStorage.SQLITE) helper = DBusHelper() helper.connect("UnsecureFormFocused", self.__on_extension_signal)