Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b707efd
bump version
shadowfax92 Oct 26, 2025
a6cee41
patch: browoseros_server path and copy
shadowfax92 Oct 26, 2025
34e6e90
patch: fix: browoser_server cmdline bug
shadowfax92 Oct 26, 2025
1dc90e6
update browseros_server binaries
shadowfax92 Oct 26, 2025
eb19495
update browseros_server binaries
shadowfax92 Oct 26, 2025
abe4da7
tmp: disable valiation of binary
shadowfax92 Oct 26, 2025
5fb7b89
fix: arch copy fixed
shadowfax92 Oct 27, 2025
7ba1cd8
fix: windows executable path
shadowfax92 Oct 27, 2025
905d907
update binaries
shadowfax92 Oct 28, 2025
7e3b7fd
bump version
shadowfax92 Oct 28, 2025
5c75e71
update codex binary
shadowfax92 Oct 28, 2025
a14dcd3
update browseros_server binaries
shadowfax92 Oct 28, 2025
5678053
browseros_server: pass resources_dir as arg
shadowfax92 Oct 29, 2025
fe7f3ef
update browseros_server binaries
shadowfax92 Oct 29, 2025
ab8665c
bump version
shadowfax92 Oct 29, 2025
6d64271
binary test
shadowfax92 Oct 29, 2025
5417335
updated binaries
shadowfax92 Oct 30, 2025
84d4505
bump version
shadowfax92 Oct 30, 2025
69476f8
update browseros_server binaries
shadowfax92 Oct 31, 2025
7b2a2ba
keep browosos extensions alive patch
shadowfax92 Nov 1, 2025
d04b2ee
bump version
shadowfax92 Nov 1, 2025
b2c32ca
fix: browseros_server windows path
shadowfax92 Nov 3, 2025
0623191
fix: codex windows binary
shadowfax92 Nov 3, 2025
374c7ae
package_windows: rebuild with setup too
shadowfax92 Nov 3, 2025
57a7ec2
revert: windows visual element fix
shadowfax92 Nov 3, 2025
bb27105
browseros execution-dir creation
shadowfax92 Nov 4, 2025
b0daac8
update binaries
shadowfax92 Nov 4, 2025
b9bafc9
bump version
shadowfax92 Nov 4, 2025
84a4a31
update browseros_server binaries
shadowfax92 Nov 4, 2025
3863dd1
package linux file
shadowfax92 Nov 4, 2025
d29da58
updates to package.linux
shadowfax92 Nov 4, 2025
311a3b5
browseros_server: file locking - only one instance running
shadowfax92 Nov 4, 2025
8022dfc
browseros_server: kill on terminate of browser
shadowfax92 Nov 4, 2025
3f9950e
bump version
shadowfax92 Nov 4, 2025
51b6bee
browseros_server terminate fixes
shadowfax92 Nov 5, 2025
cdfc9db
browseros_server: support restart through pref
shadowfax92 Nov 5, 2025
1e4d14f
update browseros_server binaries
shadowfax92 Nov 5, 2025
d17b556
browseros_server: restart pref and missing files
shadowfax92 Nov 5, 2025
7dfeebe
extension ota: force setup udpate url
shadowfax92 Nov 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions packages/browseros/build/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,16 @@ def build_main(
ctx, interactive=patch_interactive, commit_each=patch_commit
)

# Copy resources
if slack_notifications:
notify_build_step("Completed applying patches")

# Copy resources for each architecture (YAML filters by arch)
if apply_patches_flag:
copy_resources(ctx, commit_each=patch_commit)

if slack_notifications:
notify_build_step(
"Completed applying patches and copying resources"
f"Completed copying resources for {arch_name}"
)

# Build for this architecture
Expand Down
2 changes: 1 addition & 1 deletion packages/browseros/build/config/NXTSCAPE_VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
69
78
35 changes: 35 additions & 0 deletions packages/browseros/build/config/package.linux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# BrowserOS Linux Release Build Configuration
build:
type: release
architecture: x64 # Linux x64 only
# architectures: [x64] # Single architecture for Linux
universal: false # Linux doesn't support universal binaries

gn_flags:
file: build/config/gn/flags.linux.release.gn

steps:
clean: false
git_setup: false
apply_patches: false
build: false
sign: false # Linux doesn't require code signing
package: true

paths:
root_dir: .
# chromium_src: ../chromium-src

# Environment-specific settings
env:
PYTHONPATH: scripts

# Linux-specific settings
linux:
appimage:
compression: gzip # Compression type for AppImage
architecture: x86_64 # AppImage architecture designation

