servoshell: Read prefs.json from bundle on OHOS (#35581)

* Allows to read the prefs.json from the hap bundle on OHOS.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

* incorporate suggestions

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

* incoroporate requested changes

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
This commit is contained in:
Narfinger 2025-03-01 11:53:35 +01:00 committed by GitHub
parent 4f8d816385
commit 5fa014d389
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 3 deletions

View file

@ -8,7 +8,7 @@ use std::ptr::NonNull;
use std::rc::Rc; use std::rc::Rc;
use dpi::PhysicalSize; use dpi::PhysicalSize;
use log::{debug, info}; use log::{debug, info, warn};
use raw_window_handle::{ use raw_window_handle::{
DisplayHandle, OhosDisplayHandle, OhosNdkWindowHandle, RawDisplayHandle, RawWindowHandle, DisplayHandle, OhosDisplayHandle, OhosNdkWindowHandle, RawDisplayHandle, RawWindowHandle,
WindowHandle, WindowHandle,
@ -40,7 +40,7 @@ pub fn init(
info!("Entered simpleservo init function"); info!("Entered simpleservo init function");
crate::init_crypto(); crate::init_crypto();
let resource_dir = PathBuf::from(&options.resource_dir).join("servo"); let resource_dir = PathBuf::from(&options.resource_dir).join("servo");
resources::set(Box::new(ResourceReaderInstance::new(resource_dir))); resources::set(Box::new(ResourceReaderInstance::new(resource_dir.clone())));
// It would be nice if `from_cmdline_args()` could accept str slices, to avoid allocations here. // It would be nice if `from_cmdline_args()` could accept str slices, to avoid allocations here.
// Then again, this code could and maybe even should be disabled in production builds. // Then again, this code could and maybe even should be disabled in production builds.
@ -53,6 +53,15 @@ pub fn init(
); );
debug!("Servo commandline args: {:?}", args); debug!("Servo commandline args: {:?}", args);
let _ = crate::prefs::DEFAULT_CONFIG_DIR
.set(resource_dir)
.inspect_err(|e| {
warn!(
"Default Prefs Dir already previously filled. Got error {}",
e.display()
);
});
let (opts, preferences, servoshell_preferences) = match parse_command_line_arguments(args) { let (opts, preferences, servoshell_preferences) = match parse_command_line_arguments(args) {
ArgumentParsingResult::ContentProcess(..) => { ArgumentParsingResult::ContentProcess(..) => {
unreachable!("OHOS does not have support for multiprocess yet.") unreachable!("OHOS does not have support for multiprocess yet.")

View file

@ -6,6 +6,8 @@ use std::collections::HashMap;
use std::fs::{read_to_string, File}; use std::fs::{read_to_string, File};
use std::io::Read; use std::io::Read;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
#[cfg(any(target_os = "android", target_env = "ohos"))]
use std::sync::OnceLock;
use std::{env, fs, process}; use std::{env, fs, process};
use euclid::Size2D; use euclid::Size2D;
@ -90,9 +92,12 @@ pub fn default_config_dir() -> Option<PathBuf> {
Some(config_dir) Some(config_dir)
} }
/// Overrides the default preference dir
#[cfg(any(target_os = "android", target_env = "ohos"))]
pub(crate) static DEFAULT_CONFIG_DIR: OnceLock<PathBuf> = OnceLock::new();
#[cfg(any(target_os = "android", target_env = "ohos"))] #[cfg(any(target_os = "android", target_env = "ohos"))]
pub fn default_config_dir() -> Option<PathBuf> { pub fn default_config_dir() -> Option<PathBuf> {
None DEFAULT_CONFIG_DIR.get().cloned()
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]