extension 4.1.34 → 4.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -120,6 +120,7 @@ Useful flags:
120
120
  - `--zip` packages the build into a ZIP ready for store upload
121
121
  - `--zip-source` includes source files for store source-code review
122
122
  - `--zip-filename <name>` controls the output filename, written as `dist/<name>-<browser>.zip`
123
+ - `--out-dir <path>` writes the build to `<path>/<browser>` instead of `dist/<browser>`, so a build can run beside a dev session
123
124
  - `--polyfill` enables the cross-browser webextension polyfill
124
125
 
125
126
  ## Manage browser binaries
package/dist/597.cjs CHANGED
@@ -81,6 +81,10 @@ exports.modules = {
81
81
  if (PROTOCOL_ERROR_CODES.has(result.code) || !result.message) return {
82
82
  status: 'unknown'
83
83
  };
84
+ if ('number' != typeof result.code) return {
85
+ status: 'unknown',
86
+ transportError: result.message
87
+ };
84
88
  return {
85
89
  status: 'refused',
86
90
  reason: result.message
package/dist/browsers.cjs CHANGED
@@ -507,7 +507,8 @@ var __webpack_modules__ = {
507
507
  var _helpers_messaging__rspack_import_9 = __webpack_require__("./helpers/messaging.ts");
508
508
  var _run_firefox_firefox_launch_librewolf_overrides__rspack_import_10 = __webpack_require__("./browsers/run-firefox/firefox-launch/librewolf-overrides.ts");
509
509
  var _browser_family__rspack_import_11 = __webpack_require__("./browsers/browsers-lib/browser-family.ts");
510
- var _output_binaries_resolver__rspack_import_12 = __webpack_require__("./browsers/browsers-lib/output-binaries-resolver.ts");
510
+ var _official_chrome__rspack_import_12 = __webpack_require__("./browsers/browsers-lib/official-chrome.ts");
511
+ var _output_binaries_resolver__rspack_import_13 = __webpack_require__("./browsers/browsers-lib/output-binaries-resolver.ts");
511
512
  const require1 = (0, node_module__rspack_import_1.createRequire)(__rslib_import_meta_url__);
512
513
  function getLoggingPrefix(type) {
513
514
  return (0, _helpers_messaging__rspack_import_9.Pl)(type);
@@ -591,7 +592,7 @@ var __webpack_modules__ = {
591
592
  if (opts?.pinned) return '';
592
593
  const managedKey = 'chromium' === browser || 'chromium-based' === browser ? 'chromium' : 'chrome' === browser || 'edge' === browser || 'firefox' === browser ? browser : void 0;
593
594
  if (managedKey) try {
594
- const managed = (0, _output_binaries_resolver__rspack_import_12.kI)({}, managedKey);
595
+ const managed = (0, _output_binaries_resolver__rspack_import_13.kI)({}, managedKey);
595
596
  if (managed && node_fs__rspack_import_0.existsSync(managed)) {
596
597
  if ('chromium' === managedKey) return (0, chromium_location__rspack_import_5.getChromiumVersion)(managed) || 'Chromium';
597
598
  if ('chrome' === managedKey) return (0, chrome_location2__rspack_import_4.getChromeVersion)(managed) || 'Chrome';
@@ -602,22 +603,23 @@ var __webpack_modules__ = {
602
603
  try {
603
604
  if ('chromium' === browser || 'chromium-based' === browser) {
604
605
  const p = chromium_location__rspack_import_5_default()(true, {
605
- env: (0, _output_binaries_resolver__rspack_import_12.Gg)('chromium')
606
+ env: (0, _output_binaries_resolver__rspack_import_13.Gg)('chromium')
606
607
  });
607
608
  if (p && 'string' == typeof p && node_fs__rspack_import_0.existsSync(p)) return (0, chromium_location__rspack_import_5.getChromiumVersion)(p) || 'Chromium';
608
609
  } else if ('chrome' === browser) {
609
610
  const p = chrome_location2__rspack_import_4_default()(true, {
610
- env: (0, _output_binaries_resolver__rspack_import_12.Gg)('chrome')
611
+ env: (0, _output_binaries_resolver__rspack_import_13.Gg)('chrome')
611
612
  });
613
+ if (p && 'string' == typeof p && (0, _official_chrome__rspack_import_12.g)(p)) return '';
612
614
  if (p && 'string' == typeof p && node_fs__rspack_import_0.existsSync(p)) return (0, chrome_location2__rspack_import_4.getChromeVersion)(p) || 'Chrome';
613
615
  } else if ('edge' === browser) {
614
616
  const p = edge_location__rspack_import_6_default()(true, {
615
- env: (0, _output_binaries_resolver__rspack_import_12.Gg)('edge')
617
+ env: (0, _output_binaries_resolver__rspack_import_13.Gg)('edge')
616
618
  });
617
619
  if (p && 'string' == typeof p && node_fs__rspack_import_0.existsSync(p)) return (0, edge_location__rspack_import_6.getEdgeVersion)(p) || 'Microsoft Edge';
618
620
  } else if ('firefox' === browser) {
619
621
  const p = firefox_location2__rspack_import_7_default()(true, {
620
- env: (0, _output_binaries_resolver__rspack_import_12.Gg)('firefox')
622
+ env: (0, _output_binaries_resolver__rspack_import_13.Gg)('firefox')
621
623
  });
622
624
  if (p && 'string' == typeof p && node_fs__rspack_import_0.existsSync(p)) return (0, firefox_location2__rspack_import_7.getFirefoxVersion)(p) || 'Firefox';
623
625
  }
@@ -1339,6 +1341,24 @@ var __webpack_modules__ = {
1339
1341
  c: ()=>manifestDeclaresNewtabOverride
1340
1342
  });
1341
1343
  },
1344
+ "./browsers/browsers-lib/official-chrome.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1345
+ var _wsl_support__rspack_import_0 = __webpack_require__("./browsers/browsers-lib/wsl-support.ts");
1346
+ function looksOfficialChromeBinaryPath(bin) {
1347
+ const p = String(bin || '');
1348
+ if (!p) return false;
1349
+ if (/\/Applications\/Google Chrome(?: (?:Beta|Dev|Canary))?\.app\/Contents\/MacOS\/Google Chrome/i.test(p)) return true;
1350
+ if (/\\Google\\Chrome\\Application\\chrome\.exe$/i.test(p)) return true;
1351
+ if (/\/opt\/google\/chrome\//i.test(p)) return true;
1352
+ if (/\/google-chrome(?:-stable)?$/i.test(p)) return true;
1353
+ return false;
1354
+ }
1355
+ function isRefusedOfficialChrome(bin) {
1356
+ return looksOfficialChromeBinaryPath(bin) && !(0, _wsl_support__rspack_import_0.EV)();
1357
+ }
1358
+ __webpack_require__.d(__webpack_exports__, {
1359
+ g: ()=>isRefusedOfficialChrome
1360
+ });
1361
+ },
1342
1362
  "./browsers/browsers-lib/output-binaries-resolver.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1343
1363
  var node_fs__rspack_import_0 = __webpack_require__("node:fs");
1344
1364
  var node_path__rspack_import_1 = __webpack_require__("node:path");
@@ -1795,11 +1815,12 @@ var __webpack_modules__ = {
1795
1815
  var external_node_fs_ = __webpack_require__("node:fs");
1796
1816
  var external_node_path_ = __webpack_require__("node:path");
1797
1817
  var messaging = __webpack_require__("./helpers/messaging.ts");
1818
+ var rename_with_retry = __webpack_require__("./browsers/browsers-lib/rename-with-retry.ts");
1798
1819
  function writeJsonAtomic(filePath, value) {
1799
1820
  const tmpPath = `${filePath}.tmp-${process.pid}`;
1800
1821
  try {
1801
1822
  external_node_fs_.writeFileSync(tmpPath, JSON.stringify(value, null, 2), 'utf-8');
1802
- external_node_fs_.renameSync(tmpPath, filePath);
1823
+ (0, rename_with_retry.O)(tmpPath, filePath);
1803
1824
  return true;
1804
1825
  } catch {
1805
1826
  try {
@@ -1891,7 +1912,10 @@ var __webpack_modules__ = {
1891
1912
  if ('number' == typeof details?.browserPid && Number.isFinite(details.browserPid)) ready.browserPid = details.browserPid;
1892
1913
  if ('number' == typeof details?.launcherPid && Number.isFinite(details.launcherPid)) ready.launcherPid = details.launcherPid;
1893
1914
  const extensionId = String(details?.extensionId || '').trim();
1894
- if (extensionId) ready.extensionId = extensionId;
1915
+ if (extensionId && 'browser' !== ready.extensionIdSource) {
1916
+ ready.extensionId = extensionId;
1917
+ ready.extensionIdSource = 'derived';
1918
+ }
1895
1919
  const binary = String(details?.binary || '').trim();
1896
1920
  if (binary) ready.binary = binary;
1897
1921
  const provenance = String(details?.binaryProvenance || '').trim();
@@ -1953,8 +1977,9 @@ var __webpack_modules__ = {
1953
1977
  const readyPath = readyPathFor(extensionOutputPath);
1954
1978
  if (!external_node_fs_.existsSync(readyPath)) return;
1955
1979
  const ready = JSON.parse(external_node_fs_.readFileSync(readyPath, 'utf-8'));
1956
- if (ready.extensionId === id) return;
1980
+ if (ready.extensionId === id && 'browser' === ready.extensionIdSource) return;
1957
1981
  ready.extensionId = id;
1982
+ ready.extensionIdSource = 'browser';
1958
1983
  writeJsonAtomic(readyPath, ready);
1959
1984
  } catch {}
1960
1985
  }
@@ -2013,6 +2038,42 @@ var __webpack_modules__ = {
2013
2038
  } catch {}
2014
2039
  }
2015
2040
  },
2041
+ "./browsers/browsers-lib/rename-with-retry.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
2042
+ var node_fs__rspack_import_0 = __webpack_require__("node:fs");
2043
+ const RETRYABLE_RENAME_CODES = new Set([
2044
+ 'EPERM',
2045
+ 'EACCES',
2046
+ 'EBUSY'
2047
+ ]);
2048
+ const RENAME_RETRY_DELAYS_MS = [
2049
+ 10,
2050
+ 20,
2051
+ 40,
2052
+ 80,
2053
+ 160,
2054
+ 320
2055
+ ];
2056
+ function sleepSync(ms) {
2057
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
2058
+ }
2059
+ function renameSyncWithRetry(from, to, options = {}) {
2060
+ const platform = options.platform ?? process.platform;
2061
+ const rename = options.rename ?? node_fs__rspack_import_0.renameSync;
2062
+ const sleep = options.sleep ?? sleepSync;
2063
+ for(let attempt = 0;; attempt++)try {
2064
+ rename(from, to);
2065
+ return;
2066
+ } catch (error) {
2067
+ const code = error?.code;
2068
+ const delay = RENAME_RETRY_DELAYS_MS[attempt];
2069
+ if ('win32' !== platform || !code || !RETRYABLE_RENAME_CODES.has(code) || void 0 === delay) throw error;
2070
+ sleep(delay);
2071
+ }
2072
+ }
2073
+ __webpack_require__.d(__webpack_exports__, {
2074
+ O: ()=>renameSyncWithRetry
2075
+ });
2076
+ },
2016
2077
  "./browsers/browsers-lib/resolve-live-pid.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
2017
2078
  var node_child_process__rspack_import_0 = __webpack_require__("node:child_process");
2018
2079
  var node_fs__rspack_import_1 = __webpack_require__("node:fs");
@@ -2448,22 +2509,33 @@ var __webpack_modules__ = {
2448
2509
  }
2449
2510
  function mergeChromiumFeatureSwitches(flags) {
2450
2511
  const merged = [];
2512
+ const prefixes = [
2513
+ '--enable-features=',
2514
+ '--disable-features='
2515
+ ];
2451
2516
  const featureValues = {
2452
2517
  '--enable-features=': [],
2453
2518
  '--disable-features=': []
2454
2519
  };
2520
+ const featureName = (value)=>value.split(/[<:]/)[0].trim();
2455
2521
  for (const flag of flags){
2456
- const prefix = Object.keys(featureValues).find((p)=>flag.startsWith(p));
2522
+ const prefix = prefixes.find((p)=>flag.startsWith(p));
2457
2523
  if (!prefix) {
2458
2524
  merged.push(flag);
2459
2525
  continue;
2460
2526
  }
2461
2527
  for (const value of flag.slice(prefix.length).split(',')){
2462
2528
  const trimmed = value.trim();
2463
- if (trimmed && !featureValues[prefix].includes(trimmed)) featureValues[prefix].push(trimmed);
2529
+ if (!trimmed) continue;
2530
+ const name = featureName(trimmed);
2531
+ for (const other of prefixes)featureValues[other] = featureValues[other].filter((existing)=>featureName(existing) !== name);
2532
+ featureValues[prefix].push(trimmed);
2464
2533
  }
2465
2534
  }
2466
- for (const [prefix, values] of Object.entries(featureValues))if (values.length) merged.push(`${prefix}${values.join(',')}`);
2535
+ for (const prefix of prefixes){
2536
+ const values = featureValues[prefix];
2537
+ if (values.length) merged.push(`${prefix}${values.join(',')}`);
2538
+ }
2467
2539
  return merged;
2468
2540
  }
2469
2541
  async function findAvailablePortNear(startPort, maxAttempts = 20, host = '127.0.0.1') {
@@ -3268,8 +3340,8 @@ var __webpack_modules__ = {
3268
3340
  var messaging = __webpack_require__("./helpers/messaging.ts");
3269
3341
  var banner = __webpack_require__("./browsers/browsers-lib/banner.ts");
3270
3342
  var browser_family = __webpack_require__("./browsers/browsers-lib/browser-family.ts");
3271
- const external_node_readline_namespaceObject = require("node:readline");
3272
- var external_node_readline_default = /*#__PURE__*/ __webpack_require__.n(external_node_readline_namespaceObject);
3343
+ var external_node_readline_ = __webpack_require__("node:readline");
3344
+ var external_node_readline_default = /*#__PURE__*/ __webpack_require__.n(external_node_readline_);
3273
3345
  var browser_install_outcome = __webpack_require__("./helpers/browser-install-outcome.ts");
3274
3346
  var messages = __webpack_require__("./browsers/browsers-lib/messages.ts");
3275
3347
  var output_binaries_resolver = __webpack_require__("./browsers/browsers-lib/output-binaries-resolver.ts");
@@ -3548,6 +3620,7 @@ var __webpack_modules__ = {
3548
3620
  return false;
3549
3621
  }
3550
3622
  }
3623
+ var official_chrome = __webpack_require__("./browsers/browsers-lib/official-chrome.ts");
3551
3624
  var pinned_binary = __webpack_require__("./browsers/browsers-lib/pinned-binary.ts");
3552
3625
  var process_teardown = __webpack_require__("./browsers/browsers-lib/process-teardown.ts");
3553
3626
  var ready_message = __webpack_require__("./browsers/browsers-lib/ready-message.ts");
@@ -4281,15 +4354,6 @@ var __webpack_modules__ = {
4281
4354
  }
4282
4355
  if (!binaryPinnedByFlag) browserBinaryLocation = preferRealChromeBinary(browserBinaryLocation);
4283
4356
  const getBrowserVersionLine = (bin)=>(0, version_probe.yO)(bin, String(browser || ''));
4284
- const looksOfficialChromeBinaryPath = (bin)=>{
4285
- const p = String(bin || '');
4286
- if (!p) return false;
4287
- if (/\/Applications\/Google Chrome(?: (?:Beta|Dev|Canary))?\.app\/Contents\/MacOS\/Google Chrome/i.test(p)) return true;
4288
- if (/\\Google\\Chrome\\Application\\chrome\.exe$/i.test(p)) return true;
4289
- if (/\/opt\/google\/chrome\//i.test(p)) return true;
4290
- if (/\/google-chrome(?:-stable)?$/i.test(p)) return true;
4291
- return false;
4292
- };
4293
4357
  const managedCacheRoot = output_binaries_resolver.LB(compilation);
4294
4358
  const managedEnvFor = (b)=>(0, locator_env.i)(process.env, output_binaries_resolver.$4(String(managedCacheRoot), b));
4295
4359
  const isAuthorMode = (0, messaging._o)();
@@ -4303,7 +4367,7 @@ var __webpack_modules__ = {
4303
4367
  if (!located) throw new Error(getInstallGuidanceText('chrome'));
4304
4368
  const normalized = normalizePath(located || null);
4305
4369
  if (isUsableBinary(normalized)) {
4306
- if (looksOfficialChromeBinaryPath(normalized) && !(0, wsl_support.EV)()) {
4370
+ if ((0, official_chrome.g)(normalized)) {
4307
4371
  printInstallGuidance(getInstallGuidanceText('chrome'), browser);
4308
4372
  return null;
4309
4373
  }
@@ -4317,7 +4381,7 @@ var __webpack_modules__ = {
4317
4381
  }) || null;
4318
4382
  const normalized = normalizePath(candidate || null);
4319
4383
  if (normalized) {
4320
- if (looksOfficialChromeBinaryPath(normalized) && !(0, wsl_support.EV)()) {
4384
+ if ((0, official_chrome.g)(normalized)) {
4321
4385
  printInstallGuidance(getInstallGuidanceText('chrome'), browser);
4322
4386
  candidate = null;
4323
4387
  }
@@ -5884,7 +5948,10 @@ var __webpack_modules__ = {
5884
5948
  await client.connect(port);
5885
5949
  this.client = client;
5886
5950
  this.invalidateConnectionScopedCaches();
5887
- client.on('reconnected', ()=>this.invalidateConnectionScopedCaches());
5951
+ client.on('reconnected', ()=>{
5952
+ this.invalidateConnectionScopedCaches();
5953
+ if (this.loggingAttached) attachConsoleListeners(client);
5954
+ });
5888
5955
  return client;
5889
5956
  } catch (error) {
5890
5957
  if (isErrorWithCode('ECONNREFUSED', error)) {
@@ -6837,6 +6904,7 @@ var __webpack_modules__ = {
6837
6904
  var node_fs__rspack_import_0 = __webpack_require__("node:fs");
6838
6905
  var node_path__rspack_import_1 = __webpack_require__("node:path");
6839
6906
  __webpack_require__("./browsers/browsers-lib/output-binaries-resolver.ts");
6907
+ var _browsers_lib_rename_with_retry__rspack_import_3 = __webpack_require__("./browsers/browsers-lib/rename-with-retry.ts");
6840
6908
  const MANAGED_GECKO_POLICIES = {
6841
6909
  DisableAppUpdate: true
6842
6910
  };
@@ -6917,7 +6985,9 @@ var __webpack_modules__ = {
6917
6985
  recursive: true
6918
6986
  });
6919
6987
  fs.writeFileSync(tempPath, `${JSON.stringify(next, null, 2)}\n`, 'utf8');
6920
- fs.renameSync(tempPath, policyPath);
6988
+ (0, _browsers_lib_rename_with_retry__rspack_import_3.O)(tempPath, policyPath, {
6989
+ rename: (from, to)=>fs.renameSync(from, to)
6990
+ });
6921
6991
  return {
6922
6992
  status: 'written',
6923
6993
  policyPath
@@ -9762,6 +9832,7 @@ function describeButton(b) {
9762
9832
  E_POLYFILL_NOT_FOUND: 'E_POLYFILL_NOT_FOUND',
9763
9833
  E_LOCALES_LAYOUT: 'E_LOCALES_LAYOUT',
9764
9834
  E_WAR_INVALID: 'E_WAR_INVALID',
9835
+ E_DEV_SESSION_DIST_SHARED: 'E_DEV_SESSION_DIST_SHARED',
9765
9836
  E_BACKGROUND_REQUIRED: 'E_BACKGROUND_REQUIRED',
9766
9837
  E_CONTENT_SCRIPT_SYNTAX: 'E_CONTENT_SCRIPT_SYNTAX',
9767
9838
  E_NO_ENTRYPOINTS: 'E_NO_ENTRYPOINTS',
@@ -9876,6 +9947,9 @@ function describeButton(b) {
9876
9947
  "node:path" (module) {
9877
9948
  module.exports = require("node:path");
9878
9949
  },
9950
+ "node:readline" (module) {
9951
+ module.exports = require("node:readline");
9952
+ },
9879
9953
  pintor (module) {
9880
9954
  module.exports = require("pintor");
9881
9955
  },