mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-13 15:46:22 +00:00
fix: agent storage issue on update (#643)
* fix: agent storage erase issue fix * fix: remove the guard against remote
This commit is contained in:
@@ -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_;
|
||||
+}
|
||||
|
||||
@@ -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);
|
||||
+
|
||||
|
||||
@@ -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 @@
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user