Skip to content

Commit a3f94e9

Browse files
committed
ci: Merge branch 'main'
2 parents a7db476 + 0022f45 commit a3f94e9

File tree

17 files changed

+159
-91
lines changed

17 files changed

+159
-91
lines changed

packages/browseros/chromium_patches/chrome/browser/extensions/browseros_extension_constants.h

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
diff --git a/chrome/browser/extensions/browseros_extension_constants.h b/chrome/browser/extensions/browseros_extension_constants.h
22
new file mode 100644
3-
index 0000000000000..aec78219fe724
3+
index 0000000000000..65020a43f27e1
44
--- /dev/null
55
+++ b/chrome/browser/extensions/browseros_extension_constants.h
6-
@@ -0,0 +1,236 @@
6+
@@ -0,0 +1,226 @@
77
+// Copyright 2024 The Chromium Authors
88
+// Use of this source code is governed by a BSD-style license that can be
99
+// found in the LICENSE file.
@@ -182,16 +182,6 @@ index 0000000000000..aec78219fe724
182182
+ {kUBlockOriginExtensionId, false, false},
183183
+};
184184
+
185-
+// Allowlist of BrowserOS extension IDs that are permitted to be installed.
186-
+// Only extensions with these IDs will be loaded from the config.
187-
+inline constexpr const char* kAllowedExtensions[] = {
188-
+ kBrowserOSExtensions[0].id,
189-
+ kBrowserOSExtensions[1].id,
190-
+ kBrowserOSExtensions[2].id,
191-
+ kBrowserOSExtensions[3].id,
192-
+ kBrowserOSExtensions[4].id,
193-
+};
194-
+
195185
+inline constexpr size_t kBrowserOSExtensionsCount =
196186
+ sizeof(kBrowserOSExtensions) / sizeof(kBrowserOSExtensions[0]);
197187
+

