1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-29 22:53:44 +00:00

address remaining review comments

This commit is contained in:
John Harrington
2025-12-15 14:58:17 -07:00
parent be7f066d6f
commit 3899314734
2 changed files with 34 additions and 13 deletions

View File

@@ -1,9 +1,8 @@
/// Sandbox specific (for Mac App Store Builds)
use anyhow::{anyhow, Result};
use serde::{Deserialize, Serialize};
// Bundle IDs of supported Chromium browsers - used to determine if browser is installed
// Bundle IDs of supported Chromium browsers - used to determine if browser is installed
const BROWSER_BUNDLE_IDS: &[(&str, &str)] = &[
("Chrome", "com.google.Chrome"),
("Chromium", "org.chromium.Chromium"),
@@ -15,12 +14,16 @@ const BROWSER_BUNDLE_IDS: &[(&str, &str)] = &[
];
#[derive(Debug, Deserialize)]
#[serde(tag = "type")]
#[serde(rename_all = "camelCase")]
struct CheckBrowserInstalledResponse {
is_installed: bool,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", tag = "type")]
enum CommandResult<T> {
// rename = "camelCase" was a review suggestion with breaking changes
#[serde(rename = "success")]
Success { value: T },
#[serde(rename = "error")]
Error { error: String },
}
@@ -202,9 +205,3 @@ async fn is_browser_installed(browser_name: &str) -> Result<bool> {
CommandResult::Error { error } => Err(anyhow!("{}", error)),
}
}
#[derive(Debug, Deserialize)]
struct CheckBrowserInstalledResponse {
#[serde(rename = "isInstalled")]
is_installed: bool,
}

View File

@@ -51,9 +51,34 @@
return nil;
}
// Compare the selected path against the expected browser directory
NSString *expectedPath = browserPath.path;
NSString *selectedPath = selectedURL.path;
if (![selectedPath isEqualToString:expectedPath]) {
return nil;
}
// Validate the selected directory contains a Local State file
NSURL *localStatePath = [selectedURL URLByAppendingPathComponent:@"Local State"];
if (![[NSFileManager defaultManager] fileExistsAtPath:localStatePath.path]) {
// Invalid directory selected caller will handle
return nil;
}
// Validate Local State contains expected Chromium structure
NSData *localStateData = [NSData dataWithContentsOfURL:localStatePath];
if (!localStateData) {
return nil;
}
NSError *jsonError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:localStateData options:0 error:&jsonError];
if (!jsonObject || ![jsonObject isKindOfClass:[NSDictionary class]]) {
return nil;
}
NSDictionary *localState = (NSDictionary *)jsonObject;
// Verify essential Chromium/Chrome keys exist to confirm this is actually a browser data directory
if (!localState[@"profile"] && !localState[@"browser"]) {
return nil;
}
@@ -145,7 +170,6 @@
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *key = [self bookmarkKeyFor:browserName];
[defaults setObject:data forKey:key];
[defaults synchronize];
}
- (NSData *)loadBookmarkForBrowser:(NSString *)browserName {