Skip to content

Revert "Settings > Browser > Extensions: import, add-unpacked, and live enable/disable for web extensions" - #8306

Merged
austinywang merged 1 commit into
mainfrom
revert-7699-browser-extension-management
Jul 17, 2026
Merged

austinywang merged 1 commit into
mainfrom
revert-7699-browser-extension-management

Conversation

@austinywang

@austinywang austinywang commented Jul 17, 2026 •

Copy link
Copy Markdown
Contributor

Reverts #7699


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Reverts the Browser Extensions feature and all WebKit web‑extension hosting. Removes the browser.webExtensions setting, related UI, discovery/hosting code, and dependent APIs to restore the previous browser behavior.

  • Refactors

    • Removed extension settings and UI: browser.webExtensions, BrowserWebExtensionsCard, discovery/import flows, and all related localizations.
    • Deleted web‑extension runtime: BrowserWebExtensionSupport and all popout/permission/toolbar/tab adapter types.
    • Simplified browser code paths: moved external navigation helpers into BrowserPanel; removed extension navigation/context switching.
    • Removed seams from AppDelegate, DockSplitStore, TabManager, and Workspace for extension ownership, routing, and focus.
    • JSONConfigStore: removed update(_:); simplified JSONConfigStoreReadError.
    • JSONValueModel: removed first‑value/write tracking state; kept a simpler observe/set/reset flow.
    • BrowserPrewarmedWebViewPool and upgrade prewarmers: dropped browserWebExtensionHost parameters; updated call sites.
    • Pruned tests and strings tied to extensions; updated navigation and popup tests accordingly.
  • Migration

    • The browser.webExtensions key is no longer read; previously configured extensions will not load.
    • Remove uses of SettingsHostActions.discoverBrowserWebExtensions(), .browserWebExtensionsSupported(), and .browserWebExtensionLoadErrorUpdates().
    • Replace JSONConfigStore.update(_:) calls with explicit read/modify/set within the store actor.
    • Drop browserWebExtensionHost parameters and references; use BrowserPrewarmedWebViewPool.prewarm(url:profileID:) and claim(url:profileID:websiteDataStore:).

Written for commit 6a05257. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Changes
    • Removed built-in browser Web Extension discovery, loading, permissions, toolbar actions, popouts, and related settings.
    • Simplified browser navigation and external-link handling, including support for HTTP(S) fallbacks from intent links.
    • Improved browser popup data-store handling and streamlined web view lifecycle behavior.
    • Terminal configuration input now waits for surfaces to become ready before being delivered.
    • Simplified settings updates and removed obsolete browser extension configuration options.

@cursor

cursor Bot commented Jul 17, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@greptile-apps

