Repository navigation
Secure Browser Architecture
This document describes the architectural design, components, and data flow of the Secure Browser project.
- Overview
- System Architecture
- Component Design
- Data Flow
- Design Patterns
- Technology Stack
- Module Dependencies
- Extension Points
Secure Browser follows a modular architecture with three distinct browser implementations sharing a common entry point. The system is designed to be:
- Modular: Each browser backend is independent and self-contained
- Extensible: New browser implementations can be added without modifying existing code
- Secure: Security features are built into each implementation
- Flexible: Multiple backends support different use cases and system requirements
┌─────────────────────────────────────────────────────────────┐
│ main.py │
│ (Entry Point) │
│ - Argument parsing │
│ - Browser selection │
│ - Module initialization │
└──────────────┬──────────────────────────────────────────────┘
│
├──────────────────────────────────────────────┐
│ │
▼ ▼
┌──────────────────────────┐ ┌──────────────────────────┐
│ PyQt5 Browser │ │ Tkinter Browser │
│ (hope.py) │ │ (secure_browser.py) │
│ - Tab management │ │ - Security filtering │
│ - Dark theme UI │ │ - Whitelist/blacklist │
│ - Settings panel │ │ - User-Agent control │
└──────────────────────────┘ └──────────────────────────┘
│ │
└──────────────────────────────────────────────┘
│
▼
┌──────────────────────┐
│ WebView Browser │
│ (modern_browser.py) │
│ - Native integration │
│ - Cross-platform │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ Tools │
│ - search.py │
│ - dev_tools.py │
└──────────────────────┘
The project follows a three-layer architecture:
-
Presentation Layer
- GUI components (PyQt5, Tkinter)
- User interface elements
- Event handling
-
Business Logic Layer
- Browser navigation logic
- Security enforcement
- Settings management
- History management
-
Data Layer
- Configuration storage (JSON)
- Bookmark storage
- Cache management
Responsibilities:
- Command-line argument parsing
- Browser backend selection
- Module initialization and delegation
Key Functions:
def main()
- Parse command-line arguments
- Select browser implementation
- Initialize and launch selected browserComponents:
- Purpose: Main browser window with tabbed interface
-
Key Features:
- Tab management (add, close, switch)
- Navigation controls (back, forward, reload, home)
- URL bar with HTTPS enforcement
- Settings dialog integration
- Purpose: Configuration interface
-
Settings Managed:
- VPN toggle
- JavaScript enable/disable
- Proxy configuration
Architecture Pattern: Model-View-Controller (MVC)
- Model: Browser state (history, settings)
- View: PyQt5 widgets and layouts
- Controller: Event handlers and business logic
Components:
- Purpose: Lightweight secure browser
-
Key Features:
- Navigation history management
- Security headers enforcement
- Whitelist/blacklist filtering
- User-Agent customization
- Bookmark management
- Proxy configuration
Architecture Pattern: Event-Driven
- Event handlers for user actions
- Callback-based navigation
- State management through instance variables
Components:
- Purpose: Native webview integration
-
Key Features:
- Native OS webview
- Navigation history
- Proxy support
- Cross-platform compatibility
Architecture Pattern: Wrapper Pattern
- Wraps native webview API
- Provides consistent interface
- Abstracts platform differences
- Purpose: Advanced search query builder
-
Components:
- Query input interface
- Operator selection
- Query preview
- Search execution
- Purpose: Browser developer tools
-
Components:
- Dockable widget
- WebEngineView for tools
- Integration with main browser
User Input (URL)
│
▼
URL Validation
│
▼
HTTPS Enforcement
│
▼
Security Checks (whitelist/blacklist)
│
▼
Load URL into Browser Engine
│
▼
Update UI (title, URL bar)
│
▼
Update History
User Opens Settings
│
▼
Display Current Settings
│
▼
User Modifies Settings
│
▼
Validate Settings
│
▼
Apply Settings
│
▼
Reload Current Page (if needed)
User Enters Query
│
▼
Select Operators
│
▼
Generate Query String
│
▼
Preview Query
│
▼
Execute Search (external browser)
Context: Multiple browser implementations
Implementation: Each browser backend is a strategy for rendering web content.
# Strategy interface
class BrowserBackend:
def load_url(self, url): pass
def navigate_back(self): pass
def navigate_forward(self): pass
# Concrete strategies
class PyQt5Browser(BrowserBackend): ...
class TkinterBrowser(BrowserBackend): ...
class WebViewBrowser(BrowserBackend): ...Context: Browser instantiation
Implementation: main.py acts as a factory, selecting and creating the appropriate browser instance.
def create_browser(browser_type):
if browser_type == "pyqt5":
return PyQt5Browser()
elif browser_type == "tkinter":
return TkinterBrowser()
# ...Context: URL and title changes
Implementation: PyQt5 browser uses signals/slots to observe changes.
browser_tab.urlChanged.connect(self.update_tab_url)
browser_tab.titleChanged.connect(self.update_tab_title)Context: Common browser operations
Implementation: Each browser implements common operations (load_url, go_back, go_forward) with backend-specific implementations.
Context: Security features
Implementation: Security features (HTTPS enforcement, filtering) decorate the basic URL loading functionality.
| Component | Technology | Purpose |
|---|---|---|
| GUI Framework | PyQt5 | Modern browser interface |
| GUI Framework | Tkinter | Lightweight browser interface |
| Web Rendering | PyQtWebEngine | Chromium-based rendering |
| Web Rendering | tkinterweb | HTML rendering for Tkinter |
| Web Rendering | pywebview | Native OS webview |
| Language | Python 3.7+ | Core implementation |
- webbrowser: Default browser integration for search tool
- os: Environment variable management for proxies
- json: Configuration file parsing
- sys: System-level operations
main.py
├── src.browsers
│ ├── hope.py
│ │ └── PyQt5, PyQtWebEngine
│ ├── secure_browser.py
│ │ └── tkinterweb
│ └── modern_browser.py
│ └── pywebview
└── src.tools
├── search.py
│ └── PyQt5, webbrowser
└── dev_tools_integration.py
└── PyQt5, PyQtWebEngine
src/
├── __init__.py
│ └── Exports: Browser, SecureBrowser, ModernBrowser
├── browsers/
│ ├── __init__.py
│ │ └── Exports: Browser, SecureBrowser, ModernBrowser
│ ├── hope.py
│ ├── secure_browser.py
│ └── modern_browser.py
└── tools/
├── __init__.py
│ └── Exports: SearchOperatorsTool
├── search.py
└── dev_tools_integration.py
To add a new browser backend:
- Create new file in
src/browsers/ - Implement browser class with required methods:
-
__init__(): Initialize browser -
load_url(url): Load a URL - Navigation methods (back, forward, reload, home)
-
- Export class in
src/browsers/__init__.py - Add option in
main.pyargument parser - Add initialization logic in
main.py
To add a new tool:
- Create new file in
src/tools/ - Implement tool class/functionality
- Export in
src/tools/__init__.py - Add command-line option in
main.py - Add initialization logic in
main.py
To add new security features:
- Implement feature in relevant browser class
- Add UI controls in settings panel
- Implement validation logic
- Apply feature during URL loading
- Document feature in security documentation
To customize UI themes:
-
PyQt5 Browser: Modify
setStyleSheet()inhope.py - Tkinter Browser: Use Tkinter styling options
- WebView Browser: WebView inherits OS theme
| Browser | Memory Usage | CPU Usage | Startup Time |
|---|---|---|---|
| PyQt5 | High | Medium | Medium |
| Tkinter | Low | Low | Fast |
| WebView | Medium | Medium | Fast |
- Tab Management: PyQt5 browser limits active tabs
- History Management: Truncates forward history on navigation
- Caching: Leverages browser engine caching
- Lazy Loading: WebView browser initializes on demand
-
Network Layer
- HTTPS enforcement
- Proxy support
- Certificate validation
-
Application Layer
- JavaScript control
- Content filtering
- Security headers
-
Data Layer
- Local storage isolation
- Configuration encryption (future)
- Secure bookmark storage
The project addresses:
- Man-in-the-middle attacks: HTTPS enforcement
- Cross-site scripting: JavaScript control, CSP headers
- Tracking: User-Agent customization
- Malicious sites: Whitelist/blacklist filtering
- Data leakage: Local storage isolation
- Plugin System: Dynamic loading of browser extensions
- Profile Management: Multiple user profiles with isolated settings
- Sync Backend: Cloud synchronization of settings and bookmarks
- Extension API: Standardized interface for browser extensions
- Sandboxing: Process isolation for enhanced security
- Abstract Base Classes: Define common browser interface
- Dependency Injection: Reduce coupling between components
- Configuration Management: Centralized configuration system
- Event Bus: Decoupled event handling
- State Management: Centralized state management