From 519d32a19fc9a1f7b3a08de7ea5179f3743ddf63 Mon Sep 17 00:00:00 2001
From: Dan Abramov <dan.abramov@gmail.com>
Date: Sun, 11 Dec 2016 13:15:42 -0800
Subject: [PATCH] Only open Chrome tab if BROWSER is missing or is Chrome
 (#1247)

---
 packages/react-dev-utils/openBrowser.js | 31 ++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/packages/react-dev-utils/openBrowser.js b/packages/react-dev-utils/openBrowser.js
index 3cd877a12..a3623515e 100644
--- a/packages/react-dev-utils/openBrowser.js
+++ b/packages/react-dev-utils/openBrowser.js
@@ -10,8 +10,32 @@
 var execSync = require('child_process').execSync;
 var opn = require('opn');
 
+// https://github.com/sindresorhus/opn#app
+var OSX_CHROME = 'google chrome';
+
 function openBrowser(url) {
-  if (process.platform === 'darwin') {
+  // Attempt to honor this environment variable.
+  // It is specific to the operating system.
+  // See https://github.com/sindresorhus/opn#app for documentation.
+  const browser = process.env.BROWSER;
+
+  // Special case: BROWSER="none" will prevent opening completely.
+  if (browser === 'none') {
+    return false;
+  }
+
+  // If we're on OS X, the user hasn't specifically
+  // requested a different browser, we can try opening
+  // Chrome with AppleScript. This lets us reuse an
+  // existing tab when possible instead of creating a new one.
+  const shouldTryOpenChromeWithAppleScript = (
+    process.platform === 'darwin' && (
+      typeof browser !== 'string' ||
+      browser === OSX_CHROME
+    )
+  );
+
+  if (shouldTryOpenChromeWithAppleScript) {
     try {
       // Try our best to reuse existing tab
       // on OS X Google Chrome with AppleScript
@@ -25,11 +49,12 @@ function openBrowser(url) {
       // Ignore errors.
     }
   }
+
   // Fallback to opn
   // (It will always open new tab)
   try {
-    var option = {app: process.env.BROWSER};
-    opn(url, option).catch(() => {}); // Prevent `unhandledRejection` error.
+    var options = {app: browser};
+    opn(url, options).catch(() => {}); // Prevent `unhandledRejection` error.
     return true;
   } catch (err) {
     return false;
-- 
GitLab