greptile-apps Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Too many files changed for review. (118 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@austinywang
austinywang merged commit d4a71c7 into main Jul 17, 2026
4 of 5 checks passed
@coderabbitai

coderabbitai Bot commented Jul 17, 2026 •

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 945de53b-4abf-4170-a66e-d93b8d96a43e

📥 Commits

Reviewing files that changed from the base of the PR and between 673ee6f and 6a05257.

📒 Files selected for processing (118)
  • Packages/Shared/CmuxAuthRuntime/Sources/CmuxAuthRuntime/Coordinator/AuthCoordinator.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/BrowserCatalogSection.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStore.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Stores/JSONConfigStoreReadError.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/BrowserWebExtensionEntry.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/BrowserWebExtensionKind.swift
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Values/URL+BrowserWebExtensionPath.swift
  • Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/BrowserWebExtensionPathTests.swift
  • Packages/macOS/CmuxSettings/Tests/CmuxSettingsTests/JSONConfigStoreTests.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Bindings/JSONValueModel.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsDiscoveredBrowserExtension.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Scene/SettingsWindowScene.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BrowserSection.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BrowserWebExtensionsCard.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BrowserWebExtensionsCardState.swift
  • Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/BrowserWebExtensionsCardStateTests.swift
  • Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/JSONValueModelLifecycleTests.swift
  • Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift
  • Resources/Localizable.xcstrings
  • Sources/App/AuxiliaryWindowCloseShortcut.swift
  • Sources/AppDelegate+BrowserWebExtensionShortcutRouting.swift
  • Sources/AppDelegate+BrowserWebExtensionStartupReconciliation.swift
  • Sources/AppDelegate+RecoverableMainWindowRoutes.swift
  • Sources/AppDelegate+ShortcutRoutingWindow.swift
  • Sources/AppDelegate+WindowDock.swift
  • Sources/AppDelegate.swift
  • Sources/CmuxNotificationNames.swift
  • Sources/DockSplitStore+BrowserWebExtensionOwnership.swift
  • Sources/DockSplitStore+CloseConfirmation.swift
  • Sources/DockSplitStore+PaneFocus.swift
  • Sources/DockSplitStore.swift
  • Sources/HostSettingsActions.swift
  • Sources/Panels/BrowserDevToolsIconColorOption.swift
  • Sources/Panels/BrowserDevToolsIconOption.swift
  • Sources/Panels/BrowserExternalNavigationAction.swift
  • Sources/Panels/BrowserExternalNavigationHandlingResult.swift
  • Sources/Panels/BrowserExternalNavigationPolicy.swift
  • Sources/Panels/BrowserNavigationDelegate.swift
  • Sources/Panels/BrowserNavigationPopupPolicy.swift
  • Sources/Panels/BrowserPanel+AutomationRecovery.swift
  • Sources/Panels/BrowserPanel+MediaPlayback.swift
  • Sources/Panels/BrowserPanel+PrewarmedWebViewAdoption.swift
  • Sources/Panels/BrowserPanel.swift
  • Sources/Panels/BrowserPanelDeveloperToolsLifecycle.swift
  • Sources/Panels/BrowserPanelView.swift
  • Sources/Panels/BrowserPopupWindowController.swift
  • Sources/Panels/BrowserPrewarmedWebViewPool.swift
  • Sources/Panels/BrowserWebExtensionActionButton.swift
  • Sources/Panels/BrowserWebExtensionActionSnapshot.swift
  • Sources/Panels/BrowserWebExtensionActionSnapshotInvalidation.swift
  • Sources/Panels/BrowserWebExtensionAnchorViewHolder.swift
  • Sources/Panels/BrowserWebExtensionAnchorViewReader.swift
  • Sources/Panels/BrowserWebExtensionCandidate.swift
  • Sources/Panels/BrowserWebExtensionCandidateKind.swift
  • Sources/Panels/BrowserWebExtensionDiscoveryService.swift
  • Sources/Panels/BrowserWebExtensionHosting.swift
  • Sources/Panels/BrowserWebExtensionLoadedRecord.swift
  • Sources/Panels/BrowserWebExtensionNavigationConfiguration.swift
  • Sources/Panels/BrowserWebExtensionPermissionState.swift
  • Sources/Panels/BrowserWebExtensionPermissionStateRemoval.swift
  • Sources/Panels/BrowserWebExtensionPermissionStateStore.swift
  • Sources/Panels/BrowserWebExtensionPopoutTab.swift
  • Sources/Panels/BrowserWebExtensionPopoutUIDelegate.swift
  • Sources/Panels/BrowserWebExtensionPopoutWindowController.swift
  • Sources/Panels/BrowserWebExtensionReconciliationLoadedEntry.swift
  • Sources/Panels/BrowserWebExtensionReconciliationPlan.swift
  • Sources/Panels/BrowserWebExtensionReconciliationPlanner.swift
  • Sources/Panels/BrowserWebExtensionReconciliationUnloadEntry.swift
  • Sources/Panels/BrowserWebExtensionSupport+Loading.swift
  • Sources/Panels/BrowserWebExtensionSupport+Permissions.swift
  • Sources/Panels/BrowserWebExtensionSupport+TabCreation.swift
  • Sources/Panels/BrowserWebExtensionSupport+WKWebExtensionControllerDelegate.swift
  • Sources/Panels/BrowserWebExtensionSupport+Windows.swift
  • Sources/Panels/BrowserWebExtensionSupport.swift
  • Sources/Panels/BrowserWebExtensionTabAdapter.swift
  • Sources/Panels/BrowserWebExtensionTabMetadataSnapshot.swift
  • Sources/Panels/BrowserWebExtensionToolbarButtons.swift
  • Sources/Panels/BrowserWebExtensionWindowAdapter.swift
  • Sources/Panels/CmuxWebView.swift
  • Sources/Panels/CmuxWebViewFocusModeKeyEquivalent.swift
  • Sources/Panels/ReactGrab.swift
  • Sources/PricingPlansScreen.swift
  • Sources/TabManager+BrowserWebExtensionOwnership.swift
  • Sources/TabManager+DetachedWorkspace.swift
  • Sources/TabManager.swift
  • Sources/TerminalController+ControlSurfaceContext.swift
  • Sources/Workspace+DockBrowserLookup.swift
  • Sources/Workspace+PendingTerminalInput.swift
  • Sources/Workspace.swift
  • Sources/WorkspacePendingTerminalInputObserver.swift
  • Sources/cmuxApp.swift
  • cmux.xcodeproj/project.pbxproj
  • cmuxTests/AppDelegateMainWindowTestingSupport.swift
  • cmuxTests/BrowserConfigTests.swift
  • cmuxTests/BrowserDeveloperToolsLifecycleTests.swift
  • cmuxTests/BrowserPopupStorageContextTests.swift
  • cmuxTests/BrowserPrewarmedWebViewPoolTests.swift
  • cmuxTests/BrowserWebContentProcessTests.swift
  • cmuxTests/BrowserWebExtensionCreatedWindowTests.swift
  • cmuxTests/BrowserWebExtensionDiscoveryServiceTests.swift
  • cmuxTests/BrowserWebExtensionFocusedWindowTests.swift
  • cmuxTests/BrowserWebExtensionInitialPermissionTests.swift
  • cmuxTests/BrowserWebExtensionLoadErrorTests.swift
  • cmuxTests/BrowserWebExtensionNavigationPolicyTestHost.swift
  • cmuxTests/BrowserWebExtensionOwnershipLifecycleTests.swift
  • cmuxTests/BrowserWebExtensionPermissionReconciliationTests.swift
  • cmuxTests/BrowserWebExtensionPopoutPolicyTests.swift
  • cmuxTests/BrowserWebExtensionReviewRegressionTests.swift
  • cmuxTests/BrowserWebExtensionReviewTestHost.swift
  • cmuxTests/BrowserWebExtensionSelectionLifecycleTests.swift
  • cmuxTests/BrowserWebExtensionSupportLifecycleTests.swift
  • cmuxTests/BrowserWebExtensionSupportTests.swift
  • cmuxTests/PrewarmTestWebExtensionHost.swift
  • cmuxTests/WindowDockLifecycleTests.swift
  • scripts/lint_auxiliary_window_close_shortcuts.py
  • tests/test_ci_auxiliary_window_close_shortcuts.sh

📝 Walkthrough

Walkthrough

The PR removes Safari Web Extension models, hosting, settings, UI, navigation, ownership, and test infrastructure. Browser construction and navigation dependencies are simplified, terminal input can wait for surface readiness, JSON settings mutation APIs are streamlined, and auxiliary-window close-shortcut ownership moves into app-level wiring.

Changes

Browser Web Extension removal

Layer / File(s) Summary
Settings and JSON configuration cleanup
Packages/macOS/CmuxSettings/..., Packages/macOS/CmuxSettingsUI/..., Resources/Localizable.xcstrings
Removes Web Extension settings, models, UI, localization, host actions, and related JSON mutation state.
Application lifecycle and window ownership
Sources/AppDelegate.swift, Sources/AppDelegate+*.swift, Sources/DockSplitStore+*.swift
Removes Web Extension window ownership and reconciliation from startup restore, dock focus, window teardown, and shortcut routing.
Browser panel and navigation simplification
Sources/Panels/*, Sources/DockSplitStore.swift
Removes Web Extension context plumbing and adds function-based external-navigation routing with preserved request metadata for new tabs.
Workspace and application dependency removal
Sources/Workspace.swift, Sources/TabManager.swift, Sources/cmuxApp.swift
Removes Web Extension host dependencies from workspace, tab-manager, browser creation, and prewarming paths; adds pending terminal-input delivery and app-level close-shortcut ownership.
Project configuration and validation
cmux.xcodeproj/project.pbxproj, cmuxTests/*, scripts/*, tests/*
Updates build/test membership, removes Web Extension tests, adds popup data-store and dock confirmation coverage, and updates shortcut-lint fixtures.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested reviewers: lawrencecchen, kylojorgensen, azooz2003-bit

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch revert-7699-browser-extension-management

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot mentioned this pull request Jul 17, 2026
6 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant