Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion packages/browseros/build/config/NXTSCAPE_VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
78
81
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator_shared.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator_shared.cc
index e6c15e15d3157..c1e2b724f5f8f 100644
index e6c15e15d3157..38f6be4832650 100644
--- a/chrome/browser/extensions/api/developer_private/extension_info_generator_shared.cc
+++ b/chrome/browser/extensions/api/developer_private/extension_info_generator_shared.cc
@@ -12,6 +12,7 @@
Expand All @@ -26,24 +26,19 @@ index e6c15e15d3157..c1e2b724f5f8f 100644
#include "extensions/grit/extensions_browser_resources.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/l10n/l10n_util.h"
@@ -78,6 +81,16 @@ namespace developer = api::developer_private;
@@ -78,6 +81,11 @@ namespace developer = api::developer_private;

namespace {

+// Check if an extension is a BrowserOS extension that should be hidden
+// Check if an extension is a BrowserOS extension that should be hidden.
+bool IsBrowserOSExtension(const std::string& extension_id) {
+ for (const char* allowed_id : browseros::kAllowedExtensions) {
+ if (extension_id == allowed_id) {
+ return true;
+ }
+ }
+ return false;
+ return browseros::IsBrowserOSExtension(extension_id);
+}
+
// Given a Manifest::Type, converts it into its developer_private
// counterpart.
developer::ExtensionType GetExtensionType(Manifest::Type manifest_type) {
@@ -447,8 +460,19 @@ void ExtensionInfoGeneratorShared::CreateExtensionInfo(
@@ -447,8 +455,19 @@ void ExtensionInfoGeneratorShared::CreateExtensionInfo(
state = developer::ExtensionState::kBlocklisted;
}

Expand All @@ -64,7 +59,7 @@ index e6c15e15d3157..c1e2b724f5f8f 100644
}

if (pending_image_loads_ == 0) {
@@ -465,11 +489,22 @@ void ExtensionInfoGeneratorShared::CreateExtensionsInfo(
@@ -465,11 +484,22 @@ void ExtensionInfoGeneratorShared::CreateExtensionsInfo(
bool include_disabled,
bool include_terminated,
ExtensionInfosCallback callback) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,20 @@
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc
index 97bb4be60af93..1bff654e3ac42 100644
index 97bb4be60af93..70bf4e91d6ace 100644
--- a/chrome/browser/extensions/api/settings_private/prefs_util.cc
+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -580,6 +580,37 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
@@ -580,6 +580,11 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
(*s_allowlist)[::prefs::kCaretBrowsingEnabled] =
settings_api::PrefType::kBoolean;

+ // Nxtscape AI provider preferences
+ (*s_allowlist)[prefs::kBrowserOSProviders] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.default_provider"] = settings_api::PrefType::kString;
+
+ // Nxtscape provider settings
+ (*s_allowlist)["nxtscape.nxtscape_model"] = settings_api::PrefType::kString;
+
+ // OpenAI provider settings
+ (*s_allowlist)["nxtscape.openai_api_key"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.openai_model"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.openai_base_url"] = settings_api::PrefType::kString;
+
+ // Anthropic provider settings
+ (*s_allowlist)["nxtscape.anthropic_api_key"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.anthropic_model"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.anthropic_base_url"] = settings_api::PrefType::kString;
+
+ // Gemini provider settings
+ (*s_allowlist)["nxtscape.gemini_api_key"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.gemini_model"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.gemini_base_url"] = settings_api::PrefType::kString;
+
+ // Ollama provider settings
+ (*s_allowlist)["nxtscape.ollama_api_key"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.ollama_base_url"] = settings_api::PrefType::kString;
+ (*s_allowlist)["nxtscape.ollama_model"] = settings_api::PrefType::kString;
+
+ // BrowserOS preferences
+ (*s_allowlist)[prefs::kBrowserOSProviders] = settings_api::PrefType::kString;
+ (*s_allowlist)[prefs::kBrowserOSShowToolbarLabels] = settings_api::PrefType::kBoolean;
+ (*s_allowlist)[prefs::kBrowserOSCustomProviders] = settings_api::PrefType::kString;
+
#if BUILDFLAG(IS_CHROMEOS)
// Accounts / Users / People.
(*s_allowlist)[ash::kAccountsPrefAllowGuest] =
@@ -1164,6 +1195,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
@@ -1164,6 +1169,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() {
settings_api::PrefType::kBoolean;
(*s_allowlist)[::prefs::kImportDialogSearchEngine] =
settings_api::PrefType::kBoolean;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
diff --git a/chrome/browser/extensions/browseros_extension_constants.h b/chrome/browser/extensions/browseros_extension_constants.h
new file mode 100644
index 0000000000000..17b78fbb99a9f
index 0000000000000..e42df6740460c
--- /dev/null
+++ b/chrome/browser/extensions/browseros_extension_constants.h
@@ -0,0 +1,80 @@
@@ -0,0 +1,112 @@
+// 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.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_BROWSEROS_EXTENSION_CONSTANTS_H_
+#define CHROME_BROWSER_EXTENSIONS_BROWSEROS_EXTENSION_CONSTANTS_H_
+
+#include <cstddef>
+#include <optional>
+#include <string>
+#include <vector>
Expand All @@ -36,46 +37,77 @@ index 0000000000000..17b78fbb99a9f
+inline constexpr char kBrowserOSUpdateUrl[] =
+ "https://cdn.browseros.com/extensions/update-manifest.xml";
+
+// Allowlist of BrowserOS extension IDs that are permitted to be installed
+// Only extensions with these IDs will be loaded from the config
+constexpr const char* kAllowedExtensions[] = {
+ kAISidePanelExtensionId, // AI Side Panel extension
+ kBugReporterExtensionId, // Bug Reporter extension
+ kControllerExtensionId, // Controller extension
+// BrowserOS extension config URL
+inline constexpr char kBrowserOSConfigUrl[] =
+ "https://cdn.browseros.com/extensions/extensions.json";
+
+struct BrowserOSExtensionInfo {
+ const char* id;
+ const char* display_name;
+ bool is_pinned;
+ bool is_labelled;
+};
+
+inline constexpr BrowserOSExtensionInfo kBrowserOSExtensions[] = {
+ {kAISidePanelExtensionId, "BrowserOS", true, true},
+ {kBugReporterExtensionId, "BrowserOS/bug-reporter", true, false},
+ {kControllerExtensionId, "BrowserOS/controller", false, false},
+};
+
+// Allowlist of BrowserOS extension IDs that are permitted to be installed.
+// Only extensions with these IDs will be loaded from the config.
+inline constexpr const char* kAllowedExtensions[] = {
+ kBrowserOSExtensions[0].id,
+ kBrowserOSExtensions[1].id,
+ kBrowserOSExtensions[2].id,
+};
+
+inline constexpr size_t kBrowserOSExtensionsCount =
+ sizeof(kBrowserOSExtensions) / sizeof(kBrowserOSExtensions[0]);
+
+inline const BrowserOSExtensionInfo* FindBrowserOSExtensionInfo(
+ const std::string& extension_id) {
+ for (const auto& info : kBrowserOSExtensions) {
+ if (extension_id == info.id)
+ return &info;
+ }
+ return nullptr;
+}
+
+// Check if an extension is a BrowserOS extension
+inline bool IsBrowserOSExtension(const std::string& extension_id) {
+ return extension_id == kAISidePanelExtensionId ||
+ extension_id == kBugReporterExtensionId ||
+ extension_id == kControllerExtensionId;
+ return FindBrowserOSExtensionInfo(extension_id) != nullptr;
+}
+
+inline bool IsBrowserOSPinnedExtension(const std::string& extension_id) {
+ const BrowserOSExtensionInfo* info =
+ FindBrowserOSExtensionInfo(extension_id);
+ return info && info->is_pinned;
+}
+
+// Check if an extension can be uninstalled (false for BrowserOS extensions)
+inline bool CanUninstallExtension(const std::string& extension_id) {
+ return !IsBrowserOSExtension(extension_id);
+inline bool IsBrowserOSLabelledExtension(const std::string& extension_id) {
+ const BrowserOSExtensionInfo* info =
+ FindBrowserOSExtensionInfo(extension_id);
+ return info && info->is_labelled;
+}
+
+// Get all BrowserOS extension IDs
+inline std::vector<std::string> GetBrowserOSExtensionIds() {
+ return {
+ kAISidePanelExtensionId,
+ kBugReporterExtensionId,
+ kControllerExtensionId
+ };
+ std::vector<std::string> ids;
+ ids.reserve(kBrowserOSExtensionsCount);
+ for (const auto& info : kBrowserOSExtensions)
+ ids.push_back(info.id);
+ return ids;
+}
+
+// Get display name for BrowserOS extensions in omnibox
+// Returns the display name if extension_id is a BrowserOS extension,
+// otherwise returns std::nullopt
+inline std::optional<std::string> GetExtensionDisplayName(
+ const std::string& extension_id) {
+ if (extension_id == kAISidePanelExtensionId) {
+ return "BrowserOS";
+ } else if (extension_id == kBugReporterExtensionId) {
+ return "BrowserOS/bug-reporter";
+ } else if (extension_id == kControllerExtensionId) {
+ return "BrowserOS/controller";
+ if (const BrowserOSExtensionInfo* info =
+ FindBrowserOSExtensionInfo(extension_id)) {
+ return info->display_name;
+ }
+ return std::nullopt;
+}
Expand Down
Loading