def __init__(self): WebView.__init__(self) self.history = HistoryListener() self.progress = ProgressListener() self.userscript = ScriptListener() cls = components.classes["@mozilla.org/typeaheadfind;1"] self.typeahead = cls.createInstance(interfaces.nsITypeAheadFind) self._jobject = None io_service_class = components.classes[ \ "@mozilla.org/network/io-service;1"] io_service = io_service_class.getService(interfaces.nsIIOService) # Use xpcom to turn off "offline mode" detection, which disables # access to localhost for no good reason. (Trac #6250.) io_service2 = io_service_class.getService(interfaces.nsIIOService2) io_service2.manageOfflineStatus = False cls = components.classes['@mozilla.org/content/style-sheet-service;1'] self.style_sheet_service = cls.getService( interfaces.nsIStyleSheetService) if os.path.exists(Browser.AGENT_SHEET): agent_sheet_uri = io_service.newURI('file:///' + Browser.AGENT_SHEET, None, None) self.style_sheet_service.loadAndRegisterSheet(agent_sheet_uri, interfaces.nsIStyleSheetService.AGENT_SHEET) if os.path.exists(Browser.USER_SHEET): self.user_sheet_uri = io_service.newURI('file:///' + Browser.USER_SHEET, None, None) self.style_sheet_service.loadAndRegisterSheet(self.user_sheet_uri, interfaces.nsIStyleSheetService.USER_SHEET)
class Browser(WebView): AGENT_SHEET = os.path.join(activity.get_bundle_path(), 'agent-stylesheet.css') USER_SHEET = os.path.join(activity.get_activity_root(), 'data/style.user.css') def __init__(self): WebView.__init__(self) self.history = HistoryListener() self.progress = ProgressListener() self.userscript = ScriptListener() cls = components.classes["@mozilla.org/typeaheadfind;1"] self.typeahead = cls.createInstance(interfaces.nsITypeAheadFind) self._jobject = None io_service_class = components.classes[ \ "@mozilla.org/network/io-service;1"] io_service = io_service_class.getService(interfaces.nsIIOService) # Use xpcom to turn off "offline mode" detection, which disables # access to localhost for no good reason. (Trac #6250.) io_service2 = io_service_class.getService(interfaces.nsIIOService2) io_service2.manageOfflineStatus = False cls = components.classes['@mozilla.org/content/style-sheet-service;1'] self.style_sheet_service = cls.getService( interfaces.nsIStyleSheetService) if os.path.exists(Browser.AGENT_SHEET): agent_sheet_uri = io_service.newURI('file:///' + Browser.AGENT_SHEET, None, None) self.style_sheet_service.loadAndRegisterSheet(agent_sheet_uri, interfaces.nsIStyleSheetService.AGENT_SHEET) if os.path.exists(Browser.USER_SHEET): self.user_sheet_uri = io_service.newURI('file:///' + Browser.USER_SHEET, None, None) self.style_sheet_service.loadAndRegisterSheet(self.user_sheet_uri, interfaces.nsIStyleSheetService.USER_SHEET) def do_setup(self): WebView.do_setup(self) listener = xpcom.server.WrapObject(ContentInvoker(self), interfaces.nsIDOMEventListener) self.window_root.addEventListener('click', listener, False) listener = xpcom.server.WrapObject(CommandListener(self.dom_window), interfaces.nsIDOMEventListener) self.window_root.addEventListener('command', listener, False) self.progress.setup(self) self.history.setup(self.web_navigation) self.userscript.setup(self) self.typeahead.init(self.doc_shell) def get_session(self): return sessionstore.get_session(self) def set_session(self, data): return sessionstore.set_session(self, data) def update_userstyle(self): if self.style_sheet_service.sheetRegistered(self.user_sheet_uri, interfaces.nsIStyleSheetService.USER_SHEET): self.style_sheet_service.unregisterSheet(self.user_sheet_uri, interfaces.nsIStyleSheetService.USER_SHEET) self.style_sheet_service.loadAndRegisterSheet(self.user_sheet_uri, interfaces.nsIStyleSheetService.USER_SHEET) def get_source(self, async_cb, async_err_cb): cls = components.classes[ \ '@mozilla.org/embedding/browser/nsWebBrowserPersist;1'] persist = cls.createInstance(interfaces.nsIWebBrowserPersist) # get the source from the cache persist.persistFlags = \ interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_FROM_CACHE temp_path = os.path.join(activity.get_activity_root(), 'instance') file_path = os.path.join(temp_path, '%i' % time.time()) cls = components.classes["@mozilla.org/file/local;1"] local_file = cls.createInstance(interfaces.nsILocalFile) local_file.initWithPath(file_path) progresslistener = GetSourceListener(file_path, async_cb, async_err_cb) persist.progressListener = xpcom.server.WrapObject( progresslistener, interfaces.nsIWebProgressListener) uri = self.web_navigation.currentURI persist.saveURI(uri, self.doc_shell, None, None, None, local_file) def zoom_in(self): contentViewer = self.doc_shell.queryInterface( \ interfaces.nsIDocShell).contentViewer if contentViewer is not None: markupDocumentViewer = contentViewer.queryInterface( \ interfaces.nsIMarkupDocumentViewer) markupDocumentViewer.fullZoom += _ZOOM_AMOUNT def zoom_out(self): contentViewer = self.doc_shell.queryInterface( \ interfaces.nsIDocShell).contentViewer if contentViewer is not None: markupDocumentViewer = contentViewer.queryInterface( \ interfaces.nsIMarkupDocumentViewer) markupDocumentViewer.fullZoom -= _ZOOM_AMOUNT