packages/browseros/chromium_patches/chrome/browser/extensions/browseros_external_loader.cc

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
diff --git a/chrome/browser/extensions/browseros_external_loader.cc b/chrome/browser/extensions/browseros_external_loader.cc
22
new file mode 100644
3-
index 0000000000000..61e57851b9178
3+
index 0000000000000..83c9677581de2
44
--- /dev/null
55
+++ b/chrome/browser/extensions/browseros_external_loader.cc
6-
@@ -0,0 +1,667 @@
6+
@@ -0,0 +1,709 @@
77
+// Copyright 2024 The Chromium Authors
88
+// Use of this source code is governed by a BSD-style license that can be
99
+// found in the LICENSE file.
@@ -37,6 +37,7 @@ index 0000000000000..61e57851b9178
3737
+#include "extensions/browser/extension_prefs.h"
3838
+#include "extensions/browser/extension_registrar.h"
3939
+#include "extensions/browser/extension_registry.h"
40+
+#include "extensions/browser/uninstall_reason.h"
4041
+#include "extensions/browser/extension_system.h"
4142
+#include "extensions/browser/pending_extension_manager.h"
4243
+#include "extensions/common/extension.h"
@@ -102,7 +103,7 @@ index 0000000000000..61e57851b9178
102103
+ config_url_ = GURL(browseros::kBrowserOSConfigUrl);
103104
+ }
104105
+
105-
+ for (const char* extension_id : browseros::kAllowedExtensions) {
106+
+ for (const std::string& extension_id : browseros::GetBrowserOSExtensionIds()) {
106107
+ browseros_extension_ids_.insert(extension_id);
107108
+ }
108109
+}
@@ -233,20 +234,12 @@ index 0000000000000..61e57851b9178
233234
+ // Pass the prefs to the external provider system
234235
+ LoadFinished(std::move(prefs));
235236
+
236-
+ // Immediately trigger high-priority installation of all BrowserOS extensions
237-
+ // This ensures they get installed right away instead of waiting for Chrome's
238-
+ // default external extension installation process
239-
+ if (!browseros_extension_ids_.empty()) {
240-
+ LOG(INFO) << "browseros: Triggering immediate high-priority installation for "
241-
+ << browseros_extension_ids_.size() << " BrowserOS extensions";
242-
+
243-
+ // Use a delayed task to ensure the extension system is fully initialized
244-
+ base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
245-
+ FROM_HERE,
246-
+ base::BindOnce(&BrowserOSExternalLoader::TriggerImmediateInstallation,
247-
+ weak_ptr_factory_.GetWeakPtr()),
248-
+ base::Seconds(2)); // Small delay to ensure extension system is ready
249-
+ }
237+
+ // Use a delayed task to ensure the extension system is fully initialized
238+
+ base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
239+
+ FROM_HERE,
240+
+ base::BindOnce(&BrowserOSExternalLoader::TriggerImmediateInstallation,
241+
+ weak_ptr_factory_.GetWeakPtr()),
242+
+ base::Seconds(2));
250243
+
251244
+ // Start periodic checking after initial load
252245
+ StartPeriodicCheck();
@@ -276,19 +269,22 @@ index 0000000000000..61e57851b9178
276269
+ return;
277270
+ }
278271
+
279-
+ // 1. Check for and reinstall any uninstalled BrowserOS extensions
272+
+ // 1. Uninstall deprecated extensions (in kBrowserOSExtensions but not in server config)
273+
+ UninstallDeprecatedExtensions();
274+
+
275+
+ // 2. Check for and reinstall any uninstalled BrowserOS extensions
280276
+ ReinstallUninstalledExtensions();
281277
+
282-
+ // 2. Re-enable any disabled BrowserOS extensions
278+
+ // 3. Re-enable any disabled BrowserOS extensions
283279
+ ReenableDisabledExtensions();
284280
+
285-
+ // 3. Fetch latest config and check for changes
281+
+ // 4. Fetch latest config and check for changes
286282
+ FetchAndCheckConfig();
287283
+
288-
+ // 4. Force immediate update check for all BrowserOS extensions
284+
+ // 5. Force immediate update check for all BrowserOS extensions
289285
+ ForceUpdateCheck();
290286
+
291-
+ // 5. Log extension state after all maintenance attempts
287+
+ // 6. Log extension state after all maintenance attempts
292288
+ CheckAndLogExtensionState("periodic_maintenance");
293289
+
294290
+ // Schedule the next maintenance
@@ -670,4 +666,50 @@ index 0000000000000..61e57851b9178
670666
+ }
671667
+}
672668
+
669+
+void BrowserOSExternalLoader::UninstallDeprecatedExtensions() {
670+
+ if (!profile_ || last_config_.empty()) {
671+
+ return;
672+
+ }
673+
+
674+
+ ExtensionRegistry* registry = ExtensionRegistry::Get(profile_);
675+
+ if (!registry) {
676+
+ return;
677+
+ }
678+
+
679+
+ auto* registrar = ExtensionRegistrar::Get(profile_);
680+
+ if (!registrar) {
681+
+ return;
682+
+ }
683+
+
684+
+ // Build set of extension IDs currently in server config
685+
+ std::set<std::string> server_extension_ids;
686+
+ for (const auto [extension_id, _] : last_config_) {
687+
+ server_extension_ids.insert(extension_id);
688+
+ }
689+
+
690+
+ // Check all BrowserOS-managed extensions
691+
+ for (const std::string& extension_id : browseros::GetBrowserOSExtensionIds()) {
692+
+ // Skip if extension is in server config (still wanted)
693+
+ if (server_extension_ids.contains(extension_id)) {
694+
+ continue;
695+
+ }
696+
+
697+
+ // Check if extension is installed
698+
+ const Extension* extension = registry->GetInstalledExtension(extension_id);
699+
+ if (!extension) {
700+
+ continue;
701+
+ }
702+
+
703+
+ LOG(INFO) << "browseros: Uninstalling deprecated extension " << extension_id;
704+
+
705+
+ std::u16string error;
706+
+ if (!registrar->UninstallExtension(extension_id,
707+
+ UNINSTALL_REASON_ORPHANED_EXTERNAL_EXTENSION,
708+
+ &error)) {
709+
+ LOG(WARNING) << "browseros: Failed to uninstall deprecated extension "
710+
+ << extension_id << ": " << error;
711+
+ }
712+
+ }
713+
+}
714+
+
673715
+} // namespace extensions

