Initialize Rust GPUI browser shell

This commit is contained in:
2026-05-07 18:27:15 -04:00
commit d9a27f3dc4
41 changed files with 11573 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
[package]
name = "ely_servo_host"
version = "0.1.0"
edition.workspace = true
license.workspace = true
rust-version.workspace = true
[dependencies]
ely_domain = { path = "../ely_domain" }
thiserror.workspace = true
[lints]
workspace = true
+11
View File
@@ -0,0 +1,11 @@
use ely_domain::WebViewId;
use thiserror::Error;
#[derive(Clone, Debug, Error, Eq, PartialEq)]
pub enum ServoHostError {
#[error("webview not found: {id}")]
WebViewNotFound { id: WebViewId },
#[error("permission request missing profile context")]
MissingProfileContext,
}
+51
View File
@@ -0,0 +1,51 @@
use ely_domain::{ProfileId, TabId, UrlText, WebViewId};
use crate::ServoHostError;
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum WebViewState {
Created,
Attached,
Sleeping,
Crashed,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct NavigationRequest {
pub webview_id: WebViewId,
pub tab_id: TabId,
pub url: UrlText,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PermissionRequest {
pub webview_id: WebViewId,
pub tab_id: TabId,
pub profile_id: ProfileId,
pub feature: String,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum PermissionDecision {
AllowOnce,
AllowAlways,
DenyAlways,
}
pub trait ServoHost {
fn create_webview(
&mut self,
tab_id: TabId,
profile_id: ProfileId,
) -> Result<WebViewId, ServoHostError>;
fn navigate(&mut self, request: NavigationRequest) -> Result<(), ServoHostError>;
fn set_permission(
&mut self,
request: PermissionRequest,
decision: PermissionDecision,
) -> Result<(), ServoHostError>;
fn state(&self, webview_id: &WebViewId) -> Result<WebViewState, ServoHostError>;
}
+5
View File
@@ -0,0 +1,5 @@
mod error;
mod host;
pub use error::ServoHostError;
pub use host::{NavigationRequest, PermissionDecision, PermissionRequest, ServoHost, WebViewState};