# Notification settings
notifications:
slack: true # Enable Slack notifications for release builds
38 changes: 27 additions & 11 deletions packages/browseros/build/modules/package_windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

def get_browseros_server_binary_paths(build_output_dir: Path) -> List[Path]:
"""Return absolute paths to BrowserOS Server binaries for signing."""
server_dir = build_output_dir / "BrowserOSServer" / "default"
server_dir = build_output_dir / "BrowserOSServer" / "default" / "resources" / "bin"
return [server_dir / binary for binary in BROWSEROS_SERVER_BINARIES]


Expand Down Expand Up @@ -69,12 +69,18 @@ def build_mini_installer(ctx: BuildContext) -> bool:
# Get paths
build_output_dir = join_paths(ctx.chromium_src, ctx.out_dir)
mini_installer_path = build_output_dir / "mini_installer.exe"
setup_exe_path = build_output_dir / "setup.exe"

if mini_installer_path.exists():
log_info("mini_installer.exe already exists")
return True
if mini_installer_path.exists() and setup_exe_path.exists():
log_info(
"mini_installer.exe and setup.exe already exist; rebuilding to ensure freshness"
)
elif setup_exe_path.exists() and not mini_installer_path.exists():
log_info("setup.exe exists but mini_installer.exe missing")
elif mini_installer_path.exists() and not setup_exe_path.exists():
log_info("mini_installer.exe exists but setup.exe missing")

log_info("Building mini_installer target...")
log_info("Building setup and mini_installer targets...")

# Build mini_installer using autoninja
try:
Expand All @@ -86,6 +92,7 @@ def build_mini_installer(ctx: BuildContext) -> bool:
autoninja_cmd,
"-C",
ctx.out_dir, # Use relative path like in compile.py
"setup",
"mini_installer",
]

Expand All @@ -101,15 +108,24 @@ def build_mini_installer(ctx: BuildContext) -> bool:
os.chdir(old_cwd)

# Verify the file was created
if mini_installer_path.exists():
log_success("mini_installer built successfully")
missing_artifacts = []
if not setup_exe_path.exists():
missing_artifacts.append("setup.exe")
if not mini_installer_path.exists():
missing_artifacts.append("mini_installer.exe")

if not missing_artifacts:
log_success("mini_installer and setup built successfully")
return True
else:
log_error("mini_installer build completed but file not found")
return False

log_error(
"Build completed but missing artifacts: "
+ ", ".join(missing_artifacts)
)
return False

