Ensure `ExtensionBuilder` respects the proxy settings (#14899)

张小白 and Marshall Bowers created

Release Notes:

- N/A

---------

Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>

Change summary

Cargo.lock                                | 1 +
crates/extension/src/extension_builder.rs | 4 ++--
crates/extension/src/extension_store.rs   | 5 ++++-
crates/extension_cli/Cargo.toml           | 3 ++-
crates/extension_cli/src/main.rs          | 5 ++++-
5 files changed, 13 insertions(+), 5 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -4013,6 +4013,7 @@ dependencies = [
  "env_logger",
  "extension",
  "fs",
+ "http 0.1.0",
  "language",
  "log",
  "rpc",

crates/extension/src/extension_builder.rs 🔗

@@ -64,10 +64,10 @@ struct CargoTomlPackage {
 }
 
 impl ExtensionBuilder {
-    pub fn new(cache_dir: PathBuf) -> Self {
+    pub fn new(http_client: Arc<dyn HttpClient>, cache_dir: PathBuf) -> Self {
         Self {
             cache_dir,
-            http: http::client(None),
+            http: http_client,
         }
     }
 

crates/extension/src/extension_store.rs 🔗

@@ -243,7 +243,10 @@ impl ExtensionStore {
             extension_index: Default::default(),
             installed_dir,
             index_path,
-            builder: Arc::new(ExtensionBuilder::new(build_dir)),
+            builder: Arc::new(ExtensionBuilder::new(
+                http::client(http_client.proxy().cloned()),
+                build_dir,
+            )),
             outstanding_operations: Default::default(),
             modified_extensions: Default::default(),
             reload_complete_senders: Vec::new(),

crates/extension_cli/Cargo.toml 🔗

@@ -16,8 +16,9 @@ path = "src/main.rs"
 anyhow.workspace = true
 clap = { workspace = true, features = ["derive"] }
 env_logger.workspace = true
-fs.workspace = true
 extension = { workspace = true, features = ["no-webrtc"] }
+fs.workspace = true
+http.workspace = true
 language.workspace = true
 log.workspace = true
 rpc.workspace = true

crates/extension_cli/src/main.rs 🔗

@@ -13,6 +13,7 @@ use extension::{
     extension_builder::{CompileExtensionOptions, ExtensionBuilder},
     ExtensionManifest,
 };
+use http::HttpClientWithProxy;
 use language::LanguageConfig;
 use theme::ThemeRegistry;
 use tree_sitter::{Language, Query, WasmStore};
@@ -58,7 +59,9 @@ async fn main() -> Result<()> {
     let mut manifest = ExtensionManifest::load(fs.clone(), &extension_path).await?;
 
     log::info!("compiling extension");
-    let builder = ExtensionBuilder::new(scratch_dir);
+
+    let http_client = Arc::new(HttpClientWithProxy::new(None));
+    let builder = ExtensionBuilder::new(http_client, scratch_dir);
     builder
         .compile_extension(
             &extension_path,