packages/browseros/chromium_patches/chrome/browser/extensions/browseros_external_loader.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
diff --git a/chrome/browser/extensions/browseros_external_loader.h b/chrome/browser/extensions/browseros_external_loader.h
22
new file mode 100644
3-
index 0000000000000..dc70fac86ca0a
3+
index 0000000000000..d5e6384343492
44
--- /dev/null
55
+++ b/chrome/browser/extensions/browseros_external_loader.h
6-
@@ -0,0 +1,123 @@
6+
@@ -0,0 +1,128 @@
77
+// Copyright 2024 The Chromium Authors
88
+// Use of this source code is governed by a BSD-style license that can be
99
+// found in the LICENSE file.
@@ -95,6 +95,11 @@ index 0000000000000..dc70fac86ca0a
9595
+ // Checks extension state and logs to metrics if not enabled
9696
+ void CheckAndLogExtensionState(const std::string& context);
9797
+
98+
+ // Uninstalls extensions that are in kAllBrowserOSExtensions but not in
99+
+ // the current server config (extensions.json). This handles cleanup of
100+
+ // deprecated extensions for users upgrading from older versions.
101+
+ void UninstallDeprecatedExtensions();
102+
+
98103
+ // The profile associated with this loader.
99104
+ raw_ptr<Profile> profile_;
100105
+

packages/browseros/chromium_patches/chrome/browser/extensions/chrome_extension_registrar_delegate.cc

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/chrome/browser/extensions/chrome_extension_registrar_delegate.cc b/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
2-
index 6eec0585e8925..bf19269ade03a 100644
2+
index 6eec0585e8925..eb5f9e8573b82 100644
33
--- a/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
44
+++ b/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
55
@@ -12,6 +12,7 @@
@@ -10,17 +10,15 @@ index 6eec0585e8925..bf19269ade03a 100644
1010
#include "chrome/browser/extensions/component_loader.h"
1111
#include "chrome/browser/extensions/corrupted_extension_reinstaller.h"
1212
#include "chrome/browser/extensions/data_deleter.h"
13-
@@ -317,6 +318,15 @@ bool ChromeExtensionRegistrarDelegate::CanDisableExtension(
13+
@@ -317,6 +318,13 @@ bool ChromeExtensionRegistrarDelegate::CanDisableExtension(
1414
return true;
1515
}
1616

1717
+ // - BrowserOS extensions cannot be disabled by users
18-
+ for (const char* allowed_id : browseros::kAllowedExtensions) {
19-
+ if (extension->id() == allowed_id) {
20-
+ LOG(INFO) << "browseros: Extension " << extension->id()
21-
+ << " cannot be disabled (BrowserOS extension)";
22-
+ return false;
23-
+ }
18+
+ if (browseros::IsBrowserOSExtension(extension->id())) {
19+
+ LOG(INFO) << "browseros: Extension " << extension->id()
20+
+ << " cannot be disabled (BrowserOS extension)";
21+
+ return false;
2422
+ }
2523
+
2624
// - Shared modules are just resources used by other extensions, and are not

packages/browseros/chromium_patches/chrome/browser/extensions/extension_web_ui_override_registrar.cc

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/chrome/browser/extensions/extension_web_ui_override_registrar.cc b/chrome/browser/extensions/extension_web_ui_override_registrar.cc
2-
index 7b48bcb950bad..4e7750c2a6112 100644
2+
index 7b48bcb950bad..73f7c36fd3a7c 100644
33
--- a/chrome/browser/extensions/extension_web_ui_override_registrar.cc
44
+++ b/chrome/browser/extensions/extension_web_ui_override_registrar.cc
55
@@ -6,7 +6,9 @@
@@ -12,7 +12,7 @@ index 7b48bcb950bad..4e7750c2a6112 100644
1212
#include "chrome/browser/extensions/extension_web_ui.h"
1313
#include "chrome/browser/profiles/profile.h"
1414
#include "extensions/browser/extension_system.h"
15-
@@ -32,15 +34,29 @@ ExtensionWebUIOverrideRegistrar::~ExtensionWebUIOverrideRegistrar() = default;
15+
@@ -32,15 +34,20 @@ ExtensionWebUIOverrideRegistrar::~ExtensionWebUIOverrideRegistrar() = default;
1616
void ExtensionWebUIOverrideRegistrar::OnExtensionLoaded(
1717
content::BrowserContext* browser_context,
1818
const Extension* extension) {
@@ -26,16 +26,7 @@ index 7b48bcb950bad..4e7750c2a6112 100644
2626
if (!overrides.empty()) {
2727
- for (auto& observer : observer_list_) {
2828
- observer.OnExtensionOverrideAdded(*extension);
29-
+ // Check if this is a BrowserOS extension
30-
+ bool is_browseros_extension = false;
31-
+ for (const char* allowed_id : browseros::kAllowedExtensions) {
32-
+ if (extension->id() == allowed_id) {
33-
+ is_browseros_extension = true;
34-
+ break;
35-
+ }
36-
+ }
37-
+
38-
+ if (!is_browseros_extension) {
29+
+ if (!browseros::IsBrowserOSExtension(extension->id())) {
3930
+ // disable other extensions from overriding Chrome URLs
4031
+ return;
4132
}

packages/browseros/chromium_patches/chrome/browser/resources/settings/settings_main/settings_main.html

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
diff --git a/chrome/browser/resources/settings/settings_main/settings_main.html b/chrome/browser/resources/settings/settings_main/settings_main.html
2-
index e91a42678789f..defdc535cdeeb 100644
2+
index e91a42678789f..b45aab13e278c 100644
33
--- a/chrome/browser/resources/settings/settings_main/settings_main.html
44
+++ b/chrome/browser/resources/settings/settings_main/settings_main.html
5-
@@ -228,4 +228,34 @@
5+
@@ -228,4 +228,24 @@
66
</settings-about-page>
77
</template>
88
</div>
@@ -17,16 +17,6 @@
1717
+ </template>
1818
+ </div>
1919
+
20-
+ <div slot="view" id="browseros">
21-
+ <template is="dom-if" if="[[renderPlugin_(
22-
+ routes_.BROWSEROS, lastRoute_, inSearchMode_)]]">
23-
+ <settings-browseros-page role="main"
24-
+ class="cr-centered-card-container"
25-
+ prefs="{{prefs}}">
26-
+ </settings-browseros-page>
27-
+ </template>
28-
+ </div>
29-
+
3020
+ <div slot="view" id="browserosPrefs">
3121
+ <template is="dom-if" if="[[renderPlugin_(
3222
+ routes_.BROWSEROS_PREFS, lastRoute_, inSearchMode_)]]">

