fix: agent storage issue on update (#643)

* fix: agent storage erase issue fix

* fix: remove the guard against remote
This commit is contained in:
Nikhil
2026-04-03 14:50:14 -07:00
committed by GitHub
parent a5f3c4da65
commit ff5386a24a
4 changed files with 75 additions and 8 deletions

View File

@@ -1,9 +1,9 @@
diff --git a/chrome/browser/browseros/extensions/browseros_extension_loader.cc b/chrome/browser/browseros/extensions/browseros_extension_loader.cc
new file mode 100644
index 0000000000000..e61b45d08b7e2
index 0000000000000..fdb6be443f25b
--- /dev/null
+++ b/chrome/browser/browseros/extensions/browseros_extension_loader.cc
@@ -0,0 +1,226 @@
@@ -0,0 +1,269 @@
+// 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.
@@ -89,10 +89,53 @@ index 0000000000000..e61b45d08b7e2
+ extension_ids_.merge(result.extension_ids);
+ last_config_ = std::move(result.config);
+
+ LoadFinished(std::move(result.prefs));
+ base::DictValue prefs_to_load = std::move(result.prefs);
+
+ if (prefs_to_load.empty()) {
+ LOG(WARNING) << "browseros: Install returned empty prefs, "
+ << "reconstructing from installed extensions";
+ prefs_to_load = ReconstructPrefsFromInstalledExtensions();
+ LOG(INFO) << "browseros: Reconstructed prefs for "
+ << prefs_to_load.size() << " installed extensions";
+ }
+
+ LoadFinished(std::move(prefs_to_load));
+ OnStartupComplete(result.from_bundled);
+}
+
+base::DictValue
+BrowserOSExtensionLoader::ReconstructPrefsFromInstalledExtensions() {
+ base::DictValue prefs;
+
+ extensions::ExtensionRegistry* registry =
+ extensions::ExtensionRegistry::Get(profile_);
+ if (!registry) {
+ return prefs;
+ }
+
+ const std::string update_url =
+ base::FeatureList::IsEnabled(features::kBrowserOsAlphaFeatures)
+ ? kBrowserOSAlphaUpdateUrl
+ : kBrowserOSUpdateUrl;
+
+ for (const std::string& id : GetBrowserOSExtensionIds()) {
+ const extensions::Extension* ext = registry->GetInstalledExtension(id);
+ if (!ext) {
+ continue;
+ }
+
+ base::DictValue ext_pref;
+ ext_pref.Set(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+ update_url);
+ prefs.Set(id, std::move(ext_pref));
+
+ LOG(INFO) << "browseros: Reconstructed pref for installed extension "
+ << id << " v" << ext->version().GetString();
+ }
+
+ return prefs;
+}
+
+const base::FilePath BrowserOSExtensionLoader::GetBaseCrxFilePath() {
+ return bundled_crx_base_path_;
+}

View File

@@ -1,9 +1,9 @@
diff --git a/chrome/browser/browseros/extensions/browseros_extension_loader.h b/chrome/browser/browseros/extensions/browseros_extension_loader.h
new file mode 100644
index 0000000000000..2a14e9068156e
index 0000000000000..ea2c856556f5f
--- /dev/null
+++ b/chrome/browser/browseros/extensions/browseros_extension_loader.h
@@ -0,0 +1,81 @@
@@ -0,0 +1,86 @@
+// 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.
@@ -62,6 +62,11 @@ index 0000000000000..2a14e9068156e
+ // Convergence point for both startup paths.
+ void OnStartupComplete(bool from_bundled);
+
+ // Reconstructs minimal prefs from already-installed BrowserOS extensions.
+ // Used as a fallback when both bundled CRX and remote config fail,
+ // preventing orphan detection from uninstalling existing extensions.
+ base::DictValue ReconstructPrefsFromInstalledExtensions();
+
+ // Installs remote extensions immediately via PendingExtensionManager + updater.
+ void InstallRemoteExtensionsNow(base::DictValue config);
+

View File

@@ -1,6 +1,6 @@
diff --git a/chrome/browser/browseros/extensions/browseros_extension_maintainer.cc b/chrome/browser/browseros/extensions/browseros_extension_maintainer.cc
new file mode 100644
index 0000000000000..bb33ae5d3b156
index 0000000000000..5804d54696e8f
--- /dev/null
+++ b/chrome/browser/browseros/extensions/browseros_extension_maintainer.cc
@@ -0,0 +1,395 @@

View File

@@ -1,5 +1,5 @@
diff --git a/chrome/browser/extensions/chrome_extension_registrar_delegate.cc b/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
index 6eec0585e8925..55c2a73647527 100644
index adfb4e4d49fa4..409e26fa1cb1b 100644
--- a/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
+++ b/chrome/browser/extensions/chrome_extension_registrar_delegate.cc
@@ -12,6 +12,7 @@
@@ -10,7 +10,26 @@ index 6eec0585e8925..55c2a73647527 100644
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/corrupted_extension_reinstaller.h"
#include "chrome/browser/extensions/data_deleter.h"
@@ -317,6 +318,13 @@ bool ChromeExtensionRegistrarDelegate::CanDisableExtension(
@@ -256,7 +257,17 @@ void ChromeExtensionRegistrarDelegate::PostUninstallExtension(
}
}
- DataDeleter::StartDeleting(profile_, extension.get(), subtask_done_callback);
+ // Preserve chrome.storage.local data for BrowserOS extensions. These may be
+ // transiently uninstalled during update cycles (e.g., when both bundled CRX
+ // and remote config fail on startup). User configuration must survive.
+ if (browseros::IsBrowserOSExtension(extension->id())) {
+ LOG(INFO) << "browseros: Preserving storage for extension "
+ << extension->id();
+ subtask_done_callback.Run();
+ } else {
+ DataDeleter::StartDeleting(profile_, extension.get(),
+ subtask_done_callback);
+ }
}
void ChromeExtensionRegistrarDelegate::DoLoadExtensionForReload(
@@ -322,6 +333,13 @@ bool ChromeExtensionRegistrarDelegate::CanDisableExtension(
return true;
}