except Exception as e:
log_error(f"Failed to build mini_installer: {e}")
log_error(f"Failed to build setup/mini_installer: {e}")
return False


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
index 59d6e6e4d899f..9f2737ff17c6f 100644
--- a/base/threading/thread_restrictions.h
+++ b/base/threading/thread_restrictions.h
@@ -200,6 +200,9 @@ namespace scheduler {
class NonMainThreadImpl;
}
} // namespace blink
+namespace browseros {
+class BrowserOSServerManager;
+} // namespace browseros
namespace cc {
class CategorizedWorkerPoolJob;
class CategorizedWorkerPool;
@@ -595,6 +598,7 @@ class BASE_EXPORT ScopedAllowBlocking {
friend class base::subtle::PlatformSharedMemoryRegion;
friend class base::win::ScopedAllowBlockingForUserAccountControl;
friend class blink::DiskDataAllocator;
+ friend class browseros::BrowserOSServerManager;
friend class chromecast::CrashUtil;
friend class content::BrowserProcessIOThread;
friend class content::DWriteFontProxyImpl;
@@ -743,6 +747,7 @@ class BASE_EXPORT ScopedAllowBaseSyncPrimitives {
friend class base::SimpleThread;
friend class base::internal::GetAppOutputScopedAllowBaseSyncPrimitives;
friend class blink::SourceStream;
+ friend class browseros::BrowserOSServerManager;
friend class blink::VideoTrackRecorderImplContextProvider;
friend class blink::WorkerThread;
friend class blink::scheduler::NonMainThreadImpl;
10 changes: 1 addition & 9 deletions packages/browseros/chromium_patches/chrome/BUILD.gn
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index 97f843f8133c4..b7af2f2d94579 100644
index 97f843f8133c4..0acbe29f11806 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -18,6 +18,7 @@ import("//build/config/win/manifest.gni")
Expand Down Expand Up @@ -37,11 +37,3 @@ index 97f843f8133c4..b7af2f2d94579 100644
configs += [ ":chrome_dll_symbol_order" ]
if (!is_component_build && !using_sanitizer) {
configs += [ ":chrome_dll_symbol_exports" ]
@@ -1493,6 +1500,7 @@ copy("visual_elements_resources") {
"//chrome/app/theme/$branding_path_component/win/tiles/Logo.png",
"//chrome/app/theme/$branding_path_component/win/tiles/SmallLogo.png",
"app/visual_elements_resources/chrome.VisualElementsManifest.xml",
+ "app/visual_elements_resources/browseros.VisualElementsManifest.xml",
]

if (is_chrome_branded) {

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
diff --git a/chrome/browser/browseros_server/.gitignore b/chrome/browser/browseros_server/.gitignore
new file mode 100644
index 0000000000000..cb76b31565a77
--- /dev/null
+++ b/chrome/browser/browseros_server/.gitignore
@@ -0,0 +1 @@
+resources/
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
diff --git a/chrome/browser/browseros_server/BUILD.gn b/chrome/browser/browseros_server/BUILD.gn
new file mode 100644
index 0000000000000..7165c4459db08
index 0000000000000..ddbdf0b78c0a3
--- /dev/null
+++ b/chrome/browser/browseros_server/BUILD.gn
@@ -0,0 +1,74 @@
@@ -0,0 +1,66 @@
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/chrome_build.gni")
+
+# Validate that required resources exist at build time
+# GN will fail at generation time if resources/bin/browseros_server is missing
+_browseros_binary_name = "browseros_server"
+if (is_win) {
+ _browseros_binary_name += ".exe"
+}
+
+action("validate_browseros_resources") {
+ script = "validate_resources.py"
+ inputs = [ "resources/bin/${_browseros_binary_name}" ]
+ outputs = [ "$target_gen_dir/browseros_resources_validated" ]
+}
+
+source_set("browseros_server") {
+ sources = [
+ "browseros_server_manager.cc",
Expand All @@ -28,53 +41,32 @@ index 0000000000000..7165c4459db08
+ ]
+}
+
+# Determine OS name for binary selection
+if (is_mac) {
+ _browseros_os = "darwin"
+} else if (is_win) {
+ _browseros_os = "windows"
+} else if (is_linux) {
+ _browseros_os = "linux"
+}
+
+# Construct source binary filename based on target OS and architecture
+_browseros_binary_name = "browseros-server-${_browseros_os}-${target_cpu}"
+if (is_win) {
+ _browseros_binary_name += ".exe"
+}
+
+# Source binary path (architecture-specific)
+_browseros_source_binary = "binaries/${_browseros_binary_name}"
+
+# Output filename (standardized)
+_browseros_output_name = "browseros_server"
+if (is_win) {
+ _browseros_output_name += ".exe"
+}
+
+if (is_mac) {
+ import("//build/config/apple/symbols.gni")
+ import("//build/config/mac/mac_sdk.gni")
+
+ # Bundle data for macOS - packages to Resources/BrowserOSServer/default/
+ bundle_data("browseros_server_bundle_data") {
+ sources = [ _browseros_source_binary ]
+ outputs =
+ [ "{{bundle_resources_dir}}/BrowserOSServer/default/${_browseros_output_name}" ]
+ # Bundle data for macOS - recursively packages resources/ to Resources/BrowserOSServer/default/
+ bundle_data("browseros_resources_bundle") {
+ sources = [ "resources" ]
+ outputs = [ "{{bundle_resources_dir}}/BrowserOSServer/default/{{source_file_part}}" ]
+ # TODO: Re-enable validation when resources/bin/browseros_server is available
+ # deps = [ ":validate_browseros_resources" ]
+ }
+} else {
+ # Copy for Windows/Linux - packages to <exe_dir>/BrowserOSServer/default/
+ copy("browseros_server_binary") {
+ sources = [ _browseros_source_binary ]
+ outputs = [ "$root_out_dir/BrowserOSServer/default/${_browseros_output_name}" ]
+ # Copy for Windows/Linux - recursively packages resources/ to <exe_dir>/BrowserOSServer/default/
+ copy("browseros_resources_copy") {
+ sources = [ "resources" ]
+ outputs = [ "$root_out_dir/BrowserOSServer/default/{{source_file_part}}" ]
+ # TODO: Re-enable validation when resources/bin/browseros_server is available
+ # deps = [ ":validate_browseros_resources" ]
+ }
+}
+
+# Group for all BrowserOS server resources
+group("browseros_server_resources") {
+ if (is_mac) {
+ deps = [ ":browseros_server_bundle_data" ]
+ deps = [ ":browseros_resources_bundle" ]
+ } else {
+ deps = [ ":browseros_server_binary" ]
+ deps = [ ":browseros_resources_copy" ]
+ }
+}
Loading