packages/browseros/chromium_patches/chrome/browser/ui/browser_actions.cc

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/chrome/browser/ui/browser_actions.cc b/chrome/browser/ui/browser_actions.cc
2-
index fb3dba200be8c..29d60f64eab67 100644
2+
index fb3dba200be8c..85429c5ab0acf 100644
33
--- a/chrome/browser/ui/browser_actions.cc
44
+++ b/chrome/browser/ui/browser_actions.cc
55
@@ -12,6 +12,7 @@
@@ -10,19 +10,21 @@ index fb3dba200be8c..29d60f64eab67 100644
1010
#include "chrome/app/vector_icons/vector_icons.h"
1111
#include "chrome/browser/devtools/devtools_window.h"
1212
#include "chrome/browser/prefs/incognito_mode_prefs.h"
13-
@@ -20,6 +21,11 @@
13+
@@ -20,6 +21,13 @@
1414
#include "chrome/browser/sharing_hub/sharing_hub_features.h"
1515
#include "chrome/browser/ui/actions/chrome_action_id.h"
1616
#include "chrome/browser/ui/actions/chrome_actions.h"
1717
+#include "chrome/browser/extensions/api/side_panel/side_panel_service.h"
1818
+#include "chrome/browser/extensions/browseros_extension_constants.h"
1919
+#include "chrome/browser/extensions/extension_tab_util.h"
20+
+#include "chrome/browser/infobars/simple_alert_infobar_creator.h"
21+
+#include "components/infobars/content/content_infobar_manager.h"
2022
+#include "chrome/browser/ui/extensions/extension_side_panel_utils.h"
2123
+#include "extensions/browser/extension_registry.h"
2224
#include "chrome/browser/ui/autofill/address_bubbles_icon_controller.h"
2325
#include "chrome/browser/ui/autofill/autofill_bubble_base.h"
2426
#include "chrome/browser/ui/autofill/payments/mandatory_reauth_bubble_controller_impl.h"
25-
@@ -253,6 +259,97 @@ void BrowserActions::InitializeBrowserActions() {
27+
@@ -253,6 +261,110 @@ void BrowserActions::InitializeBrowserActions() {
2628
.Build());
2729
}
2830

@@ -80,6 +82,19 @@ index fb3dba200be8c..29d60f64eab67 100644
8082
+ .GetByID(extensions::browseros::kAgentV2ExtensionId);
8183
+ if (!extension) {
8284
+ LOG(WARNING) << "browseros: Agent extension not found";
85+
+ infobars::ContentInfoBarManager* infobar_manager =
86+
+ infobars::ContentInfoBarManager::FromWebContents(contents);
87+
+ if (infobar_manager) {
88+
+ CreateSimpleAlertInfoBar(
89+
+ infobar_manager,
90+
+ infobars::InfoBarDelegate::
91+
+ BROWSEROS_AGENT_INSTALLING_INFOBAR_DELEGATE,
92+
+ nullptr,
93+
+ u"BrowserOS Agent is installing/updating. Please try again shortly.",
94+
+ /*auto_expire=*/true,
95+
+ /*should_animate=*/true,
96+
+ /*closeable=*/true);
97+
+ }
8398
+ return;
8499
+ }
85100
+

packages/browseros/chromium_patches/chrome/browser/ui/browser_command_controller.cc

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
2-
index deb531f8832e3..977d40cf6ff10 100644
2+
index deb531f8832e3..78591a95b2bc7 100644
33
--- a/chrome/browser/ui/browser_command_controller.cc
44
+++ b/chrome/browser/ui/browser_command_controller.cc
55
@@ -70,6 +70,8 @@
@@ -11,19 +11,21 @@ index deb531f8832e3..977d40cf6ff10 100644
1111
#include "chrome/browser/ui/web_applications/app_browser_controller.h"
1212
#include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
1313
#include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
14-
@@ -104,7 +106,11 @@
14+
@@ -104,7 +106,13 @@
1515
#include "content/public/browser/web_contents_observer.h"
1616
#include "content/public/common/profiling.h"
1717
#include "content/public/common/url_constants.h"
1818
+#include "chrome/browser/extensions/api/side_panel/side_panel_service.h"
1919
+#include "chrome/browser/extensions/browseros_extension_constants.h"
2020
+#include "chrome/browser/extensions/extension_tab_util.h"
21+
+#include "chrome/browser/infobars/simple_alert_infobar_creator.h"
22+
+#include "components/infobars/content/content_infobar_manager.h"
2123
#include "extensions/browser/extension_registrar.h"
2224
+#include "extensions/browser/extension_registry.h"
2325
#include "extensions/common/extension_urls.h"
2426
#include "printing/buildflags/buildflags.h"
2527
#include "ui/actions/actions.h"
26-
@@ -988,6 +994,58 @@ bool BrowserCommandController::ExecuteCommandWithDisposition(
28+
@@ -988,6 +996,71 @@ bool BrowserCommandController::ExecuteCommandWithDisposition(
2729
browser_->GetFeatures().side_panel_ui()->Show(
2830
SidePanelEntryId::kBookmarks, SidePanelOpenTrigger::kAppMenu);
2931
break;
@@ -67,6 +69,19 @@ index deb531f8832e3..977d40cf6ff10 100644
6769
+ ->enabled_extensions()
6870
+ .GetByID(extensions::browseros::kAgentV2ExtensionId);
6971
+ if (!extension) {
72+
+ infobars::ContentInfoBarManager* infobar_manager =
73+
+ infobars::ContentInfoBarManager::FromWebContents(active_contents);
74+
+ if (infobar_manager) {
75+
+ CreateSimpleAlertInfoBar(
76+
+ infobar_manager,
77+
+ infobars::InfoBarDelegate::
78+
+ BROWSEROS_AGENT_INSTALLING_INFOBAR_DELEGATE,
79+
+ nullptr,
80+
+ u"BrowserOS Agent is installing/updating. Please try again shortly.",
81+
+ /*auto_expire=*/true,
82+
+ /*should_animate=*/true,
83+
+ /*closeable=*/true);
84+
+ }
7085
+ break;
7186
+ }
7287
+ extensions::SidePanelService* service =
@@ -82,7 +97,7 @@ index deb531f8832e3..977d40cf6ff10 100644
8297
case IDC_SHOW_APP_MENU:
8398
base::RecordAction(base::UserMetricsAction("Accel_Show_App_Menu"));
8499
ShowAppMenu(browser_);
85-
@@ -1648,6 +1706,13 @@ void BrowserCommandController::InitCommandState() {
100+
@@ -1648,6 +1721,13 @@ void BrowserCommandController::InitCommandState() {
86101
}
87102

88103
command_updater_.UpdateCommandEnabled(IDC_SHOW_BOOKMARK_SIDE_PANEL, true);

0 commit comments

Comments
 (0)